sveltejs/acorn-typescript

Repository tracker

Issues

Parsing fails for function declaration with generic

#13
May 22, 2025
First reported in: https://github.com/sveltejs/kit/issues/13809 Declaring a function with a generic type causes the parsing to fail. Reproduction and instructions in the link below: https://stackblitz.com/edit/vitejs-vite-15ihfkea?file=README.md Logs: > vite-typescript-starter@0.0.0 start /home/projects/vitejs-vite-15ihfkea > node src/index.js SyntaxError: Unexpected token (4:40) at pp$4.raise (file:///home/projects/vitejs-vite-15ihfkea/node_modules/.pnpm/acorn@8.14.1/node_modules/acorn/dist/acorn.mjs:3684:13) at raiseCommonCheck (file:///home/projects/vitejs-vite-15ihfkea/node_modules/.pnpm/@sveltejs+acorn-typescript@1.0.5_acorn@8.14.1/node_modules/@sveltejs/acorn-typescript/index.js:4896:36) at raise (file:///home/projects/vitejs-vite-15ihfkea/node_modules/.pnpm/@sveltejs+acorn-typescript@1.0.5_acorn@8.14.1/node_modules/@sveltejs/acorn-typescript/index.js:4902:21) at pp$9.unexpected (file:///home/projects/vitejs-vite-15ihfkea/node_modules/.pnpm/acorn@8.14.1/node_modules/acorn/dist/acorn.mjs:804:8) at pp$9.semicolon (file:///home/projects/vitejs-vite-15ihfkea/node_modules/.pnpm/acorn@8.14.1/node_modules/acorn/dist/acorn.mjs:781:66) at parseVarStatement (file:///home/projects/vitejs-vite-15ihfkea/node_modules/.pnpm/@sveltejs+acorn-typescript@1.0.5_acorn@8.14.1/node_modules/@sveltejs/acorn-typescript/index.js:3590:14) at pp$8.parseStatement (file:///home/projects/vitejs-vite-15ihfkea/node_modules/.pnpm/acorn@8.14.1/node_modules/acorn/dist/acorn.mjs:959:17) at parseStatement (file:///home/projects/vitejs-vite-15ihfkea/node_modules/.pnpm/@sveltejs+acorn-typescript@1.0.5_acorn@8.14.1/node_modules/@sveltejs/acorn-typescript/index.js:3622:22) at pp$8.parseTopLevel (file:///home/projects/vitejs-vite-15ihfkea/node_modules/.pnpm/acorn@8.14.1/node_modules/acorn/dist/acorn.mjs:861:21) at parse (file:///home/projects/vitejs-vite-15ihfkea/node_modules/.pnpm/acorn@8.14.1/node_modules/acorn/dist/acorn.mjs:630:15) at parse (file:///home/projects/vitejs-vite-15ihfkea/node_modules/.pnpm/@sveltejs+acorn-typescript@1.0.5_acorn@8.14.1/node_modules/@sveltejs/acorn-typescript/index.js:4772:23) at (file:///home/projects/vitejs-vite-15ihfkea/src/index.js:20:73) at _0x203b44 (https://vitejsvite15ihfkea-0fco.w-corp-staticblitz.com/blitz.4d9fd228.js:31:825608) at run (https://vitejsvite15ihfkea-0fco.w-corp-staticblitz.com/blitz.4d9fd228.js:31:826394) at _0x33de07 (https://vitejsvite15ihfkea-0fco.w-corp-staticblitz.com/blitz.4d9fd228.js:31:841515) at _evaluate (https://vitejsvite15ihfkea-0fco.w-corp-staticblitz.com/blitz.4d9fd228.js:31:841869) at evaluate (https://vitejsvite15ihfkea-0fco.w-corp-staticblitz.com/blitz.4d9fd228.js:31:838193) at run (node:internal/modules/esm/module_job:158:3371) Node.js v20.19.1  ELIFECYCLE  Command failed with exit code 1. Removing the comments in the TypeScript file yields a different error: > vite-typescript-starter@0.0.0 start /home/projects/vitejs-vite-15ihfkea > node src/index.js TypeError: exprList is null at toAssignableList (file:///home/projects/vitejs-vite-15ihfkea/node_modules/.pnpm/@sveltejs+acorn-typescript@1.0.5_acorn@8.14.1/node_modules/@sveltejs/acorn-typescript/index.js:3488:29) at pp$5.parseArrowExpression (file:///home/projects/vitejs-vite-15ihfkea/node_modules/.pnpm/acorn@8.14.1/node_modules/acorn/dist/acorn.mjs:3459:22) at tsTryParseGenericAsyncArrowFunction (file:///home/projects/vitejs-vite-15ihfkea/node_modules/.pnpm/@sveltejs+acorn-typescript@1.0.5_acorn@8.14.1/node_modules/@sveltejs/acorn-typescript/index.js:1326:22) at <anonymous> (file:///home/projects/vitejs-vite-15ihfkea/node_modules/.pnpm/@sveltejs+acorn-typescript@1.0.5_acorn@8.14.1/node_modules/@sveltejs/acorn-typescript/index.js:4461:41) at <anonymous> (file:///home/projects/vitejs-vite-15ihfkea/node_modules/.pnpm/@sveltejs+acorn-typescript@1.0.5_acorn@8.14.1/node_modules/@sveltejs/acorn-typescript/index.js:2771:13) at tryParse (file:///home/projects/vitejs-vite-15ihfkea/node_modules/.pnpm/@sveltejs+acorn-typescript@1.0.5_acorn@8.14.1/node_modules/@sveltejs/acorn-typescript/index.js:1216:26) at tsTryParseAndCatch (file:///home/projects/vitejs-vite-15ihfkea/node_modules/.pnpm/@sveltejs+acorn-typescript@1.0.5_acorn@8.14.1/node_modules/@sveltejs/acorn-typescript/index.js:2768:29) at parseSubscript (file:///home/projects/vitejs-vite-15ihfkea/node_modules/.pnpm/@sveltejs+acorn-typescript@1.0.5_acorn@8.14.1/node_modules/@sveltejs/acorn-typescript/index.js:4459:31) at pp$5.parseSubscripts (file:///home/projects/vitejs-vite-15ihfkea/node_modules/.pnpm/acorn@8.14.1/node_modules/acorn/dist/acorn.mjs:2822:24) at pp$5.parseExprSubscripts (file:///home/projects/vitejs-vite-15ihfkea/node_modules/.pnpm/acorn@8.14.1/node_modules/acorn/dist/acorn.mjs:2806:21) at pp$5.parseMaybeUnary (file:///home/projects/vitejs-vite-15ihfkea/node_modules/.pnpm/acorn@8.14.1/node_modules/acorn/dist/acorn.mjs:2761:17) at parseMaybeUnary (file:///home/projects/vitejs-vite-15ihfkea/node_modules/.pnpm/@sveltejs+acorn-typescript@1.0.5_acorn@8.14.1/node_modules/@sveltejs/acorn-typescript/index.js:2705:24) at pp$5.parseExprOps (file:///home/projects/vitejs-vite-15ihfkea/node_modules/.pnpm/acorn@8.14.1/node_modules/acorn/dist/acorn.mjs:2689:19) at parseMaybeConditional (file:///home/projects/vitejs-vite-15ihfkea/node_modules/.pnpm/@sveltejs+acorn-typescript@1.0.5_acorn@8.14.1/node_modules/@sveltejs/acorn-typescript/index.js:3666:25) at parseMaybeAssignOrigin (file:///home/projects/vitejs-vite-15ihfkea/node_modules/.pnpm/@sveltejs+acorn-typescript@1.0.5_acorn@8.14.1/node_modules/@sveltejs/acorn-typescript/index.js:4019:25) at parseMaybeAssign (file:///home/projects/vitejs-vite-15ihfkea/node_modules/.pnpm/@sveltejs+acorn-typescript@1.0.5_acorn@8.14.1/node_modules/@sveltejs/acorn-typescript/index.js:4068:23) at pp$8.parseVar (file:///home/projects/vitejs-vite-15ihfkea/node_modules/.pnpm/acorn@8.14.1/node_modules/acorn/dist/acorn.mjs:1359:24) at parseVarStatement (file:///home/projects/vitejs-vite-15ihfkea/node_modules/.pnpm/@sveltejs+acorn-typescript@1.0.5_acorn@8.14.1/node_modules/@sveltejs/acorn-typescript/index.js:3589:15) at pp$8.parseStatement (file:///home/projects/vitejs-vite-15ihfkea/node_modules/.pnpm/acorn@8.14.1/node_modules/acorn/dist/acorn.mjs:959:17) at parseStatement (file:///home/projects/vitejs-vite-15ihfkea/node_modules/.pnpm/@sveltejs+acorn-typescript@1.0.5_acorn@8.14.1/node_modules/@sveltejs/acorn-typescript/index.js:3622:22) at pp$8.parseTopLevel (file:///home/projects/vitejs-vite-15ihfkea/node_modules/.pnpm/acorn@8.14.1/node_modules/acorn/dist/acorn.mjs:861:21) at parse (file:///home/projects/vitejs-vite-15ihfkea/node_modules/.pnpm/acorn@8.14.1/node_modules/acorn/dist/acorn.mjs:630:15) at parse (file:///home/projects/vitejs-vite-15ihfkea/node_modules/.pnpm/@sveltejs+acorn-typescript@1.0.5_acorn@8.14.1/node_modules/@sveltejs/acorn-typescript/index.js:4772:23) at (file:///home/projects/vitejs-vite-15ihfkea/src/index.js:20:73) at _0x203b44 (https://vitejsvite15ihfkea-0fco.w-corp-staticblitz.com/blitz.4d9fd228.js:31:825608) at run (https://vitejsvite15ihfkea-0fco.w-corp-staticblitz.com/blitz.4d9fd228.js:31:826394) at _0x33de07 (https://vitejsvite15ihfkea-0fco.w-corp-staticblitz.com/blitz.4d9fd228.js:31:841515) at _evaluate (https://vitejsvite15ihfkea-0fco.w-corp-staticblitz.com/blitz.4d9fd228.js:31:841869) at evaluate (https://vitejsvite15ihfkea-0fco.w-corp-staticblitz.com/blitz.4d9fd228.js:31:838193) at run (node:internal/modules/esm/module_job:158:3371) Node.js v20.19.1  ELIFECYCLE  Command failed with exit code 1.

Further align with @typescript-eslint/types

#7
Apr 1, 2025
This is an awesome start https://github.com/sveltejs/acorn-typescript/commit/bc39dcb0702c9ccd563abba2a3d5d9d9d58e4104 but sadly there a a few more places that don't match. A good start would be by having a look at the latest esrap version (or more specifically this pr), and go through the few ignored type-check warnings. Here is a list of what's currently not entirely correct according to the sepc:
Typeproperty isproperty should be
TSTypeParameter (property name)typeof stringtypeof Identifier
TSFunctionTypeparametersparams
TSFunctionTypetypeAnnotation.typeAnnotationtypeParameters
TSMethodSignatureparametersparams
TSMethodSignaturetypeAnnotationtypeParameters
This is an incomplete list of course. There are also two or there more type errors inside esrap that might be related to this, or to wrong type expectations in esrap. I have excluded those cases in the list above.