{"record":{"id":"481a12b72e4e9a9b","repo":"apple/pkl","slug":"invalidtopleveltoken-481a12","errorCode":"invalidTopLevelToken","errorMessage":"Invalid token at position. Expected a class, typealias, method, or property.","messagePattern":"Invalid token at position\\. Expected a class, typealias, method, or property\\.","errorType":"exception","errorClass":"ParserError","httpStatus":null,"severity":"error","filePath":"pkl-parser/src/main/java/org/pkl/parser/ParserImpl.java","lineNumber":356,"sourceCode":"      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    }\n    expect(Token.ASSIGN, \"unexpectedToken\", \"=\");\n    var type = parseType();\n    var children =\n        new ArrayList<@Nullable Node>(header.annotations.size() + header.modifiers.size() + 5);\n    children.add(header.docComment);","sourceCodeStart":338,"sourceCodeEnd":374,"githubUrl":"https://github.com/apple/pkl/blob/f3efcbfc9b60d30053b0536d664948d7aa1b8673/pkl-parser/src/main/java/org/pkl/parser/ParserImpl.java#L338-L374","documentation":"The parser encountered a token at module-member position that cannot start a class, typealias, method, or property. After ruling out keywords and doc comments, parseModuleMember throws \"Invalid token at position\" as the final fallback for any other unexpected token at top level.","triggerScenarios":"Statements at top level that Pkl doesn't allow (e.g. bare expressions, `new` blocks, stray `}` or `,`); object-body-only syntax like `x { ... }` amending without `=` used at module level in a way the grammar rejects; an operator or punctuation starting a line at module scope.","commonSituations":"Copy-pasting object-body entries outside of any object; an extra closing brace ending the enclosing class early so following members land at top level; expressions written where declarations are required.","solutions":["Verify the token is at module level intentionally — most often an extra `}` closed the enclosing class/module scope early.","Start members with a valid declaration: `name = expr`, `name: Type`, `function f() {...}`, `class X {}`, or `typealias Y = ...`.","Move expressions inside an object body or assign them to a property.","Check brace balance in the preceding code with an editor's bracket matching."],"exampleFix":"// before (brace closed class early)\nclass Bird {\n  name: String\n}\nfly = true // invalid at top level inside module member position\n// after\nclass Bird {\n  name: String\n  fly = true\n}","handlingStrategy":"validation","validationCode":"// Flag top-level lines that cannot start a module member\nconst MEMBER_START = /^\\s*(class\\b|typealias\\b|function\\b|amends\\b|extends\\b|import\\b|`?[A-Za-z_]\\w*`?\\s*(:|=|\\())/;\nfunction invalidTopLevelLines(lines) {\n  return lines.map((l, i) => [l.trim(), i])\n    .filter(([l]) => l && !l.startsWith('//') && !MEMBER_START.test(l))\n    .map(([, i]) => i + 1);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep every top-level line a declaration, assignment-property, import, or header.","Match braces so members never fall outside their class/object scope.","Never paste object-body entries at module level."],"tags":["parser","syntax","top-level"],"backgroundTag":"invalid-argument-value","analyzedSha":"f3efcbfc9b60d30053b0536d664948d7aa1b8673","analyzedAt":"2026-09-08T13:10:45.570Z","contentChangedAt":"2026-09-08T13:10:45.570Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}