{"record":{"id":"b4a57b368d46fae1","repo":"apple/pkl","slug":"keywordnotallowedhere-b4a57b","errorCode":"keywordNotAllowedHere","errorMessage":"Keyword `{0}` is not allowed here.\n\nIf you must use this name as identifier, enclose it in backticks.","messagePattern":"Keyword `(.+?)` is not allowed here\\.\n\nIf you must use this name as identifier, enclose it in backticks\\.","errorType":"exception","errorClass":"ParserError","httpStatus":null,"severity":"error","filePath":"pkl-parser/src/main/java/org/pkl/parser/ParserImpl.java","lineNumber":351,"sourceCode":"      case TYPE_ALIAS -> {\n        var node = parseTypeAlias(header);\n        nodes.add(node);\n        return node.span();\n      }\n      case CLASS -> {\n        var node = parseClass(header);\n        nodes.add(node);\n        return node.span();\n      }\n      case FUNCTION -> {\n        var node = parseClassMethod(header);\n        nodes.add(node);\n        return node.span();\n      }\n      case EOF -> throw parserError(\"unexpectedEndOfFile\");\n      default -> {\n        if (lookahead.isKeyword()) {\n          throw parserError(\"keywordNotAllowedHere\", lookahead.text());\n        }\n        if (lookahead == Token.DOC_COMMENT) {\n          throw parserError(\"danglingDocComment\");\n        }\n        throw parserError(\"invalidTopLevelToken\");\n      }\n    }\n  }\n\n  private TypeAlias parseTypeAlias(MemberHeader header) {\n    var typeAlias = next().span;\n    var startSpan = header.span(typeAlias);\n\n    var identifier = parseIdentifier();\n    TypeParameterList typePars = null;\n    if (lookahead == Token.LT) {\n      typePars = parseTypeParameterList();\n    }","sourceCodeStart":333,"sourceCodeEnd":369,"githubUrl":"https://github.com/apple/pkl/blob/f3efcbfc9b60d30053b0536d664948d7aa1b8673/pkl-parser/src/main/java/org/pkl/parser/ParserImpl.java#L333-L369","documentation":"A reserved keyword appeared where a module member (class, typealias, method, property) is expected. Pkl does not allow keywords as top-level identifiers unless enclosed in backticks, so parseModuleMember throws \"Keyword `{0}` is not allowed here\" and suggests backtick-escaping.","triggerScenarios":"Declaring a top-level property named with a keyword, e.g. `if = 1`, `class = ...`, `import = ...`; writing a keyword at top level by mistake (e.g. a stray `else` or `super` line); translation from JSON/YAML keys that collide with Pkl keywords.","commonSituations":"Converting JSON/YAML config whose keys are keyword-like (`is`, `in`, `out`, `type`); typos where an intended identifier matches a keyword; code generators emitting keys without keyword escaping.","solutions":["Enclose the keyword in backticks to use it as an identifier: `if` = 1.","Rename the member to a non-keyword identifier if backticks are not required downstream.","Remove the stray keyword line if it was accidental (e.g. leftover from an edit).","If generated config, make the generator backtick-escape keys that collide with Pkl keywords."],"exampleFix":"// before\nif = 3\n// after\n`if` = 3","handlingStrategy":"type-guard","validationCode":"// Backtick-escape Pkl keyword identifiers before emitting config\nconst PKL_KEYWORDS = new Set(['abstract','amends','as','augments','class','default','else','extends','external','false','fixed','function','hidden','if','import','in','is','let','local','module','new','nothing','null','open','out','override','read','super','this','true','typealias','when']);\nconst ident = (name) => PKL_KEYWORDS.has(name) ? '`' + name + '`' : name;","typeGuard":"const isPklKeyword = (name) => PKL_KEYWORDS.has(name);","tryCatchPattern":null,"preventionTips":["Backtick-escape any generated identifier that matches a Pkl keyword.","Prefer renaming keyword-like keys during JSON/YAML → Pkl conversion.","Keep a keyword list in your code generator and test it."],"tags":["parser","keyword","identifier","syntax"],"backgroundTag":"invalid-identifier-format","analyzedSha":"f3efcbfc9b60d30053b0536d664948d7aa1b8673","analyzedAt":"2026-09-08T13:10:45.570Z","contentChangedAt":"2026-09-08T13:10:45.570Z","schemaVersion":2},"datasetVersion":"2026-09-17T20:17:13.540Z"}