Skip to content

Slow createProjectProgram/createWatchProgram  #2398

@vilicvane

Description

@vilicvane

Repro

{
  "parserOptions": {
    "project": "./*/**/tsconfig.json"
  }
}

I use ./*/**/tsconfig.json to ignore the root tsconfig.json so that it compares with the later configuration. Using ./**/tsconfig.json will not change the performance.

The @mufan/code-* packages below involves symlinks.

Please let me know if this is not obvious enough so I can prepare an actual repro.

debug output

$ eslint .
  typescript-eslint:typescript-estree:parser parserOptions.project matched projects: [
  './node_modules/@bcoe/v8-coverage/dist/lib/tsconfig.json',
  './node_modules/@bcoe/v8-coverage/tsconfig.json',
  './node_modules/@mufan/code-boilerplates/tsconfig.json',
  './node_modules/@mufan/code-templates/tsconfig.json',
  './node_modules/@mufan/code/tsconfig.json',
  './node_modules/@mufan/eslint-plugin/src/tsconfig.json',
  './node_modules/fastq/test/tsconfig.json',
  './node_modules/rxjs/src/tsconfig.json',
  './node_modules/tsconfig-paths/test/tsconfig.json',
  './node_modules/uri-js/tsconfig.json',
  './packages/cli/src/program/tsconfig.json',
  './packages/core/src/library/tsconfig.json',
  './packages/utils/src/library/tsconfig.json',
  './packages/utils/src/test/tsconfig.json'
] +0ms
  typescript-eslint:typescript-estree:parser ignore list applied to parserOptions.project: [
  './packages/cli/src/program/tsconfig.json',
  './packages/core/src/library/tsconfig.json',
  './packages/utils/src/library/tsconfig.json',
  './packages/utils/src/test/tsconfig.json'
] +3ms
  typescript-eslint:typescript-estree:createProjectProgram Creating project program for: /root/workspace/magicspace/packages/cli/src/program/@command.ts +0ms
  typescript-eslint:typescript-estree:createWatchProgram File did not belong to any existing programs, moving to create/update. /root/workspace/magicspace/packages/cli/src/program/@command.ts +0ms
  typescript-eslint:typescript-estree:createWatchProgram Creating watch program for /root/workspace/magicspace/packages/cli/src/program/tsconfig.json. +0ms
  typescript-eslint:typescript-estree:createWatchProgram Creating watch program for /root/workspace/magicspace/packages/core/src/library/tsconfig.json. +906ms
  typescript-eslint:typescript-estree:createWatchProgram Creating watch program for /root/workspace/magicspace/packages/utils/src/library/tsconfig.json. +632ms
  typescript-eslint:typescript-estree:createWatchProgram Creating watch program for /root/workspace/magicspace/packages/utils/src/test/tsconfig.json. +399ms
  typescript-eslint:typescript-estree:parser parserOptions.project matched projects: [
  './node_modules/@bcoe/v8-coverage/dist/lib/tsconfig.json',
  './node_modules/@bcoe/v8-coverage/tsconfig.json',
  './node_modules/@mufan/code-boilerplates/tsconfig.json',
  './node_modules/@mufan/code-templates/tsconfig.json',
  './node_modules/@mufan/code/tsconfig.json',
  './node_modules/@mufan/eslint-plugin/src/tsconfig.json',
  './node_modules/fastq/test/tsconfig.json',
  './node_modules/rxjs/src/tsconfig.json',
  './node_modules/tsconfig-paths/test/tsconfig.json',
  './node_modules/uri-js/tsconfig.json',
  './packages/cli/src/program/tsconfig.json',
  './packages/core/src/library/tsconfig.json',
  './packages/utils/src/library/tsconfig.json',
  './packages/utils/src/test/tsconfig.json'
] +3s
  typescript-eslint:typescript-estree:parser ignore list applied to parserOptions.project: [
  './packages/cli/src/program/tsconfig.json',
  './packages/core/src/library/tsconfig.json',
  './packages/utils/src/library/tsconfig.json',
  './packages/utils/src/test/tsconfig.json'
] +0ms
  typescript-eslint:typescript-estree:createProjectProgram Creating project program for: /root/workspace/magicspace/packages/cli/src/program/@space.ts +3s
  typescript-eslint:typescript-estree:createWatchProgram Found existing program for file. /root/workspace/magicspace/packages/cli/src/program/@space.ts +1s
  typescript-eslint:typescript-estree:parser parserOptions.project matched projects: [
  './node_modules/@bcoe/v8-coverage/dist/lib/tsconfig.json',
  './node_modules/@bcoe/v8-coverage/tsconfig.json',
  './node_modules/@mufan/code-boilerplates/tsconfig.json',
  './node_modules/@mufan/code-templates/tsconfig.json',
  './node_modules/@mufan/code/tsconfig.json',
  './node_modules/@mufan/eslint-plugin/src/tsconfig.json',
  './node_modules/fastq/test/tsconfig.json',
  './node_modules/rxjs/src/tsconfig.json',
  './node_modules/tsconfig-paths/test/tsconfig.json',
  './node_modules/uri-js/tsconfig.json',
  './packages/cli/src/program/tsconfig.json',
  './packages/core/src/library/tsconfig.json',
  './packages/utils/src/library/tsconfig.json',
  './packages/utils/src/test/tsconfig.json'
] +1s
  typescript-eslint:typescript-estree:parser ignore list applied to parserOptions.project: [
  './packages/cli/src/program/tsconfig.json',
  './packages/core/src/library/tsconfig.json',
  './packages/utils/src/library/tsconfig.json',
  './packages/utils/src/test/tsconfig.json'
] +0ms
  typescript-eslint:typescript-estree:createProjectProgram Creating project program for: /root/workspace/magicspace/packages/cli/src/program/@types/prompts.d.ts +1s
  typescript-eslint:typescript-estree:createWatchProgram Found existing program for file. /root/workspace/magicspace/packages/cli/src/program/@types/prompts.d.ts +1s
  typescript-eslint:typescript-estree:parser parserOptions.project matched projects: [
  './node_modules/@bcoe/v8-coverage/dist/lib/tsconfig.json',
  './node_modules/@bcoe/v8-coverage/tsconfig.json',
  './node_modules/@mufan/code-boilerplates/tsconfig.json',
  './node_modules/@mufan/code-templates/tsconfig.json',
  './node_modules/@mufan/code/tsconfig.json',
  './node_modules/@mufan/eslint-plugin/src/tsconfig.json',
  './node_modules/fastq/test/tsconfig.json',
  './node_modules/rxjs/src/tsconfig.json',
  './node_modules/tsconfig-paths/test/tsconfig.json',
  './node_modules/uri-js/tsconfig.json',
  './packages/cli/src/program/tsconfig.json',
  './packages/core/src/library/tsconfig.json',
  './packages/utils/src/library/tsconfig.json',
  './packages/utils/src/test/tsconfig.json'
] +998ms
  typescript-eslint:typescript-estree:parser ignore list applied to parserOptions.project: [
  './packages/cli/src/program/tsconfig.json',
  './packages/core/src/library/tsconfig.json',
  './packages/utils/src/library/tsconfig.json',
  './packages/utils/src/test/tsconfig.json'
] +0ms

But if I change the project pattern and ignore the node_modules before ignore list applied, then it lints a lot faster:

{
  "parserOptions": {
    "project": "./!(node_modules)/**/tsconfig.json"
  }
}
debug output

$ eslint .
  typescript-eslint:typescript-estree:parser parserOptions.project matched projects: [
  './packages/cli/src/program/tsconfig.json',
  './packages/core/src/library/tsconfig.json',
  './packages/utils/src/library/tsconfig.json',
  './packages/utils/src/test/tsconfig.json'
] +0ms
  typescript-eslint:typescript-estree:parser ignore list applied to parserOptions.project: [
  './packages/cli/src/program/tsconfig.json',
  './packages/core/src/library/tsconfig.json',
  './packages/utils/src/library/tsconfig.json',
  './packages/utils/src/test/tsconfig.json'
] +2ms
  typescript-eslint:typescript-estree:createProjectProgram Creating project program for: /root/workspace/magicspace/packages/cli/src/program/@command.ts +0ms
  typescript-eslint:typescript-estree:createWatchProgram File did not belong to any existing programs, moving to create/update. /root/workspace/magicspace/packages/cli/src/program/@command.ts +0ms
  typescript-eslint:typescript-estree:createWatchProgram Creating watch program for /root/workspace/magicspace/packages/cli/src/program/tsconfig.json. +0ms
  typescript-eslint:typescript-estree:createWatchProgram Creating watch program for /root/workspace/magicspace/packages/core/src/library/tsconfig.json. +843ms
  typescript-eslint:typescript-estree:createWatchProgram Creating watch program for /root/workspace/magicspace/packages/utils/src/library/tsconfig.json. +641ms
  typescript-eslint:typescript-estree:createWatchProgram Creating watch program for /root/workspace/magicspace/packages/utils/src/test/tsconfig.json. +385ms
  typescript-eslint:typescript-estree:parser parserOptions.project matched projects: [
  './packages/cli/src/program/tsconfig.json',
  './packages/core/src/library/tsconfig.json',
  './packages/utils/src/library/tsconfig.json',
  './packages/utils/src/test/tsconfig.json'
] +2s
  typescript-eslint:typescript-estree:parser ignore list applied to parserOptions.project: [
  './packages/cli/src/program/tsconfig.json',
  './packages/core/src/library/tsconfig.json',
  './packages/utils/src/library/tsconfig.json',
  './packages/utils/src/test/tsconfig.json'
] +1ms
  typescript-eslint:typescript-estree:createProjectProgram Creating project program for: /root/workspace/magicspace/packages/cli/src/program/@space.ts +2s
  typescript-eslint:typescript-estree:createWatchProgram Found existing program for file. /root/workspace/magicspace/packages/cli/src/program/@space.ts +307ms
  typescript-eslint:typescript-estree:parser parserOptions.project matched projects: [
  './packages/cli/src/program/tsconfig.json',
  './packages/core/src/library/tsconfig.json',
  './packages/utils/src/library/tsconfig.json',
  './packages/utils/src/test/tsconfig.json'
] +87ms
  typescript-eslint:typescript-estree:parser ignore list applied to parserOptions.project: [
  './packages/cli/src/program/tsconfig.json',
  './packages/core/src/library/tsconfig.json',
  './packages/utils/src/library/tsconfig.json',
  './packages/utils/src/test/tsconfig.json'
] +0ms
  typescript-eslint:typescript-estree:createProjectProgram Creating project program for: /root/workspace/magicspace/packages/cli/src/program/@types/prompts.d.ts +87ms
  typescript-eslint:typescript-estree:createWatchProgram Found existing program for file. /root/workspace/magicspace/packages/cli/src/program/@types/prompts.d.ts +87ms
  typescript-eslint:typescript-estree:parser parserOptions.project matched projects: [
  './packages/cli/src/program/tsconfig.json',
  './packages/core/src/library/tsconfig.json',
  './packages/utils/src/library/tsconfig.json',
  './packages/utils/src/test/tsconfig.json'
] +20ms
  typescript-eslint:typescript-estree:parser ignore list applied to parserOptions.project: [
  './packages/cli/src/program/tsconfig.json',
  './packages/core/src/library/tsconfig.json',
  './packages/utils/src/library/tsconfig.json',
  './packages/utils/src/test/tsconfig.json'
] +0ms

Versions

package version
@typescript-eslint/typescript-estree 3.9.0
@typescript-eslint/parser 3.9.0
TypeScript 3.9.7
node 14.4.0
npm n/a

Metadata

Metadata

Assignees

Labels

breaking changeThis change will require a new major version to be releasedbugSomething isn't workingpackage: typescript-estreeIssues related to @typescript-eslint/typescript-estree

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

    pFad - Phonifier reborn

    Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

    Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


    Alternative Proxies:

    Alternative Proxy

    pFad Proxy

    pFad v3 Proxy

    pFad v4 Proxy