-
-
Notifications
You must be signed in to change notification settings - Fork 2.8k
Closed
Labels
accepting prsGo ahead, send a pull request that resolves this issueGo ahead, send a pull request that resolves this issuegood first issueGood for newcomersGood for newcomersrepo maintenancethings to do with maintenance of the repo, and not with code/docsthings to do with maintenance of the repo, and not with code/docs
Description
Suggestion
Within packages/typescript-estree
, parse.test.ts
takes about ~11 seconds on average on my M2 Macbook Air. That's quite a lot of time to spend on one test file.
I set the slowTestThreshold
to 0
and ran it locally. Here are the tests that took >100ms:
parseAndGenerateServices
preserveNodeMaps
✓ should preserve node maps by default for parseAndGenerateServices() (666 ms)
project includes
✓ doesn't error for matched files (484 ms)
invalid project error messages
✓ throws when non of multiple projects include the file (507 ms)
projectFolderIgnoreList
✓ ignores nothing when given nothing (897 ms)
✓ ignores a folder when given a string glob (431 ms)
moduleResolver
when file is in the project
✓ returns error if __PLACEHOLDER__ can not be resolved (1998 ms)
✓ resolves __PLACEHOLDER__ correctly (1903 ms)
when file is not in the project and createDefaultProgram=true
✓ returns error because __PLACEHOLDER__ can not be resolved (1607 ms)
✓ resolves __PLACEHOLDER__ correctly (1740 ms)
Proposal: let's move each of the groups inside parseAndGenerateServices
to their own test file? For example, parse.moduleResolver.test.ts
? That way test runners able to parallelize test running across different cores will be able to make these tests run more in parallel. I applied a similar change in #4599.
Full output from yarn jest lib/parse.test.ts --verbose
```plaintext
PASS tests/lib/parse.test.ts (10.879 s)
parseWithNodeMaps()
basic functionality
✓ should parse an empty string (6 ms)
✓ parse() should be the same as parseWithNodeMaps().ast (5 ms)
✓ should simple code (3 ms)
modules
✓ should have correct column number when strict mode error occurs (1 ms)
general
✓ output tokens, comments, locs, and ranges when called with those options (2 ms)
✓ output should not contain loc (1 ms)
✓ output should not contain range (1 ms)
non string code
✓ should correctly convert code to a string for parse() (1 ms)
✓ should correctly convert code to a string for parseAndGenerateServices() (3 ms)
loggerFn should be propagated to ast-converter
✓ output tokens, comments, locs, and ranges when called with those options (1 ms)
parseAndGenerateServices
errorOnTypeScriptSyntacticAndSemanticIssues
✓ should throw on invalid option when used in parseWithNodeMaps (8 ms)
✓ should not throw when used in parseAndGenerateServices (24 ms)
✓ should error on invalid code (2 ms)
preserveNodeMaps
✓ should not impact the use of parse() (3 ms)
✓ should not impact the use of parseWithNodeMaps() (2 ms)
✓ should preserve node maps by default for parseAndGenerateServices() (666 ms)
should preserve node maps for parseAndGenerateServices() when option is `true`, regardless of `project` config
✓ without project (1 ms)
✓ with project (1 ms)
should not preserve node maps for parseAndGenerateServices() when option is `false`, regardless of `project` config
✓ without project
✓ with project
isolated parsing
✓ should parse .js file - without JSX content - parserOptions.jsx = false (1 ms)
✓ should parse .js file - without JSX content - parserOptions.jsx = true (3 ms)
✓ should parse .js file - with JSX content - parserOptions.jsx = false (4 ms)
✓ should parse .js file - with JSX content - parserOptions.jsx = true (2 ms)
✓ should parse .jsx file - without JSX content - parserOptions.jsx = false (4 ms)
✓ should parse .jsx file - without JSX content - parserOptions.jsx = true (1 ms)
✓ should parse .jsx file - with JSX content - parserOptions.jsx = false (1 ms)
✓ should parse .jsx file - with JSX content - parserOptions.jsx = true (1 ms)
✓ should parse .ts file - without JSX content - parserOptions.jsx = false
✓ should parse .ts file - without JSX content - parserOptions.jsx = true (1 ms)
✓ should parse .ts file - with JSX content - parserOptions.jsx = false (2 ms)
✓ should parse .ts file - with JSX content - parserOptions.jsx = true (1 ms)
✓ should parse .tsx file - without JSX content - parserOptions.jsx = false (1 ms)
✓ should parse .tsx file - without JSX content - parserOptions.jsx = true (1 ms)
✓ should parse .tsx file - with JSX content - parserOptions.jsx = false (2 ms)
✓ should parse .tsx file - with JSX content - parserOptions.jsx = true (1 ms)
✓ should parse .vue file - without JSX content - parserOptions.jsx = false (1 ms)
✓ should parse .vue file - without JSX content - parserOptions.jsx = true (1 ms)
✓ should parse .vue file - with JSX content - parserOptions.jsx = false
✓ should parse .vue file - with JSX content - parserOptions.jsx = true (1 ms)
✓ should parse .json file - without JSX content - parserOptions.jsx = false (1 ms)
invalid file error messages
project includes
✓ doesn't error for matched files (484 ms)
✓ errors for not included files (2 ms)
"parserOptions.extraFileExtensions" is empty
✓ should not error
✓ the extension does not match
"parserOptions.extraFileExtensions" is non-empty
✓ invalid extension
✓ the extension does not match
the extension matches
✓ the file is included (3 ms)
✓ the file isn't included (1 ms)
✓ duplicate extension
invalid project error messages
✓ throws when non of multiple projects include the file (507 ms)
debug options
✓ shouldn't turn on debugger if no options were provided (1 ms)
✓ should turn on eslint debugger (1 ms)
✓ should turn on typescript-eslint debugger
✓ should turn on both eslint and typescript-eslint debugger (1 ms)
✓ should turn on typescript debugger
projectFolderIgnoreList
✓ ignores nothing when given nothing (897 ms)
✓ ignores a folder when given a string glob (431 ms)
moduleResolver
when file is in the project
✓ returns error if __PLACEHOLDER__ can not be resolved (1998 ms)
✓ throws error if moduleResolver can not be found (2 ms)
✓ resolves __PLACEHOLDER__ correctly (1903 ms)
when file is not in the project and createDefaultProgram=true
✓ returns error because __PLACEHOLDER__ can not be resolved (1607 ms)
✓ resolves __PLACEHOLDER__ correctly (1740 ms)
```
Metadata
Metadata
Assignees
Labels
accepting prsGo ahead, send a pull request that resolves this issueGo ahead, send a pull request that resolves this issuegood first issueGood for newcomersGood for newcomersrepo maintenancethings to do with maintenance of the repo, and not with code/docsthings to do with maintenance of the repo, and not with code/docs