diff --git a/.cspell.json b/.cspell.json index dc41dd9403fb..3edf1d2dc24d 100644 --- a/.cspell.json +++ b/.cspell.json @@ -50,7 +50,7 @@ "Airbnb", "Airbnb's", "ambiently", - "allowdefaultprojectforfiles", + "allowdefaultproject", "Armano", "astexplorer", "Astro", diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1723b2a18c90..3d09db3f80db 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -240,8 +240,8 @@ jobs: # Sadly 1 day is the minimum retention-days: 1 - unit_tests_tsserver: - name: Run Unit Tests with Experimental TSServer + unit_tests_project_service: + name: Run Unit Tests with Project Service needs: [build] runs-on: ubuntu-latest strategy: @@ -265,7 +265,7 @@ jobs: run: npx nx test ${{ matrix.package }} --coverage=false env: CI: true - TYPESCRIPT_ESLINT_EXPERIMENTAL_TSSERVER: true + TYPESCRIPT_ESLINT_PROJECT_SERVICE: true upload_coverage: name: Upload Codecov Coverage diff --git a/CHANGELOG.md b/CHANGELOG.md index 0fba83da23b5..0f73cc6ab546 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,25 @@ +## 7.10.0 (2024-05-20) + + +### 🚀 Features + +- **eslint-plugin:** [sort-type-constituents] support case sensitive sorting ([#8760](https://github.com/typescript-eslint/typescript-eslint/pull/8760)) + +### 🩹 Fixes + +- **eslint-plugin:** [prefer-regexp-exec] fix heuristic to check whether regex may contain global flag ([#8764](https://github.com/typescript-eslint/typescript-eslint/pull/8764)) +- **typescript-estree:** don't add in-project files to defaultProjectMatchedFiles ([#9097](https://github.com/typescript-eslint/typescript-eslint/pull/9097)) +- **utils:** remove function form type from flat config `files` and `ignores` ([#9111](https://github.com/typescript-eslint/typescript-eslint/pull/9111)) + +### ❤️ Thank You + +- auvred @auvred +- Emanuel Hoogeveen @ehoogeveen-medweb +- jsfm01 @jsfm01 +- Kirk Waiblinger + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.9.0 (2024-05-13) diff --git a/docs/packages/Parser.mdx b/docs/packages/Parser.mdx index ff1fc3c83529..14ef7d19ff1d 100644 --- a/docs/packages/Parser.mdx +++ b/docs/packages/Parser.mdx @@ -49,9 +49,9 @@ interface ParserOptions { programs?: import('typescript').Program[]; project?: string | string[] | boolean | null; projectFolderIgnoreList?: string[]; + projectService?: boolean | ProjectServiceOptions; tsconfigRootDir?: string; warnOnUnsupportedTypeScriptVersion?: boolean; - EXPERIMENTAL_useProjectService?: boolean; } ``` @@ -205,9 +205,13 @@ All linted files must be part of the provided program(s). ### `project` +:::note +We now recommend using [`projectService`](#projectservice) instead of `project` for easier configuration and faster linting. +::: + > Default `undefined`. -A path to your project's TSConfig. **This setting is required to use [rules which require type information](../getting-started/Typed_Linting.mdx)**. +A path to your project's TSConfig. **This setting or [`projectService`](#projectservice) are required to use [rules which require type information](../getting-started/Typed_Linting.mdx)**. Accepted value types: @@ -261,7 +265,68 @@ If this setting is specified, you must only lint files that are included in the } ``` -For an option that allows linting files outside of your TSConfig file(s), see [`EXPERIMENTAL_useProjectService`](#experimental_useprojectservice). +For an option that allows linting files outside of your TSConfig file(s), see [`projectService`](#projectService). + + + +### `projectService` + +> Default `false`. + +Specifies using TypeScript APIs to generate type information for rules. +It will automatically detect the TSConfig for each file (like `project: true`), and will also allow type information to be computed for JavaScript files without the `allowJs` compiler option (unlike `project: true`). + +```js +module.exports = { + parser: '@typescript-eslint/parser', + parserOptions: { + projectService: true, + }, +}; +``` + +**This setting or [`project`](#project) are required to use [rules which require type information](../getting-started/Typed_Linting.mdx)**. + +This option brings two main benefits over the older `project`: + +- Simpler configurations: most projects shouldn't need to explicitly configure `project` paths or create `tsconfig.eslint.json`s +- Improved performance: this API is optimized on the TypeScript side for speed + - Initial versions of this option demonstrated performance changes in subsets of the typescript-eslint monorepo ranging from 11% slower to 70% faster + +For more information, see: + +- [feat(typescript-estree): add EXPERIMENTAL_useProjectService option to use TypeScript project service](https://github.com/typescript-eslint/typescript-eslint/pull/6754) +- [docs: blog post on parserOptions.projectService](docs: blog post on parserOptions.projectService ) + +#### `ProjectServiceOptions` + +The behavior of `parserOptions.projectService` can be customized by setting it to an object. + +```js +module.exports = { + parser: '@typescript-eslint/parser', + parserOptions: { + projectService: { + allowDefaultProject: ['./*.js'], + }, + }, +}; +``` + +##### `allowDefaultProject` + +Globs of files to allow running with the default project compiler options despite not being matched by the project service. + +##### `defaultProject` + +Path to a TSConfig to use instead of TypeScript's default project configuration. + +##### `maximumDefaultProjectFileMatchCount_THIS_WILL_SLOW_DOWN_LINTING` + +> Default: `8`. + +The maximum number of files [`allowDefaultProject`](#allowdefaultproject) may match. +Each file match slows down linting, so if you do need to use this, please file an informative issue on typescript-eslint explaining why - so we can help you avoid using it! ### `projectFolderIgnoreList` @@ -303,35 +368,6 @@ Please only submit bug reports when using the officially supported version. ============= ``` -### `EXPERIMENTAL_useProjectService` - -> Default `false`. - -An experimental alternative to `parserOptions.project`. -This directs the parser to use a more seamless TypeScript API to generate type information for rules. -It will automatically detect the TSConfig for each file (like `project: true`), and will also allow type information to be computed for JavaScript files without the `allowJs` compiler option (unlike `project: true`). - -```js -module.exports = { - parser: '@typescript-eslint/parser', - parserOptions: { - EXPERIMENTAL_useProjectService: true, - }, -}; -``` - -This option should bring two main benefits: - -- Simpler configurations: most projects shouldn't need to explicitly configure `project` paths or create `tsconfig.eslint.json`s -- Improved performance: this API is optimized on the TypeScript side for speed - - Initial versions of this option demonstrated performance changes in subsets of the typescript-eslint monorepo ranging from 11% slower to 70% faster - -We're hopeful this option will eventually become the standard way to enable typed linting. -It switches the parser from manually creating TypeScript programs to instead calling the same "project services" API used by editors such as VS Code. -However, because it's so new and untested, we're keeping it under the `EXPERIMENTAL_` prefix for at least all of the `6.X` versions. - -See [feat(typescript-estree): add EXPERIMENTAL_useProjectService option to use TypeScript project service](https://github.com/typescript-eslint/typescript-eslint/pull/6754) for more information. - ## Utilities ### `createProgram(configFile, projectDirectory)` diff --git a/docs/packages/TypeScript_ESTree.mdx b/docs/packages/TypeScript_ESTree.mdx index 6bfe3b93a901..627e54f7acfe 100644 --- a/docs/packages/TypeScript_ESTree.mdx +++ b/docs/packages/TypeScript_ESTree.mdx @@ -198,15 +198,6 @@ interface ParseAndGenerateServicesOptions extends ParseOptions { */ errorOnTypeScriptSyntacticAndSemanticIssues?: boolean; - /** - * ***EXPERIMENTAL FLAG*** - Use this at your own risk. - * - * Whether to create a shared TypeScript server to power program creation. - * - * @see https://github.com/typescript-eslint/typescript-eslint/issues/6575 - */ - EXPERIMENTAL_useProjectService?: boolean | ProjectServiceOptions; - /** * ***EXPERIMENTAL FLAG*** - Use this at your own risk. * @@ -249,6 +240,8 @@ interface ParseAndGenerateServicesOptions extends ParseOptions { * If this is provided, type information will be returned. * * If set to `false`, `null`, or `undefined`, type information will not be returned. + * + * Note that {@link projectService} is now preferred. */ project?: string[] | string | boolean | null; @@ -261,6 +254,11 @@ interface ParseAndGenerateServicesOptions extends ParseOptions { */ projectFolderIgnoreList?: string[]; + /** + * Whether to create a shared TypeScript project service to power program creation. + */ + projectService?: boolean | ProjectServiceOptions; + /** * The absolute path to the root directory for all provided `project`s. */ @@ -281,7 +279,7 @@ interface ProjectServiceOptions { /** * Globs of files to allow running with the default project compiler options. */ - allowDefaultProjectForFiles?: string[]; + allowDefaultProject?: string[]; /** * Path to a TSConfig to use instead of TypeScript's default project configuration. @@ -289,7 +287,7 @@ interface ProjectServiceOptions { defaultProject?: string; /** - * The maximum number of files {@link allowDefaultProjectForFiles} may match. + * The maximum number of files {@link allowDefaultProject} may match. * Each file match slows down linting, so if you do need to use this, please * file an informative issue on typescript-eslint explaining why - so we can * help you avoid using it! diff --git a/docs/troubleshooting/FAQ.mdx b/docs/troubleshooting/FAQ.mdx index 1ccc0d5a0210..578f359132e6 100644 --- a/docs/troubleshooting/FAQ.mdx +++ b/docs/troubleshooting/FAQ.mdx @@ -32,20 +32,20 @@ If you don't find an existing extension rule, or the extension rule doesn't work > We release a new version our tooling every week. > _Please_ ensure that you [check our the latest list of "extension" rules](/rules/#extension-rules) **_before_** filing an issue. - + ## I get errors telling me "Having many files run with the default project is known to cause performance issues and slow down linting." -These errors are caused by using the [`EXPERIMENTAL_useProjectService`](../packages/Parser.mdx#experimental_useprojectservice) `allowDefaultProjectForFiles` with an excessively wide glob. -`allowDefaultProjectForFiles` causes a new TypeScript "program" to be built for each "out of project" file it includes, which incurs a performance overhead for each file. +These errors are caused by using the [`projectService`](../packages/Parser.mdx#projectService) `allowDefaultProject` with an excessively wide glob. +`allowDefaultProject` causes a new TypeScript "program" to be built for each "out of project" file it includes, which incurs a performance overhead for each file. -To resolve this error, narrow the glob(s) used for `allowDefaultProjectForFiles` to include fewer files. +To resolve this error, narrow the glob(s) used for `allowDefaultProject` to include fewer files. For example: ```diff title="eslint.config.js" parserOptions: { - EXPERIMENTAL_useProjectService: { - allowDefaultProjectForFiles: [ + projectService: { + allowDefaultProject: [ - "**/*.js", + "./*.js" ] @@ -533,6 +533,6 @@ If you think you're having issues with performance, see our [Performance Trouble ## Are TypeScript project references supported? -Yes, but only with [`EXPERIMENTAL_useProjectService`](../packages/Parser.mdx#experimental_useprojectservice). +Yes, but only with [`projectService`](../packages/Parser.mdx#projectService). See [issue #2094 discussing project references](https://github.com/typescript-eslint/typescript-eslint/issues/2094) for more details. diff --git a/packages/ast-spec/CHANGELOG.md b/packages/ast-spec/CHANGELOG.md index be4345a15879..be40a99d5f25 100644 --- a/packages/ast-spec/CHANGELOG.md +++ b/packages/ast-spec/CHANGELOG.md @@ -1,3 +1,9 @@ +## 7.10.0 (2024-05-20) + +This was a version bump only for ast-spec to align it with other projects, there were no code changes. + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.9.0 (2024-05-13) This was a version bump only for ast-spec to align it with other projects, there were no code changes. diff --git a/packages/ast-spec/package.json b/packages/ast-spec/package.json index 62d53f51c8bb..8d85da7da747 100644 --- a/packages/ast-spec/package.json +++ b/packages/ast-spec/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/ast-spec", - "version": "7.9.0", + "version": "7.10.0", "description": "Complete specification for the TypeScript-ESTree AST", "private": true, "keywords": [ diff --git a/packages/eslint-plugin-internal/CHANGELOG.md b/packages/eslint-plugin-internal/CHANGELOG.md index 35f68499b9d0..a5894b814265 100644 --- a/packages/eslint-plugin-internal/CHANGELOG.md +++ b/packages/eslint-plugin-internal/CHANGELOG.md @@ -1,3 +1,9 @@ +## 7.10.0 (2024-05-20) + +This was a version bump only for eslint-plugin-internal to align it with other projects, there were no code changes. + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.9.0 (2024-05-13) This was a version bump only for eslint-plugin-internal to align it with other projects, there were no code changes. diff --git a/packages/eslint-plugin-internal/package.json b/packages/eslint-plugin-internal/package.json index 92476c2e0767..216b5d38335e 100644 --- a/packages/eslint-plugin-internal/package.json +++ b/packages/eslint-plugin-internal/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/eslint-plugin-internal", - "version": "7.9.0", + "version": "7.10.0", "private": true, "main": "dist/index.js", "types": "index.d.ts", @@ -15,10 +15,10 @@ }, "dependencies": { "@prettier/sync": "^0.5.1", - "@typescript-eslint/rule-tester": "7.9.0", - "@typescript-eslint/scope-manager": "7.9.0", - "@typescript-eslint/type-utils": "7.9.0", - "@typescript-eslint/utils": "7.9.0", + "@typescript-eslint/rule-tester": "7.10.0", + "@typescript-eslint/scope-manager": "7.10.0", + "@typescript-eslint/type-utils": "7.10.0", + "@typescript-eslint/utils": "7.10.0", "prettier": "^3.2.5" }, "devDependencies": { diff --git a/packages/eslint-plugin/CHANGELOG.md b/packages/eslint-plugin/CHANGELOG.md index 65f276cd215c..af486790403a 100644 --- a/packages/eslint-plugin/CHANGELOG.md +++ b/packages/eslint-plugin/CHANGELOG.md @@ -1,3 +1,25 @@ +## 7.10.0 (2024-05-20) + + +### 🚀 Features + +- **eslint-plugin:** [sort-type-constituents] support case sensitive sorting + + +### 🩹 Fixes + +- **eslint-plugin:** [prefer-regexp-exec] fix heuristic to check whether regex may contain global flag + + +### ❤️ Thank You + +- auvred +- Emanuel Hoogeveen +- jsfm01 +- Kirk Waiblinger + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.9.0 (2024-05-13) diff --git a/packages/eslint-plugin/docs/rules/no-floating-promises.mdx b/packages/eslint-plugin/docs/rules/no-floating-promises.mdx index 9ef3c839825e..3caca81896c5 100644 --- a/packages/eslint-plugin/docs/rules/no-floating-promises.mdx +++ b/packages/eslint-plugin/docs/rules/no-floating-promises.mdx @@ -100,7 +100,7 @@ With this option set to `true`, and if you are using `no-void`, you should turn ### `ignoreIIFE` -This allows you to skip checking of async IIFEs (Immediately Invoked function Expressions). +This allows you to skip checking of async IIFEs (Immediately Invoked Function Expressions). Examples of **correct** code for this rule with `{ ignoreIIFE: true }`: diff --git a/packages/eslint-plugin/package.json b/packages/eslint-plugin/package.json index 4cc74e46c448..e994b74c61dd 100644 --- a/packages/eslint-plugin/package.json +++ b/packages/eslint-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/eslint-plugin", - "version": "7.9.0", + "version": "7.10.0", "description": "TypeScript plugin for ESLint", "files": [ "dist", @@ -62,10 +62,10 @@ }, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.9.0", - "@typescript-eslint/type-utils": "7.9.0", - "@typescript-eslint/utils": "7.9.0", - "@typescript-eslint/visitor-keys": "7.9.0", + "@typescript-eslint/scope-manager": "7.10.0", + "@typescript-eslint/type-utils": "7.10.0", + "@typescript-eslint/utils": "7.10.0", + "@typescript-eslint/visitor-keys": "7.10.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -76,8 +76,8 @@ "@types/marked": "^5.0.2", "@types/mdast": "^4.0.3", "@types/natural-compare": "*", - "@typescript-eslint/rule-schema-to-typescript-types": "7.9.0", - "@typescript-eslint/rule-tester": "7.9.0", + "@typescript-eslint/rule-schema-to-typescript-types": "7.10.0", + "@typescript-eslint/rule-tester": "7.10.0", "ajv": "^6.12.6", "cross-env": "^7.0.3", "cross-fetch": "*", diff --git a/packages/eslint-plugin/src/rules/naming-convention-utils/parse-options.ts b/packages/eslint-plugin/src/rules/naming-convention-utils/parse-options.ts index 557393268f9b..08ac8d41c8b0 100644 --- a/packages/eslint-plugin/src/rules/naming-convention-utils/parse-options.ts +++ b/packages/eslint-plugin/src/rules/naming-convention-utils/parse-options.ts @@ -80,9 +80,7 @@ function normalizeOption(option: Selector): NormalizedSelector[] { } function parseOptions(context: Context): ParsedOptions { - const normalizedOptions = context.options - .map(opt => normalizeOption(opt)) - .reduce((acc, val) => acc.concat(val), []); + const normalizedOptions = context.options.flatMap(normalizeOption); const result = getEnumNames(Selectors).reduce((acc, k) => { acc[k] = createValidator(k, context, normalizedOptions); diff --git a/packages/eslint-plugin/tests/rules/no-unnecessary-condition.test.ts b/packages/eslint-plugin/tests/rules/no-unnecessary-condition.test.ts index f9cda10c6b67..5b84d30123de 100644 --- a/packages/eslint-plugin/tests/rules/no-unnecessary-condition.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unnecessary-condition.test.ts @@ -592,9 +592,9 @@ const key = '1' as BrandedKey; foo?.[key]?.trim(); `, parserOptions: { - EXPERIMENTAL_useProjectService: false, - tsconfigRootDir: getFixturesRootDir(), project: './tsconfig.noUncheckedIndexedAccess.json', + projectService: false, + tsconfigRootDir: getFixturesRootDir(), }, }, { @@ -607,9 +607,9 @@ declare const key: Key; foo?.[key].trim(); `, parserOptions: { - EXPERIMENTAL_useProjectService: false, - tsconfigRootDir: getFixturesRootDir(), project: './tsconfig.noUncheckedIndexedAccess.json', + projectService: false, + tsconfigRootDir: getFixturesRootDir(), }, }, { @@ -625,9 +625,9 @@ function Foo(outer: Outer, key: BrandedKey): number | undefined { } `, parserOptions: { - EXPERIMENTAL_useProjectService: false, - tsconfigRootDir: getFixturesRootDir(), project: './tsconfig.noUncheckedIndexedAccess.json', + projectService: false, + tsconfigRootDir: getFixturesRootDir(), }, }, { @@ -644,9 +644,9 @@ function Foo(outer: Outer, key: Foo): number | undefined { } `, parserOptions: { - EXPERIMENTAL_useProjectService: false, - tsconfigRootDir: getFixturesRootDir(), project: './tsconfig.noUncheckedIndexedAccess.json', + projectService: false, + tsconfigRootDir: getFixturesRootDir(), }, }, { @@ -659,9 +659,9 @@ declare const key: Key; foo?.[key]?.trim(); `, parserOptions: { - EXPERIMENTAL_useProjectService: false, - tsconfigRootDir: getFixturesRootDir(), project: './tsconfig.noUncheckedIndexedAccess.json', + projectService: false, + tsconfigRootDir: getFixturesRootDir(), }, }, ` @@ -825,9 +825,9 @@ function getElem(dict: Record, key: string) { } `, parserOptions: { - EXPERIMENTAL_useProjectService: false, - tsconfigRootDir: getFixturesRootDir(), project: './tsconfig.noUncheckedIndexedAccess.json', + projectService: false, + tsconfigRootDir: getFixturesRootDir(), }, }, ` diff --git a/packages/eslint-plugin/tests/rules/no-unnecessary-type-assertion.test.ts b/packages/eslint-plugin/tests/rules/no-unnecessary-type-assertion.test.ts index 05f66efccd2f..312b43f23ab4 100644 --- a/packages/eslint-plugin/tests/rules/no-unnecessary-type-assertion.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unnecessary-type-assertion.test.ts @@ -6,10 +6,10 @@ import rule from '../../src/rules/no-unnecessary-type-assertion'; const rootDir = path.resolve(__dirname, '../fixtures/'); const ruleTester = new RuleTester({ parserOptions: { - EXPERIMENTAL_useProjectService: false, + project: './tsconfig.json', + projectService: false, sourceType: 'module', tsconfigRootDir: rootDir, - project: './tsconfig.json', }, parser: '@typescript-eslint/parser', }); diff --git a/packages/eslint-plugin/tests/rules/no-unsafe-assignment.test.ts b/packages/eslint-plugin/tests/rules/no-unsafe-assignment.test.ts index d1e2b7a8b8bb..c910999fd27c 100644 --- a/packages/eslint-plugin/tests/rules/no-unsafe-assignment.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unsafe-assignment.test.ts @@ -65,8 +65,8 @@ function assignmentTest( const ruleTester = new RuleTester({ parser: '@typescript-eslint/parser', parserOptions: { - EXPERIMENTAL_useProjectService: false, project: './tsconfig.noImplicitThis.json', + projectService: false, tsconfigRootDir: getFixturesRootDir(), }, }); diff --git a/packages/eslint-plugin/tests/rules/no-unsafe-call.test.ts b/packages/eslint-plugin/tests/rules/no-unsafe-call.test.ts index bb844011fd7b..b1b30c5dcbfa 100644 --- a/packages/eslint-plugin/tests/rules/no-unsafe-call.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unsafe-call.test.ts @@ -6,8 +6,8 @@ import { getFixturesRootDir } from '../RuleTester'; const ruleTester = new RuleTester({ parser: '@typescript-eslint/parser', parserOptions: { - EXPERIMENTAL_useProjectService: false, project: './tsconfig.noImplicitThis.json', + projectService: false, tsconfigRootDir: getFixturesRootDir(), }, }); diff --git a/packages/eslint-plugin/tests/rules/no-unsafe-member-access.test.ts b/packages/eslint-plugin/tests/rules/no-unsafe-member-access.test.ts index 292c52759c0d..722d03c5fa53 100644 --- a/packages/eslint-plugin/tests/rules/no-unsafe-member-access.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unsafe-member-access.test.ts @@ -6,8 +6,8 @@ import { getFixturesRootDir } from '../RuleTester'; const ruleTester = new RuleTester({ parser: '@typescript-eslint/parser', parserOptions: { - EXPERIMENTAL_useProjectService: false, project: './tsconfig.noImplicitThis.json', + projectService: false, tsconfigRootDir: getFixturesRootDir(), }, }); diff --git a/packages/eslint-plugin/tests/rules/no-unsafe-return.test.ts b/packages/eslint-plugin/tests/rules/no-unsafe-return.test.ts index 36c6103bbc20..bb82444aa679 100644 --- a/packages/eslint-plugin/tests/rules/no-unsafe-return.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unsafe-return.test.ts @@ -6,8 +6,8 @@ import { getFixturesRootDir } from '../RuleTester'; const ruleTester = new RuleTester({ parser: '@typescript-eslint/parser', parserOptions: { - EXPERIMENTAL_useProjectService: false, project: './tsconfig.noImplicitThis.json', + projectService: false, tsconfigRootDir: getFixturesRootDir(), }, }); diff --git a/packages/eslint-plugin/tests/rules/no-unused-vars/no-unused-vars.test.ts b/packages/eslint-plugin/tests/rules/no-unused-vars/no-unused-vars.test.ts index f7442e38166c..c9e0c762d74f 100644 --- a/packages/eslint-plugin/tests/rules/no-unused-vars/no-unused-vars.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unused-vars/no-unused-vars.test.ts @@ -14,9 +14,9 @@ const ruleTester = new RuleTester({ }); const withMetaParserOptions = { - EXPERIMENTAL_useProjectService: false, - tsconfigRootDir: getFixturesRootDir(), project: './tsconfig-withmeta.json', + projectService: false, + tsconfigRootDir: getFixturesRootDir(), }; // this is used to ensure that the caching the utility does does not impact the results done by no-unused-vars diff --git a/packages/eslint-plugin/tests/rules/non-nullable-type-assertion-style.test.ts b/packages/eslint-plugin/tests/rules/non-nullable-type-assertion-style.test.ts index f7aa671cfbc7..f0c5da6ab9d7 100644 --- a/packages/eslint-plugin/tests/rules/non-nullable-type-assertion-style.test.ts +++ b/packages/eslint-plugin/tests/rules/non-nullable-type-assertion-style.test.ts @@ -246,10 +246,10 @@ const b = (a || undefined)!; const ruleTesterWithNoUncheckedIndexAccess = new RuleTester({ parserOptions: { - EXPERIMENTAL_useProjectService: false, + project: './tsconfig.noUncheckedIndexedAccess.json', + projectService: false, sourceType: 'module', tsconfigRootDir: getFixturesRootDir(), - project: './tsconfig.noUncheckedIndexedAccess.json', }, parser: '@typescript-eslint/parser', }); diff --git a/packages/integration-tests/CHANGELOG.md b/packages/integration-tests/CHANGELOG.md index a9b7cb5d6867..f2b8dd4ba132 100644 --- a/packages/integration-tests/CHANGELOG.md +++ b/packages/integration-tests/CHANGELOG.md @@ -1,3 +1,9 @@ +## 7.10.0 (2024-05-20) + +This was a version bump only for integration-tests to align it with other projects, there were no code changes. + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.9.0 (2024-05-13) This was a version bump only for integration-tests to align it with other projects, there were no code changes. diff --git a/packages/integration-tests/package.json b/packages/integration-tests/package.json index 229b85bbf755..0a7d0b2eb8cc 100644 --- a/packages/integration-tests/package.json +++ b/packages/integration-tests/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/integration-tests", - "version": "7.9.0", + "version": "7.10.0", "private": true, "scripts": { "format": "prettier --write \"./**/*.{ts,mts,cts,tsx,js,mjs,cjs,jsx,json,md,css}\" --ignore-path ../../.prettierignore", diff --git a/packages/parser/CHANGELOG.md b/packages/parser/CHANGELOG.md index eef254c79eeb..3f71e9da0856 100644 --- a/packages/parser/CHANGELOG.md +++ b/packages/parser/CHANGELOG.md @@ -1,3 +1,9 @@ +## 7.10.0 (2024-05-20) + +This was a version bump only for parser to align it with other projects, there were no code changes. + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.9.0 (2024-05-13) This was a version bump only for parser to align it with other projects, there were no code changes. diff --git a/packages/parser/package.json b/packages/parser/package.json index 7d56ebd3193c..d451063e9d39 100644 --- a/packages/parser/package.json +++ b/packages/parser/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/parser", - "version": "7.9.0", + "version": "7.10.0", "description": "An ESLint custom parser which leverages TypeScript ESTree", "files": [ "dist", @@ -52,10 +52,10 @@ "eslint": "^8.57.0 || ^9.0.0" }, "dependencies": { - "@typescript-eslint/scope-manager": "7.9.0", - "@typescript-eslint/types": "7.9.0", - "@typescript-eslint/typescript-estree": "7.9.0", - "@typescript-eslint/visitor-keys": "7.9.0", + "@typescript-eslint/scope-manager": "7.10.0", + "@typescript-eslint/types": "7.10.0", + "@typescript-eslint/typescript-estree": "7.10.0", + "@typescript-eslint/visitor-keys": "7.10.0", "debug": "^4.3.4" }, "devDependencies": { diff --git a/packages/repo-tools/CHANGELOG.md b/packages/repo-tools/CHANGELOG.md index fed0b7c4288c..c354f1647275 100644 --- a/packages/repo-tools/CHANGELOG.md +++ b/packages/repo-tools/CHANGELOG.md @@ -1,3 +1,9 @@ +## 7.10.0 (2024-05-20) + +This was a version bump only for repo-tools to align it with other projects, there were no code changes. + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.9.0 (2024-05-13) This was a version bump only for repo-tools to align it with other projects, there were no code changes. diff --git a/packages/repo-tools/package.json b/packages/repo-tools/package.json index 41b1cb49dd32..c5e243d64e14 100644 --- a/packages/repo-tools/package.json +++ b/packages/repo-tools/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/repo-tools", - "version": "7.9.0", + "version": "7.10.0", "private": true, "//": "NOTE: intentionally no build step in this package", "scripts": { @@ -18,11 +18,11 @@ "devDependencies": { "@jest/types": "29.6.3", "@nx/devkit": "*", - "@typescript-eslint/eslint-plugin": "7.9.0", - "@typescript-eslint/scope-manager": "7.9.0", - "@typescript-eslint/types": "7.9.0", - "@typescript-eslint/typescript-estree": "7.9.0", - "@typescript-eslint/utils": "7.9.0", + "@typescript-eslint/eslint-plugin": "7.10.0", + "@typescript-eslint/scope-manager": "7.10.0", + "@typescript-eslint/types": "7.10.0", + "@typescript-eslint/typescript-estree": "7.10.0", + "@typescript-eslint/utils": "7.10.0", "cross-fetch": "*", "execa": "*", "prettier": "^3.2.5", diff --git a/packages/rule-schema-to-typescript-types/CHANGELOG.md b/packages/rule-schema-to-typescript-types/CHANGELOG.md index ba73ffbb365e..b12215bef65b 100644 --- a/packages/rule-schema-to-typescript-types/CHANGELOG.md +++ b/packages/rule-schema-to-typescript-types/CHANGELOG.md @@ -1,3 +1,9 @@ +## 7.10.0 (2024-05-20) + +This was a version bump only for rule-schema-to-typescript-types to align it with other projects, there were no code changes. + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.9.0 (2024-05-13) This was a version bump only for rule-schema-to-typescript-types to align it with other projects, there were no code changes. diff --git a/packages/rule-schema-to-typescript-types/package.json b/packages/rule-schema-to-typescript-types/package.json index 51659b391db9..38037ac085cb 100644 --- a/packages/rule-schema-to-typescript-types/package.json +++ b/packages/rule-schema-to-typescript-types/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/rule-schema-to-typescript-types", - "version": "7.9.0", + "version": "7.10.0", "private": true, "type": "commonjs", "exports": { @@ -34,8 +34,8 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@typescript-eslint/type-utils": "7.9.0", - "@typescript-eslint/utils": "7.9.0", + "@typescript-eslint/type-utils": "7.10.0", + "@typescript-eslint/utils": "7.10.0", "natural-compare": "^1.4.0", "prettier": "^3.2.5" }, diff --git a/packages/rule-tester/CHANGELOG.md b/packages/rule-tester/CHANGELOG.md index 5eecde9662f5..15c97b1d620e 100644 --- a/packages/rule-tester/CHANGELOG.md +++ b/packages/rule-tester/CHANGELOG.md @@ -1,3 +1,9 @@ +## 7.10.0 (2024-05-20) + +This was a version bump only for rule-tester to align it with other projects, there were no code changes. + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.9.0 (2024-05-13) diff --git a/packages/rule-tester/package.json b/packages/rule-tester/package.json index 04305e429f7c..d23540c7c312 100644 --- a/packages/rule-tester/package.json +++ b/packages/rule-tester/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/rule-tester", - "version": "7.9.0", + "version": "7.10.0", "description": "Tooling to test ESLint rules", "files": [ "dist", @@ -48,8 +48,8 @@ }, "//": "NOTE - AJV is out-of-date, but it's intentionally synced with ESLint - https://github.com/eslint/eslint/blob/ad9dd6a933fd098a0d99c6a9aa059850535c23ee/package.json#L70", "dependencies": { - "@typescript-eslint/typescript-estree": "7.9.0", - "@typescript-eslint/utils": "7.9.0", + "@typescript-eslint/typescript-estree": "7.10.0", + "@typescript-eslint/utils": "7.10.0", "ajv": "^6.12.6", "lodash.merge": "4.6.2", "semver": "^7.6.0" @@ -61,7 +61,7 @@ "devDependencies": { "@jest/types": "29.6.3", "@types/lodash.merge": "4.6.9", - "@typescript-eslint/parser": "7.9.0", + "@typescript-eslint/parser": "7.10.0", "chai": "^4.4.1", "eslint-visitor-keys": "^4.0.0", "espree": "^10.0.1", diff --git a/packages/rule-tester/tests/RuleTester.test.ts b/packages/rule-tester/tests/RuleTester.test.ts index e163508cacb0..56ec53039ced 100644 --- a/packages/rule-tester/tests/RuleTester.test.ts +++ b/packages/rule-tester/tests/RuleTester.test.ts @@ -171,8 +171,8 @@ describe('RuleTester', () => { { code: 'type-aware parser options should override the constructor config', parserOptions: { - EXPERIMENTAL_useProjectService: false, project: 'tsconfig.test-specific.json', + projectService: false, tsconfigRootDir: '/set/in/the/test/', }, }, @@ -222,9 +222,9 @@ describe('RuleTester', () => { "code": "type-aware parser options should override the constructor config", "filename": "/set/in/the/test/file.ts", "parserOptions": { - "EXPERIMENTAL_useProjectService": false, "disallowAutomaticSingleRunInference": true, "project": "tsconfig.test-specific.json", + "projectService": false, "tsconfigRootDir": "/set/in/the/test/", }, }, diff --git a/packages/scope-manager/CHANGELOG.md b/packages/scope-manager/CHANGELOG.md index 2730019df342..8a108ac02d67 100644 --- a/packages/scope-manager/CHANGELOG.md +++ b/packages/scope-manager/CHANGELOG.md @@ -1,3 +1,9 @@ +## 7.10.0 (2024-05-20) + +This was a version bump only for scope-manager to align it with other projects, there were no code changes. + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.9.0 (2024-05-13) This was a version bump only for scope-manager to align it with other projects, there were no code changes. diff --git a/packages/scope-manager/package.json b/packages/scope-manager/package.json index a75733bebf3a..3dab7b6dfbb4 100644 --- a/packages/scope-manager/package.json +++ b/packages/scope-manager/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/scope-manager", - "version": "7.9.0", + "version": "7.10.0", "description": "TypeScript scope analyser for ESLint", "files": [ "dist", @@ -46,13 +46,13 @@ "typecheck": "npx nx typecheck" }, "dependencies": { - "@typescript-eslint/types": "7.9.0", - "@typescript-eslint/visitor-keys": "7.9.0" + "@typescript-eslint/types": "7.10.0", + "@typescript-eslint/visitor-keys": "7.10.0" }, "devDependencies": { "@jest/types": "29.6.3", "@types/glob": "*", - "@typescript-eslint/typescript-estree": "7.9.0", + "@typescript-eslint/typescript-estree": "7.10.0", "glob": "*", "jest-specific-snapshot": "*", "make-dir": "*", diff --git a/packages/type-utils/CHANGELOG.md b/packages/type-utils/CHANGELOG.md index 5cb2ed1619fe..16980ba6f7b5 100644 --- a/packages/type-utils/CHANGELOG.md +++ b/packages/type-utils/CHANGELOG.md @@ -1,3 +1,9 @@ +## 7.10.0 (2024-05-20) + +This was a version bump only for type-utils to align it with other projects, there were no code changes. + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.9.0 (2024-05-13) This was a version bump only for type-utils to align it with other projects, there were no code changes. diff --git a/packages/type-utils/package.json b/packages/type-utils/package.json index 6234c54ef993..b023d8b1350c 100644 --- a/packages/type-utils/package.json +++ b/packages/type-utils/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/type-utils", - "version": "7.9.0", + "version": "7.10.0", "description": "Type utilities for working with TypeScript + ESLint together", "files": [ "dist", @@ -46,14 +46,14 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@typescript-eslint/typescript-estree": "7.9.0", - "@typescript-eslint/utils": "7.9.0", + "@typescript-eslint/typescript-estree": "7.10.0", + "@typescript-eslint/utils": "7.10.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, "devDependencies": { "@jest/types": "29.6.3", - "@typescript-eslint/parser": "7.9.0", + "@typescript-eslint/parser": "7.10.0", "ajv": "^6.12.6", "downlevel-dts": "*", "jest": "29.7.0", diff --git a/packages/types/CHANGELOG.md b/packages/types/CHANGELOG.md index 23de893c7747..38bcd37c9785 100644 --- a/packages/types/CHANGELOG.md +++ b/packages/types/CHANGELOG.md @@ -1,3 +1,9 @@ +## 7.10.0 (2024-05-20) + +This was a version bump only for types to align it with other projects, there were no code changes. + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.9.0 (2024-05-13) This was a version bump only for types to align it with other projects, there were no code changes. diff --git a/packages/types/package.json b/packages/types/package.json index 99b0e075de24..7656621a59ca 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/types", - "version": "7.9.0", + "version": "7.10.0", "description": "Types for the TypeScript-ESTree AST spec", "files": [ "dist", diff --git a/packages/types/src/parser-options.ts b/packages/types/src/parser-options.ts index 44affc8e6c37..9013ec12d9f5 100644 --- a/packages/types/src/parser-options.ts +++ b/packages/types/src/parser-options.ts @@ -61,7 +61,6 @@ interface ParserOptions { debugLevel?: DebugLevel; errorOnTypeScriptSyntacticAndSemanticIssues?: boolean; errorOnUnknownASTType?: boolean; - EXPERIMENTAL_useProjectService?: boolean; // purposely undocumented for now EXPERIMENTAL_useSourceOfProjectReferenceRedirect?: boolean; // purposely undocumented for now extraFileExtensions?: string[]; filePath?: string; @@ -69,6 +68,7 @@ interface ParserOptions { programs?: Program[] | null; project?: string[] | string | boolean | null; projectFolderIgnoreList?: string[]; + projectService?: boolean; range?: boolean; sourceType?: SourceType | undefined; tokens?: boolean; diff --git a/packages/typescript-eslint/CHANGELOG.md b/packages/typescript-eslint/CHANGELOG.md index a3ae1412d9d7..cebec6375baa 100644 --- a/packages/typescript-eslint/CHANGELOG.md +++ b/packages/typescript-eslint/CHANGELOG.md @@ -1,3 +1,9 @@ +## 7.10.0 (2024-05-20) + +This was a version bump only for typescript-eslint to align it with other projects, there were no code changes. + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.9.0 (2024-05-13) This was a version bump only for typescript-eslint to align it with other projects, there were no code changes. diff --git a/packages/typescript-eslint/package.json b/packages/typescript-eslint/package.json index b733cc459b24..8c9a3871a8cc 100644 --- a/packages/typescript-eslint/package.json +++ b/packages/typescript-eslint/package.json @@ -1,6 +1,6 @@ { "name": "typescript-eslint", - "version": "7.9.0", + "version": "7.10.0", "description": "Tooling which enables you to use TypeScript with ESLint", "files": [ "dist", @@ -52,9 +52,9 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@typescript-eslint/eslint-plugin": "7.9.0", - "@typescript-eslint/parser": "7.9.0", - "@typescript-eslint/utils": "7.9.0" + "@typescript-eslint/eslint-plugin": "7.10.0", + "@typescript-eslint/parser": "7.10.0", + "@typescript-eslint/utils": "7.10.0" }, "devDependencies": { "@jest/types": "29.6.3", diff --git a/packages/typescript-estree/CHANGELOG.md b/packages/typescript-estree/CHANGELOG.md index 2c968c5c2660..97f03d22692d 100644 --- a/packages/typescript-estree/CHANGELOG.md +++ b/packages/typescript-estree/CHANGELOG.md @@ -1,3 +1,20 @@ +## 7.10.0 (2024-05-20) + + +### 🩹 Fixes + +- **typescript-estree:** don't add in-project files to defaultProjectMatchedFiles + + +### ❤️ Thank You + +- auvred +- Emanuel Hoogeveen +- jsfm01 +- Kirk Waiblinger + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.9.0 (2024-05-13) diff --git a/packages/typescript-estree/package.json b/packages/typescript-estree/package.json index 1a33d77f0c77..3b8cedda4a95 100644 --- a/packages/typescript-estree/package.json +++ b/packages/typescript-estree/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/typescript-estree", - "version": "7.9.0", + "version": "7.10.0", "description": "A parser that converts TypeScript source code into an ESTree compatible form", "files": [ "dist", @@ -54,8 +54,8 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@typescript-eslint/types": "7.9.0", - "@typescript-eslint/visitor-keys": "7.9.0", + "@typescript-eslint/types": "7.10.0", + "@typescript-eslint/visitor-keys": "7.10.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", diff --git a/packages/typescript-estree/src/create-program/createProjectService.ts b/packages/typescript-estree/src/create-program/createProjectService.ts index bad04c62e112..4c5072781462 100644 --- a/packages/typescript-estree/src/create-program/createProjectService.ts +++ b/packages/typescript-estree/src/create-program/createProjectService.ts @@ -17,7 +17,7 @@ const createStubFileWatcher = (): ts.FileWatcher => ({ export type TypeScriptProjectService = ts.server.ProjectService; export interface ProjectServiceSettings { - allowDefaultProjectForFiles: string[] | undefined; + allowDefaultProject: string[] | undefined; maximumDefaultProjectFileMatchCount: number; service: TypeScriptProjectService; } @@ -104,7 +104,7 @@ export function createProjectService( } return { - allowDefaultProjectForFiles: options.allowDefaultProjectForFiles, + allowDefaultProject: options.allowDefaultProject, maximumDefaultProjectFileMatchCount: options.maximumDefaultProjectFileMatchCount_THIS_WILL_SLOW_DOWN_LINTING ?? DEFAULT_PROJECT_MATCHED_FILES_THRESHOLD, diff --git a/packages/typescript-estree/src/create-program/validateDefaultProjectForFilesGlob.ts b/packages/typescript-estree/src/create-program/validateDefaultProjectForFilesGlob.ts index 598982bdc8e3..863b612d9c93 100644 --- a/packages/typescript-estree/src/create-program/validateDefaultProjectForFilesGlob.ts +++ b/packages/typescript-estree/src/create-program/validateDefaultProjectForFilesGlob.ts @@ -4,25 +4,25 @@ export const DEFAULT_PROJECT_FILES_ERROR_EXPLANATION = ` Having many files run with the default project is known to cause performance issues and slow down linting. -See https://typescript-eslint.io/troubleshooting/#allowdefaultprojectforfiles-glob-too-wide +See https://typescript-eslint.io/troubleshooting/#allowDefaultProject-glob-too-wide `; export function validateDefaultProjectForFilesGlob( options: ProjectServiceOptions, ): void { - if (!options.allowDefaultProjectForFiles?.length) { + if (!options.allowDefaultProject?.length) { return; } - for (const glob of options.allowDefaultProjectForFiles) { + for (const glob of options.allowDefaultProject) { if (glob === '*') { throw new Error( - `allowDefaultProjectForFiles contains the overly wide '*'.${DEFAULT_PROJECT_FILES_ERROR_EXPLANATION}`, + `allowDefaultProject contains the overly wide '*'.${DEFAULT_PROJECT_FILES_ERROR_EXPLANATION}`, ); } if (glob.includes('**')) { throw new Error( - `allowDefaultProjectForFiles glob '${glob}' contains a disallowed '**'.${DEFAULT_PROJECT_FILES_ERROR_EXPLANATION}`, + `allowDefaultProject glob '${glob}' contains a disallowed '**'.${DEFAULT_PROJECT_FILES_ERROR_EXPLANATION}`, ); } } diff --git a/packages/typescript-estree/src/parseSettings/createParseSettings.ts b/packages/typescript-estree/src/parseSettings/createParseSettings.ts index 76f2cad87292..a7ffa37841b4 100644 --- a/packages/typescript-estree/src/parseSettings/createParseSettings.ts +++ b/packages/typescript-estree/src/parseSettings/createParseSettings.ts @@ -76,16 +76,6 @@ export function createParseSettings( : new Set(), errorOnTypeScriptSyntacticAndSemanticIssues: false, errorOnUnknownASTType: tsestreeOptions.errorOnUnknownASTType === true, - EXPERIMENTAL_projectService: - tsestreeOptions.EXPERIMENTAL_useProjectService || - (tsestreeOptions.project && - tsestreeOptions.EXPERIMENTAL_useProjectService !== false && - process.env.TYPESCRIPT_ESLINT_EXPERIMENTAL_TSSERVER === 'true') - ? (TSSERVER_PROJECT_SERVICE ??= createProjectService( - tsestreeOptions.EXPERIMENTAL_useProjectService, - jsDocParsingMode, - )) - : undefined, EXPERIMENTAL_useSourceOfProjectReferenceRedirect: tsestreeOptions.EXPERIMENTAL_useSourceOfProjectReferenceRedirect === true, extraFileExtensions: @@ -114,6 +104,16 @@ export function createParseSettings( ? tsestreeOptions.programs : null, projects: new Map(), + projectService: + tsestreeOptions.projectService || + (tsestreeOptions.project && + tsestreeOptions.projectService !== false && + process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE === 'true') + ? (TSSERVER_PROJECT_SERVICE ??= createProjectService( + tsestreeOptions.projectService, + jsDocParsingMode, + )) + : undefined, range: tsestreeOptions.range === true, singleRun, suppressDeprecatedPropertyWarnings: @@ -158,7 +158,7 @@ export function createParseSettings( } // Providing a program or project service overrides project resolution - if (!parseSettings.programs && !parseSettings.EXPERIMENTAL_projectService) { + if (!parseSettings.programs && !parseSettings.projectService) { parseSettings.projects = resolveProjectList({ cacheLifetime: tsestreeOptions.cacheLifetime, project: getProjectConfigFiles(parseSettings, tsestreeOptions.project), @@ -174,7 +174,7 @@ export function createParseSettings( tsestreeOptions.jsDocParsingMode == null && parseSettings.projects.size === 0 && parseSettings.programs == null && - parseSettings.EXPERIMENTAL_projectService == null + parseSettings.projectService == null ) { parseSettings.jsDocParsingMode = JSDocParsingMode.ParseNone; } diff --git a/packages/typescript-estree/src/parseSettings/index.ts b/packages/typescript-estree/src/parseSettings/index.ts index 0a74741a7da5..2bf9a3883aea 100644 --- a/packages/typescript-estree/src/parseSettings/index.ts +++ b/packages/typescript-estree/src/parseSettings/index.ts @@ -62,11 +62,6 @@ export interface MutableParseSettings { */ errorOnUnknownASTType: boolean; - /** - * Experimental: TypeScript server to power program creation. - */ - EXPERIMENTAL_projectService: ProjectServiceSettings | undefined; - /** * Whether TS should use the source files for referenced projects instead of the compiled .d.ts files. * @@ -123,6 +118,11 @@ export interface MutableParseSettings { */ projects: ReadonlyMap; + /** + * TypeScript server to power program creation. + */ + projectService: ProjectServiceSettings | undefined; + /** * Whether to add the `range` property to AST nodes. */ diff --git a/packages/typescript-estree/src/parser-options.ts b/packages/typescript-estree/src/parser-options.ts index d002e4f78005..35aa68e22875 100644 --- a/packages/typescript-estree/src/parser-options.ts +++ b/packages/typescript-estree/src/parser-options.ts @@ -106,9 +106,10 @@ interface ParseOptions { */ export interface ProjectServiceOptions { /** - * Globs of files to allow running with the default project compiler options. + * Globs of files to allow running with the default project compiler options + * despite not being matched by the project service. */ - allowDefaultProjectForFiles?: string[]; + allowDefaultProject?: string[]; /** * Path to a TSConfig to use instead of TypeScript's default project configuration. @@ -116,7 +117,7 @@ export interface ProjectServiceOptions { defaultProject?: string; /** - * The maximum number of files {@link allowDefaultProjectForFiles} may match. + * The maximum number of files {@link allowDefaultProject} may match. * Each file match slows down linting, so if you do need to use this, please * file an informative issue on typescript-eslint explaining why - so we can * help you avoid using it! @@ -169,15 +170,6 @@ interface ParseAndGenerateServicesOptions extends ParseOptions { */ errorOnTypeScriptSyntacticAndSemanticIssues?: boolean; - /** - * ***EXPERIMENTAL FLAG*** - Use this at your own risk. - * - * Whether to create a shared TypeScript server to power program creation. - * - * @see https://github.com/typescript-eslint/typescript-eslint/issues/6575 - */ - EXPERIMENTAL_useProjectService?: boolean | ProjectServiceOptions; - /** * ***EXPERIMENTAL FLAG*** - Use this at your own risk. * @@ -220,6 +212,8 @@ interface ParseAndGenerateServicesOptions extends ParseOptions { * If this is provided, type information will be returned. * * If set to `false`, `null` or `undefined` type information will not be returned. + * + * Note that {@link projectService} is now preferred. */ project?: string[] | string | boolean | null; @@ -232,6 +226,11 @@ interface ParseAndGenerateServicesOptions extends ParseOptions { */ projectFolderIgnoreList?: string[]; + /** + * Whether to create a shared TypeScript project service to power program creation. + */ + projectService?: boolean | ProjectServiceOptions; + /** * The absolute path to the root directory for all provided `project`s. */ diff --git a/packages/typescript-estree/src/parser.ts b/packages/typescript-estree/src/parser.ts index 3eaaf7735374..721242dd39f8 100644 --- a/packages/typescript-estree/src/parser.ts +++ b/packages/typescript-estree/src/parser.ts @@ -53,9 +53,9 @@ function getProgramAndAST( parseSettings: ParseSettings, hasFullTypeInformation: boolean, ): ASTAndProgram { - if (parseSettings.EXPERIMENTAL_projectService) { + if (parseSettings.projectService) { const fromProjectService = useProgramFromProjectService( - parseSettings.EXPERIMENTAL_projectService, + parseSettings.projectService, parseSettings, hasFullTypeInformation, defaultProjectMatchedFiles, diff --git a/packages/typescript-estree/src/useProgramFromProjectService.ts b/packages/typescript-estree/src/useProgramFromProjectService.ts index 9cdfc52107ad..3ea6fc723c4a 100644 --- a/packages/typescript-estree/src/useProgramFromProjectService.ts +++ b/packages/typescript-estree/src/useProgramFromProjectService.ts @@ -14,7 +14,7 @@ const log = debug( export function useProgramFromProjectService( { - allowDefaultProjectForFiles, + allowDefaultProject, maximumDefaultProjectFileMatchCount, service, }: ProjectServiceSettings, @@ -43,11 +43,11 @@ export function useProgramFromProjectService( if (hasFullTypeInformation) { log( 'Project service type information enabled; checking for file path match on: %o', - allowDefaultProjectForFiles, + allowDefaultProject, ); const isDefaultProjectAllowedPath = filePathMatchedBy( parseSettings.filePath, - allowDefaultProjectForFiles, + allowDefaultProject, ); log( @@ -59,12 +59,12 @@ export function useProgramFromProjectService( if (opened.configFileName) { if (isDefaultProjectAllowedPath) { throw new Error( - `${parseSettings.filePath} was included by allowDefaultProjectForFiles but also was found in the project service. Consider removing it from allowDefaultProjectForFiles.`, + `${parseSettings.filePath} was included by allowDefaultProject but also was found in the project service. Consider removing it from allowDefaultProject.`, ); } } else if (!isDefaultProjectAllowedPath) { throw new Error( - `${parseSettings.filePath} was not found by the project service. Consider either including it in the tsconfig.json or including it in allowDefaultProjectForFiles.`, + `${parseSettings.filePath} was not found by the project service. Consider either including it in the tsconfig.json or including it in allowDefaultProject.`, ); } } @@ -94,7 +94,7 @@ ${Array.from(defaultProjectMatchedFiles) .map(file => `- ${file}`) .join('\n')} -If you absolutely need more files included, set parserOptions.EXPERIMENTAL_useProjectService.maximumDefaultProjectFileMatchCount_THIS_WILL_SLOW_DOWN_LINTING to a larger value. +If you absolutely need more files included, set parserOptions.projectService.maximumDefaultProjectFileMatchCount_THIS_WILL_SLOW_DOWN_LINTING to a larger value. `, ); } @@ -112,9 +112,7 @@ If you absolutely need more files included, set parserOptions.EXPERIMENTAL_usePr function filePathMatchedBy( filePath: string, - allowDefaultProjectForFiles: string[] | undefined, + allowDefaultProject: string[] | undefined, ): boolean { - return !!allowDefaultProjectForFiles?.some(pattern => - minimatch(filePath, pattern), - ); + return !!allowDefaultProject?.some(pattern => minimatch(filePath, pattern)); } diff --git a/packages/typescript-estree/tests/lib/createParseSettings.test.ts b/packages/typescript-estree/tests/lib/createParseSettings.test.ts index cf3832b991f2..d4de22b92a0e 100644 --- a/packages/typescript-estree/tests/lib/createParseSettings.test.ts +++ b/packages/typescript-estree/tests/lib/createParseSettings.test.ts @@ -7,47 +7,47 @@ jest.mock('../../src/create-program/createProjectService', () => ({ })); describe('createParseSettings', () => { - describe('EXPERIMENTAL_projectService', () => { - it('is created when options.EXPERIMENTAL_useProjectService is enabled', () => { - process.env.TYPESCRIPT_ESLINT_EXPERIMENTAL_TSSERVER = 'false'; + describe('projectService', () => { + it('is created when options.projectService is enabled', () => { + process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE = 'false'; const parseSettings = createParseSettings('', { - EXPERIMENTAL_useProjectService: true, + projectService: true, }); - expect(parseSettings.EXPERIMENTAL_projectService).toBe(projectService); + expect(parseSettings.projectService).toBe(projectService); }); - it('is created when options.EXPERIMENTAL_useProjectService is undefined, options.project is true, and process.env.TYPESCRIPT_ESLINT_EXPERIMENTAL_TSSERVER is true', () => { - process.env.TYPESCRIPT_ESLINT_EXPERIMENTAL_TSSERVER = 'true'; + it('is created when options.projectService is undefined, options.project is true, and process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE is true', () => { + process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE = 'true'; const parseSettings = createParseSettings('', { - EXPERIMENTAL_useProjectService: undefined, + projectService: undefined, project: true, }); - expect(parseSettings.EXPERIMENTAL_projectService).toBe(projectService); + expect(parseSettings.projectService).toBe(projectService); }); - it('is not created when options.EXPERIMENTAL_useProjectService is undefined, options.project is falsy, and process.env.TYPESCRIPT_ESLINT_EXPERIMENTAL_TSSERVER is true', () => { - process.env.TYPESCRIPT_ESLINT_EXPERIMENTAL_TSSERVER = 'true'; + it('is not created when options.projectService is undefined, options.project is falsy, and process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE is true', () => { + process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE = 'true'; const parseSettings = createParseSettings('', { - EXPERIMENTAL_useProjectService: undefined, + projectService: undefined, }); - expect(parseSettings.EXPERIMENTAL_projectService).toBeUndefined(); + expect(parseSettings.projectService).toBeUndefined(); }); - it('is not created when options.EXPERIMENTAL_useProjectService is false, options.project is true, and process.env.TYPESCRIPT_ESLINT_EXPERIMENTAL_TSSERVER is true', () => { - process.env.TYPESCRIPT_ESLINT_EXPERIMENTAL_TSSERVER = 'true'; + it('is not created when options.projectService is false, options.project is true, and process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE is true', () => { + process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE = 'true'; const parseSettings = createParseSettings('', { - EXPERIMENTAL_useProjectService: false, + projectService: false, project: true, }); - expect(parseSettings.EXPERIMENTAL_projectService).toBeUndefined(); + expect(parseSettings.projectService).toBeUndefined(); }); }); diff --git a/packages/typescript-estree/tests/lib/createProjectService.test.ts b/packages/typescript-estree/tests/lib/createProjectService.test.ts index a81106d03620..1159e8625f41 100644 --- a/packages/typescript-estree/tests/lib/createProjectService.test.ts +++ b/packages/typescript-estree/tests/lib/createProjectService.test.ts @@ -17,22 +17,17 @@ jest.mock('typescript/lib/tsserverlibrary', () => ({ })); describe('createProjectService', () => { - it('sets allowDefaultProjectForFiles when options.allowDefaultProjectForFiles is defined', () => { - const allowDefaultProjectForFiles = ['./*.js']; - const settings = createProjectService( - { allowDefaultProjectForFiles }, - undefined, - ); + it('sets allowDefaultProject when options.allowDefaultProject is defined', () => { + const allowDefaultProject = ['./*.js']; + const settings = createProjectService({ allowDefaultProject }, undefined); - expect(settings.allowDefaultProjectForFiles).toBe( - allowDefaultProjectForFiles, - ); + expect(settings.allowDefaultProject).toBe(allowDefaultProject); }); - it('does not set allowDefaultProjectForFiles when options.allowDefaultProjectForFiles is not defined', () => { + it('does not set allowDefaultProject when options.allowDefaultProject is not defined', () => { const settings = createProjectService(undefined, undefined); - expect(settings.allowDefaultProjectForFiles).toBeUndefined(); + expect(settings.allowDefaultProject).toBeUndefined(); }); it('throws an error when options.defaultProject is set and readConfigFile returns an error', () => { @@ -52,7 +47,7 @@ describe('createProjectService', () => { expect(() => createProjectService( { - allowDefaultProjectForFiles: ['file.js'], + allowDefaultProject: ['file.js'], defaultProject: './tsconfig.json', }, undefined, @@ -70,7 +65,7 @@ describe('createProjectService', () => { expect(() => createProjectService( { - allowDefaultProjectForFiles: ['file.js'], + allowDefaultProject: ['file.js'], defaultProject: './tsconfig.json', }, undefined, @@ -84,7 +79,7 @@ describe('createProjectService', () => { const { service } = createProjectService( { - allowDefaultProjectForFiles: ['file.js'], + allowDefaultProject: ['file.js'], defaultProject: './tsconfig.json', }, undefined, diff --git a/packages/typescript-estree/tests/lib/parse.project-true.test.ts b/packages/typescript-estree/tests/lib/parse.project-true.test.ts index ca81ab99f506..b2abceb19d6d 100644 --- a/packages/typescript-estree/tests/lib/parse.project-true.test.ts +++ b/packages/typescript-estree/tests/lib/parse.project-true.test.ts @@ -35,7 +35,7 @@ describe('parseAndGenerateServices', () => { }); }); - if (process.env.TYPESCRIPT_ESLINT_EXPERIMENTAL_TSSERVER !== 'true') { + if (process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE !== 'true') { it('throws an error when a parent project does not exist', () => { expect(() => parser.parseAndGenerateServices('const a = true', { diff --git a/packages/typescript-estree/tests/lib/parse.test.ts b/packages/typescript-estree/tests/lib/parse.test.ts index de6fc6936dc3..86653df931af 100644 --- a/packages/typescript-estree/tests/lib/parse.test.ts +++ b/packages/typescript-estree/tests/lib/parse.test.ts @@ -166,12 +166,12 @@ describe('parseAndGenerateServices', () => { describe('isolated parsing', () => { const config: TSESTreeOptions = { - EXPERIMENTAL_useProjectService: false, comment: true, disallowAutomaticSingleRunInference: true, - tokens: true, - range: true, loc: true, + projectService: false, + range: true, + tokens: true, }; const testParse = ({ ext, @@ -341,7 +341,7 @@ describe('parseAndGenerateServices', () => { }); }); - if (process.env.TYPESCRIPT_ESLINT_EXPERIMENTAL_TSSERVER !== 'true') { + if (process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE !== 'true') { describe('invalid file error messages', () => { const PROJECT_DIR = resolve(FIXTURES_DIR, '../invalidFileErrors'); const code = 'var a = true'; @@ -482,7 +482,7 @@ describe('parseAndGenerateServices', () => { }); describe('invalid project error messages', () => { - if (process.env.TYPESCRIPT_ESLINT_EXPERIMENTAL_TSSERVER !== 'true') { + if (process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE !== 'true') { it('throws when none of multiple projects include the file', () => { const PROJECT_DIR = resolve(FIXTURES_DIR, '../invalidFileErrors'); const code = 'var a = true'; @@ -567,7 +567,7 @@ describe('parseAndGenerateServices', () => { ); }); - if (process.env.TYPESCRIPT_ESLINT_EXPERIMENTAL_TSSERVER !== 'true') { + if (process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE !== 'true') { it('should turn on typescript debugger', () => { expect(() => parser.parseAndGenerateServices('const x = 1;', { @@ -588,7 +588,7 @@ describe('parseAndGenerateServices', () => { } }); - if (process.env.TYPESCRIPT_ESLINT_EXPERIMENTAL_TSSERVER !== 'true') { + if (process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE !== 'true') { describe('projectFolderIgnoreList', () => { beforeEach(() => { parser.clearCaches(); diff --git a/packages/typescript-estree/tests/lib/persistentParse.test.ts b/packages/typescript-estree/tests/lib/persistentParse.test.ts index 105ba34d5560..7f5cc21f9b03 100644 --- a/packages/typescript-estree/tests/lib/persistentParse.test.ts +++ b/packages/typescript-estree/tests/lib/persistentParse.test.ts @@ -94,8 +94,8 @@ function baseTests( tsConfigExcludeBar: Record, tsConfigIncludeAll: Record, ): void { - // The experimental project server creates a default project for files - if (process.env.TYPESCRIPT_ESLINT_EXPERIMENTAL_TSSERVER === 'true') { + // The project service creates a default project for files + if (process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE === 'true') { return; } @@ -272,7 +272,7 @@ describe('persistent parse', () => { If there is no includes, then typescript will ask for a slightly different set of watchers. */ - if (process.env.TYPESCRIPT_ESLINT_EXPERIMENTAL_TSSERVER !== 'true') { + if (process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE !== 'true') { describe('tsconfig with no includes / files', () => { const tsConfigExcludeBar = { exclude: ['./src/bar.ts'], diff --git a/packages/typescript-estree/tests/lib/semanticInfo-singleRun.test.ts b/packages/typescript-estree/tests/lib/semanticInfo-singleRun.test.ts index f041d403f4fb..dffc7bec3ab0 100644 --- a/packages/typescript-estree/tests/lib/semanticInfo-singleRun.test.ts +++ b/packages/typescript-estree/tests/lib/semanticInfo-singleRun.test.ts @@ -137,7 +137,7 @@ describe('semanticInfo - singleRun', () => { process.env.CI = originalEnvCI; }); - if (process.env.TYPESCRIPT_ESLINT_EXPERIMENTAL_TSSERVER !== 'true') { + if (process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE !== 'true') { it('should lazily create the required program out of the provided "parserOptions.project" one time when TSESTREE_SINGLE_RUN=true', () => { /** * Single run because of explicit environment variable TSESTREE_SINGLE_RUN diff --git a/packages/typescript-estree/tests/lib/semanticInfo.test.ts b/packages/typescript-estree/tests/lib/semanticInfo.test.ts index 4709f313fcbc..d81f65fb9887 100644 --- a/packages/typescript-estree/tests/lib/semanticInfo.test.ts +++ b/packages/typescript-estree/tests/lib/semanticInfo.test.ts @@ -247,7 +247,7 @@ describe('semanticInfo', () => { expect(parseResult.services.program).toBeDefined(); }); - if (process.env.TYPESCRIPT_ESLINT_EXPERIMENTAL_TSSERVER !== 'true') { + if (process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE !== 'true') { it(`non-existent file should throw error when project provided`, () => { expect(() => parseCodeAndGenerateServices( @@ -260,7 +260,7 @@ describe('semanticInfo', () => { }); } - if (process.env.TYPESCRIPT_ESLINT_EXPERIMENTAL_TSSERVER !== 'true') { + if (process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE !== 'true') { it('non-existent project file', () => { const fileName = path.resolve(FIXTURES_DIR, 'isolated-file.src.ts'); const badConfig = createOptions(fileName); @@ -312,7 +312,7 @@ describe('semanticInfo', () => { ); }); - if (process.env.TYPESCRIPT_ESLINT_EXPERIMENTAL_TSSERVER !== 'true') { + if (process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE !== 'true') { it(`first matching provided program instance is returned in result`, () => { const filename = testFiles[0]; const program1 = createProgram(path.join(FIXTURES_DIR, 'tsconfig.json')); @@ -340,8 +340,8 @@ describe('semanticInfo', () => { expect(() => parseAndGenerateServices('const foo = 5;', optionsWithSingleProgram), ).toThrow( - process.env.TYPESCRIPT_ESLINT_EXPERIMENTAL_TSSERVER === 'true' - ? `${filename} was not found by the project service. Consider either including it in the tsconfig.json or including it in allowDefaultProjectForFiles.` + process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE === 'true' + ? `${filename} was not found by the project service. Consider either including it in the tsconfig.json or including it in allowDefaultProject.` : `The file was not found in any of the provided program instance(s): ${filename}`, ); }); @@ -357,8 +357,8 @@ describe('semanticInfo', () => { expect(() => parseAndGenerateServices('const foo = 5;', optionsWithSingleProgram), ).toThrow( - process.env.TYPESCRIPT_ESLINT_EXPERIMENTAL_TSSERVER === 'true' - ? `${filename} was not found by the project service. Consider either including it in the tsconfig.json or including it in allowDefaultProjectForFiles.` + process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE === 'true' + ? `${filename} was not found by the project service. Consider either including it in the tsconfig.json or including it in allowDefaultProject.` : `The file was not found in any of the provided program instance(s): ${filename}`, ); @@ -370,8 +370,8 @@ describe('semanticInfo', () => { expect(() => parseAndGenerateServices('const foo = 5;', optionsWithMultiplePrograms), ).toThrow( - process.env.TYPESCRIPT_ESLINT_EXPERIMENTAL_TSSERVER === 'true' - ? `${filename} was not found by the project service. Consider either including it in the tsconfig.json or including it in allowDefaultProjectForFiles.` + process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE === 'true' + ? `${filename} was not found by the project service. Consider either including it in the tsconfig.json or including it in allowDefaultProject.` : `The file was not found in any of the provided program instance(s): ${filename}`, ); }); @@ -390,7 +390,7 @@ describe('semanticInfo', () => { function testIsolatedFile( parseResult: ParseAndGenerateServicesResult, ): void { - if (process.env.TYPESCRIPT_ESLINT_EXPERIMENTAL_TSSERVER === 'true') { + if (process.env.TYPESCRIPT_ESLINT_PROJECT_SERVICE === 'true') { return; } diff --git a/packages/typescript-estree/tests/lib/useProgramFromProjectService.test.ts b/packages/typescript-estree/tests/lib/useProgramFromProjectService.test.ts index 26989c8779fc..701a801d7e1e 100644 --- a/packages/typescript-estree/tests/lib/useProgramFromProjectService.test.ts +++ b/packages/typescript-estree/tests/lib/useProgramFromProjectService.test.ts @@ -60,7 +60,7 @@ describe('useProgramFromProjectService', () => { useProgramFromProjectService( createProjectServiceSettings({ - allowDefaultProjectForFiles: undefined, + allowDefaultProject: undefined, service, }), mockParseSettings, @@ -76,7 +76,7 @@ describe('useProgramFromProjectService', () => { ); }); - it('throws an error when hasFullTypeInformation is enabled and the file is both in the project service and allowDefaultProjectForFiles', () => { + it('throws an error when hasFullTypeInformation is enabled and the file is both in the project service and allowDefaultProject', () => { const { service } = createMockProjectService(); service.openClientFile.mockReturnValueOnce({ @@ -86,7 +86,7 @@ describe('useProgramFromProjectService', () => { expect(() => useProgramFromProjectService( { - allowDefaultProjectForFiles: [mockParseSettings.filePath], + allowDefaultProject: [mockParseSettings.filePath], maximumDefaultProjectFileMatchCount: 8, service, }, @@ -95,11 +95,11 @@ describe('useProgramFromProjectService', () => { new Set(), ), ).toThrow( - `${mockParseSettings.filePath} was included by allowDefaultProjectForFiles but also was found in the project service. Consider removing it from allowDefaultProjectForFiles.`, + `${mockParseSettings.filePath} was included by allowDefaultProject but also was found in the project service. Consider removing it from allowDefaultProject.`, ); }); - it('throws an error when hasFullTypeInformation is enabled and the file is neither in the project service nor allowDefaultProjectForFiles', () => { + it('throws an error when hasFullTypeInformation is enabled and the file is neither in the project service nor allowDefaultProject', () => { const { service } = createMockProjectService(); service.openClientFile.mockReturnValueOnce({}); @@ -107,7 +107,7 @@ describe('useProgramFromProjectService', () => { expect(() => useProgramFromProjectService( createProjectServiceSettings({ - allowDefaultProjectForFiles: [], + allowDefaultProject: [], service, }), mockParseSettings, @@ -115,7 +115,7 @@ describe('useProgramFromProjectService', () => { new Set(), ), ).toThrow( - `${mockParseSettings.filePath} was not found by the project service. Consider either including it in the tsconfig.json or including it in allowDefaultProjectForFiles.`, + `${mockParseSettings.filePath} was not found by the project service. Consider either including it in the tsconfig.json or including it in allowDefaultProject.`, ); }); @@ -130,7 +130,7 @@ describe('useProgramFromProjectService', () => { expect(() => useProgramFromProjectService( createProjectServiceSettings({ - allowDefaultProjectForFiles: [mockParseSettings.filePath], + allowDefaultProject: [mockParseSettings.filePath], maximumDefaultProjectFileMatchCount: 2, service, }), @@ -142,18 +142,18 @@ describe('useProgramFromProjectService', () => { Having many files run with the default project is known to cause performance issues and slow down linting. -See https://typescript-eslint.io/troubleshooting/#allowdefaultprojectforfiles-glob-too-wide +See https://typescript-eslint.io/troubleshooting/#allowDefaultProject-glob-too-wide Matching files: - a - b - ${path.normalize('/repos/repo/path/PascalCaseDirectory/camelCaseFile.ts')} -If you absolutely need more files included, set parserOptions.EXPERIMENTAL_useProjectService.maximumDefaultProjectFileMatchCount_THIS_WILL_SLOW_DOWN_LINTING to a larger value. +If you absolutely need more files included, set parserOptions.projectService.maximumDefaultProjectFileMatchCount_THIS_WILL_SLOW_DOWN_LINTING to a larger value. `); }); - it('returns undefined when hasFullTypeInformation is disabled, the file is both in the project service and allowDefaultProjectForFiles, and the service does not have a matching program', () => { + it('returns undefined when hasFullTypeInformation is disabled, the file is both in the project service and allowDefaultProject, and the service does not have a matching program', () => { const { service } = createMockProjectService(); mockGetProgram.mockReturnValueOnce(undefined); @@ -164,7 +164,7 @@ If you absolutely need more files included, set parserOptions.EXPERIMENTAL_usePr const actual = useProgramFromProjectService( createProjectServiceSettings({ - allowDefaultProjectForFiles: [mockParseSettings.filePath], + allowDefaultProject: [mockParseSettings.filePath], service, }), mockParseSettings, @@ -175,7 +175,7 @@ If you absolutely need more files included, set parserOptions.EXPERIMENTAL_usePr expect(actual).toBeUndefined(); }); - it('returns a created program when hasFullTypeInformation is disabled, the file is both in the project service and allowDefaultProjectForFiles, and the service has a matching program', () => { + it('returns a created program when hasFullTypeInformation is disabled, the file is both in the project service and allowDefaultProject, and the service has a matching program', () => { const { service } = createMockProjectService(); const program = { getSourceFile: jest.fn() }; @@ -188,7 +188,7 @@ If you absolutely need more files included, set parserOptions.EXPERIMENTAL_usePr const actual = useProgramFromProjectService( createProjectServiceSettings({ - allowDefaultProjectForFiles: [mockParseSettings.filePath], + allowDefaultProject: [mockParseSettings.filePath], service, }), mockParseSettings, @@ -199,7 +199,7 @@ If you absolutely need more files included, set parserOptions.EXPERIMENTAL_usePr expect(actual).toBe(program); }); - it('returns a created program when hasFullTypeInformation is disabled, the file is neither in the project service nor allowDefaultProjectForFiles, and the service has a matching program', () => { + it('returns a created program when hasFullTypeInformation is disabled, the file is neither in the project service nor allowDefaultProject, and the service has a matching program', () => { const { service } = createMockProjectService(); const program = { getSourceFile: jest.fn() }; @@ -210,7 +210,7 @@ If you absolutely need more files included, set parserOptions.EXPERIMENTAL_usePr const actual = useProgramFromProjectService( createProjectServiceSettings({ - allowDefaultProjectForFiles: [], + allowDefaultProject: [], service, }), mockParseSettings, @@ -234,7 +234,7 @@ If you absolutely need more files included, set parserOptions.EXPERIMENTAL_usePr const actual = useProgramFromProjectService( createProjectServiceSettings({ - allowDefaultProjectForFiles: [], + allowDefaultProject: [], maximumDefaultProjectFileMatchCount: 0, service, }), diff --git a/packages/typescript-estree/tests/lib/validateDefaultProjectForFilesGlob.test.ts b/packages/typescript-estree/tests/lib/validateDefaultProjectForFilesGlob.test.ts index 6510182fefd9..ce11eba99911 100644 --- a/packages/typescript-estree/tests/lib/validateDefaultProjectForFilesGlob.test.ts +++ b/packages/typescript-estree/tests/lib/validateDefaultProjectForFilesGlob.test.ts @@ -1,35 +1,35 @@ import { validateDefaultProjectForFilesGlob } from '../../src/create-program/validateDefaultProjectForFilesGlob'; describe('validateDefaultProjectForFilesGlob', () => { - it('does not throw when options.allowDefaultProjectForFiles is an empty array', () => { + it('does not throw when options.allowDefaultProject is an empty array', () => { expect(() => - validateDefaultProjectForFilesGlob({ allowDefaultProjectForFiles: [] }), + validateDefaultProjectForFilesGlob({ allowDefaultProject: [] }), ).not.toThrow(); }); - it('does not throw when options.allowDefaultProjectForFiles contains a non-** glob', () => { + it('does not throw when options.allowDefaultProject contains a non-** glob', () => { expect(() => validateDefaultProjectForFilesGlob({ - allowDefaultProjectForFiles: ['./*.js'], + allowDefaultProject: ['./*.js'], }), ).not.toThrow(); }); - it('throws when options.allowDefaultProjectForFiles contains a * glob', () => { + it('throws when options.allowDefaultProject contains a * glob', () => { expect(() => validateDefaultProjectForFilesGlob({ - allowDefaultProjectForFiles: ['*'], + allowDefaultProject: ['*'], }), - ).toThrow(/allowDefaultProjectForFiles contains the overly wide '\*'\./); + ).toThrow(/allowDefaultProject contains the overly wide '\*'\./); }); - it('throws when options.allowDefaultProjectForFiles contains a ** glob', () => { + it('throws when options.allowDefaultProject contains a ** glob', () => { expect(() => validateDefaultProjectForFilesGlob({ - allowDefaultProjectForFiles: ['**/*.js'], + allowDefaultProject: ['**/*.js'], }), ).toThrow( - /allowDefaultProjectForFiles glob '\*\*\/\*\.js' contains a disallowed '\*\*'\./, + /allowDefaultProject glob '\*\*\/\*\.js' contains a disallowed '\*\*'\./, ); }); }); diff --git a/packages/utils/CHANGELOG.md b/packages/utils/CHANGELOG.md index 382e4f0a6202..582ef2eeebd8 100644 --- a/packages/utils/CHANGELOG.md +++ b/packages/utils/CHANGELOG.md @@ -1,3 +1,20 @@ +## 7.10.0 (2024-05-20) + + +### 🩹 Fixes + +- **utils:** remove function form type from flat config `files` and `ignores` + + +### ❤️ Thank You + +- auvred +- Emanuel Hoogeveen +- jsfm01 +- Kirk Waiblinger + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.9.0 (2024-05-13) This was a version bump only for utils to align it with other projects, there were no code changes. diff --git a/packages/utils/package.json b/packages/utils/package.json index 6a6bf84d88d1..e4c0c3502f1a 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/utils", - "version": "7.9.0", + "version": "7.10.0", "description": "Utilities for working with TypeScript + ESLint together", "files": [ "dist", @@ -68,9 +68,9 @@ }, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.9.0", - "@typescript-eslint/types": "7.9.0", - "@typescript-eslint/typescript-estree": "7.9.0" + "@typescript-eslint/scope-manager": "7.10.0", + "@typescript-eslint/types": "7.10.0", + "@typescript-eslint/typescript-estree": "7.10.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0" diff --git a/packages/visitor-keys/CHANGELOG.md b/packages/visitor-keys/CHANGELOG.md index 8541dcb5a1a5..ff7e5ab12d76 100644 --- a/packages/visitor-keys/CHANGELOG.md +++ b/packages/visitor-keys/CHANGELOG.md @@ -1,3 +1,9 @@ +## 7.10.0 (2024-05-20) + +This was a version bump only for visitor-keys to align it with other projects, there were no code changes. + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.9.0 (2024-05-13) This was a version bump only for visitor-keys to align it with other projects, there were no code changes. diff --git a/packages/visitor-keys/package.json b/packages/visitor-keys/package.json index de8dec230e20..695983898848 100644 --- a/packages/visitor-keys/package.json +++ b/packages/visitor-keys/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/visitor-keys", - "version": "7.9.0", + "version": "7.10.0", "description": "Visitor keys used to help traverse the TypeScript-ESTree AST", "files": [ "dist", @@ -47,7 +47,7 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@typescript-eslint/types": "7.9.0", + "@typescript-eslint/types": "7.10.0", "eslint-visitor-keys": "^3.4.3" }, "devDependencies": { diff --git a/packages/website-eslint/CHANGELOG.md b/packages/website-eslint/CHANGELOG.md index a3bf73cddafd..2f751879b1bb 100644 --- a/packages/website-eslint/CHANGELOG.md +++ b/packages/website-eslint/CHANGELOG.md @@ -1,3 +1,9 @@ +## 7.10.0 (2024-05-20) + +This was a version bump only for website-eslint to align it with other projects, there were no code changes. + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.9.0 (2024-05-13) This was a version bump only for website-eslint to align it with other projects, there were no code changes. diff --git a/packages/website-eslint/package.json b/packages/website-eslint/package.json index e100387e29f0..41701d371428 100644 --- a/packages/website-eslint/package.json +++ b/packages/website-eslint/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/website-eslint", - "version": "7.9.0", + "version": "7.10.0", "private": true, "description": "ESLint which works in browsers.", "files": [ @@ -24,11 +24,11 @@ }, "devDependencies": { "@eslint/js": "*", - "@typescript-eslint/eslint-plugin": "7.9.0", - "@typescript-eslint/parser": "7.9.0", - "@typescript-eslint/scope-manager": "7.9.0", - "@typescript-eslint/typescript-estree": "7.9.0", - "@typescript-eslint/visitor-keys": "7.9.0", + "@typescript-eslint/eslint-plugin": "7.10.0", + "@typescript-eslint/parser": "7.10.0", + "@typescript-eslint/scope-manager": "7.10.0", + "@typescript-eslint/typescript-estree": "7.10.0", + "@typescript-eslint/visitor-keys": "7.10.0", "esbuild": "~0.20.2", "eslint": "*", "esquery": "*", diff --git a/packages/website/CHANGELOG.md b/packages/website/CHANGELOG.md index bf7a56394577..3d5595e32d9e 100644 --- a/packages/website/CHANGELOG.md +++ b/packages/website/CHANGELOG.md @@ -1,3 +1,9 @@ +## 7.10.0 (2024-05-20) + +This was a version bump only for website to align it with other projects, there were no code changes. + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.9.0 (2024-05-13) diff --git a/packages/website/package.json b/packages/website/package.json index 8843df2e9bc7..40890148055c 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -1,6 +1,6 @@ { "name": "website", - "version": "7.9.0", + "version": "7.10.0", "private": true, "scripts": { "build": "docusaurus build", @@ -23,8 +23,8 @@ "@docusaurus/preset-classic": "^3.2.1", "@docusaurus/remark-plugin-npm2yarn": "^3.2.1", "@docusaurus/theme-common": "^3.2.1", - "@typescript-eslint/parser": "7.9.0", - "@typescript-eslint/website-eslint": "7.9.0", + "@typescript-eslint/parser": "7.10.0", + "@typescript-eslint/website-eslint": "7.10.0", "clsx": "^2.1.0", "eslint": "*", "json5": "^2.2.3", @@ -46,12 +46,12 @@ "@types/mdast": "^4.0.3", "@types/react": "*", "@types/unist": "^3.0.2", - "@typescript-eslint/eslint-plugin": "7.9.0", - "@typescript-eslint/rule-schema-to-typescript-types": "7.9.0", - "@typescript-eslint/scope-manager": "7.9.0", - "@typescript-eslint/types": "7.9.0", - "@typescript-eslint/typescript-estree": "7.9.0", - "@typescript-eslint/utils": "7.9.0", + "@typescript-eslint/eslint-plugin": "7.10.0", + "@typescript-eslint/rule-schema-to-typescript-types": "7.10.0", + "@typescript-eslint/scope-manager": "7.10.0", + "@typescript-eslint/types": "7.10.0", + "@typescript-eslint/typescript-estree": "7.10.0", + "@typescript-eslint/utils": "7.10.0", "copy-webpack-plugin": "^12.0.0", "cross-fetch": "*", "history": "^4.9.0", diff --git a/packages/website/src/components/linter/config.ts b/packages/website/src/components/linter/config.ts index 4d703469b7e0..7e1327534a5d 100644 --- a/packages/website/src/components/linter/config.ts +++ b/packages/website/src/components/linter/config.ts @@ -12,7 +12,6 @@ export const defaultParseSettings: ParseSettings = { debugLevel: new Set(), errorOnTypeScriptSyntacticAndSemanticIssues: false, errorOnUnknownASTType: false, - EXPERIMENTAL_projectService: undefined, EXPERIMENTAL_useSourceOfProjectReferenceRedirect: false, extraFileExtensions: [], filePath: '', @@ -25,6 +24,7 @@ export const defaultParseSettings: ParseSettings = { preserveNodeMaps: true, programs: null, projects: new Map(), + projectService: undefined, range: true, singleRun: false, suppressDeprecatedPropertyWarnings: false, diff --git a/yarn.lock b/yarn.lock index cc2b7f6aebf0..4a7978437b39 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5532,17 +5532,17 @@ __metadata: dependencies: "@jest/types": 29.6.3 "@prettier/sync": ^0.5.1 - "@typescript-eslint/rule-tester": 7.9.0 - "@typescript-eslint/scope-manager": 7.9.0 - "@typescript-eslint/type-utils": 7.9.0 - "@typescript-eslint/utils": 7.9.0 + "@typescript-eslint/rule-tester": 7.10.0 + "@typescript-eslint/scope-manager": 7.10.0 + "@typescript-eslint/type-utils": 7.10.0 + "@typescript-eslint/utils": 7.10.0 jest: 29.7.0 prettier: ^3.2.5 rimraf: "*" languageName: unknown linkType: soft -"@typescript-eslint/eslint-plugin@7.9.0, @typescript-eslint/eslint-plugin@workspace:packages/eslint-plugin": +"@typescript-eslint/eslint-plugin@7.10.0, @typescript-eslint/eslint-plugin@workspace:packages/eslint-plugin": version: 0.0.0-use.local resolution: "@typescript-eslint/eslint-plugin@workspace:packages/eslint-plugin" dependencies: @@ -5551,12 +5551,12 @@ __metadata: "@types/marked": ^5.0.2 "@types/mdast": ^4.0.3 "@types/natural-compare": "*" - "@typescript-eslint/rule-schema-to-typescript-types": 7.9.0 - "@typescript-eslint/rule-tester": 7.9.0 - "@typescript-eslint/scope-manager": 7.9.0 - "@typescript-eslint/type-utils": 7.9.0 - "@typescript-eslint/utils": 7.9.0 - "@typescript-eslint/visitor-keys": 7.9.0 + "@typescript-eslint/rule-schema-to-typescript-types": 7.10.0 + "@typescript-eslint/rule-tester": 7.10.0 + "@typescript-eslint/scope-manager": 7.10.0 + "@typescript-eslint/type-utils": 7.10.0 + "@typescript-eslint/utils": 7.10.0 + "@typescript-eslint/visitor-keys": 7.10.0 ajv: ^6.12.6 cross-env: ^7.0.3 cross-fetch: "*" @@ -5601,16 +5601,16 @@ __metadata: languageName: unknown linkType: soft -"@typescript-eslint/parser@7.9.0, @typescript-eslint/parser@workspace:packages/parser": +"@typescript-eslint/parser@7.10.0, @typescript-eslint/parser@workspace:packages/parser": version: 0.0.0-use.local resolution: "@typescript-eslint/parser@workspace:packages/parser" dependencies: "@jest/types": 29.6.3 "@types/glob": "*" - "@typescript-eslint/scope-manager": 7.9.0 - "@typescript-eslint/types": 7.9.0 - "@typescript-eslint/typescript-estree": 7.9.0 - "@typescript-eslint/visitor-keys": 7.9.0 + "@typescript-eslint/scope-manager": 7.10.0 + "@typescript-eslint/types": 7.10.0 + "@typescript-eslint/typescript-estree": 7.10.0 + "@typescript-eslint/visitor-keys": 7.10.0 debug: ^4.3.4 downlevel-dts: "*" glob: "*" @@ -5632,11 +5632,11 @@ __metadata: dependencies: "@jest/types": 29.6.3 "@nx/devkit": "*" - "@typescript-eslint/eslint-plugin": 7.9.0 - "@typescript-eslint/scope-manager": 7.9.0 - "@typescript-eslint/types": 7.9.0 - "@typescript-eslint/typescript-estree": 7.9.0 - "@typescript-eslint/utils": 7.9.0 + "@typescript-eslint/eslint-plugin": 7.10.0 + "@typescript-eslint/scope-manager": 7.10.0 + "@typescript-eslint/types": 7.10.0 + "@typescript-eslint/typescript-estree": 7.10.0 + "@typescript-eslint/utils": 7.10.0 cross-fetch: "*" execa: "*" prettier: ^3.2.5 @@ -5646,27 +5646,27 @@ __metadata: languageName: unknown linkType: soft -"@typescript-eslint/rule-schema-to-typescript-types@7.9.0, @typescript-eslint/rule-schema-to-typescript-types@workspace:packages/rule-schema-to-typescript-types": +"@typescript-eslint/rule-schema-to-typescript-types@7.10.0, @typescript-eslint/rule-schema-to-typescript-types@workspace:packages/rule-schema-to-typescript-types": version: 0.0.0-use.local resolution: "@typescript-eslint/rule-schema-to-typescript-types@workspace:packages/rule-schema-to-typescript-types" dependencies: "@jest/types": 29.6.3 - "@typescript-eslint/type-utils": 7.9.0 - "@typescript-eslint/utils": 7.9.0 + "@typescript-eslint/type-utils": 7.10.0 + "@typescript-eslint/utils": 7.10.0 natural-compare: ^1.4.0 prettier: ^3.2.5 languageName: unknown linkType: soft -"@typescript-eslint/rule-tester@7.9.0, @typescript-eslint/rule-tester@workspace:packages/rule-tester": +"@typescript-eslint/rule-tester@7.10.0, @typescript-eslint/rule-tester@workspace:packages/rule-tester": version: 0.0.0-use.local resolution: "@typescript-eslint/rule-tester@workspace:packages/rule-tester" dependencies: "@jest/types": 29.6.3 "@types/lodash.merge": 4.6.9 - "@typescript-eslint/parser": 7.9.0 - "@typescript-eslint/typescript-estree": 7.9.0 - "@typescript-eslint/utils": 7.9.0 + "@typescript-eslint/parser": 7.10.0 + "@typescript-eslint/typescript-estree": 7.10.0 + "@typescript-eslint/utils": 7.10.0 ajv: ^6.12.6 chai: ^4.4.1 eslint-visitor-keys: ^4.0.0 @@ -5684,15 +5684,15 @@ __metadata: languageName: unknown linkType: soft -"@typescript-eslint/scope-manager@7.9.0, @typescript-eslint/scope-manager@workspace:packages/scope-manager": +"@typescript-eslint/scope-manager@7.10.0, @typescript-eslint/scope-manager@workspace:packages/scope-manager": version: 0.0.0-use.local resolution: "@typescript-eslint/scope-manager@workspace:packages/scope-manager" dependencies: "@jest/types": 29.6.3 "@types/glob": "*" - "@typescript-eslint/types": 7.9.0 - "@typescript-eslint/typescript-estree": 7.9.0 - "@typescript-eslint/visitor-keys": 7.9.0 + "@typescript-eslint/types": 7.10.0 + "@typescript-eslint/typescript-estree": 7.10.0 + "@typescript-eslint/visitor-keys": 7.10.0 glob: "*" jest-specific-snapshot: "*" make-dir: "*" @@ -5721,14 +5721,14 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/type-utils@7.9.0, @typescript-eslint/type-utils@workspace:packages/type-utils": +"@typescript-eslint/type-utils@7.10.0, @typescript-eslint/type-utils@workspace:packages/type-utils": version: 0.0.0-use.local resolution: "@typescript-eslint/type-utils@workspace:packages/type-utils" dependencies: "@jest/types": 29.6.3 - "@typescript-eslint/parser": 7.9.0 - "@typescript-eslint/typescript-estree": 7.9.0 - "@typescript-eslint/utils": 7.9.0 + "@typescript-eslint/parser": 7.10.0 + "@typescript-eslint/typescript-estree": 7.10.0 + "@typescript-eslint/utils": 7.10.0 ajv: ^6.12.6 debug: ^4.3.4 downlevel-dts: "*" @@ -5743,7 +5743,7 @@ __metadata: languageName: unknown linkType: soft -"@typescript-eslint/types@7.9.0, @typescript-eslint/types@workspace:packages/types": +"@typescript-eslint/types@7.10.0, @typescript-eslint/types@workspace:packages/types": version: 0.0.0-use.local resolution: "@typescript-eslint/types@workspace:packages/types" dependencies: @@ -5842,13 +5842,13 @@ __metadata: languageName: unknown linkType: soft -"@typescript-eslint/typescript-estree@7.9.0, @typescript-eslint/typescript-estree@workspace:packages/typescript-estree": +"@typescript-eslint/typescript-estree@7.10.0, @typescript-eslint/typescript-estree@workspace:packages/typescript-estree": version: 0.0.0-use.local resolution: "@typescript-eslint/typescript-estree@workspace:packages/typescript-estree" dependencies: "@jest/types": 29.6.3 - "@typescript-eslint/types": 7.9.0 - "@typescript-eslint/visitor-keys": 7.9.0 + "@typescript-eslint/types": 7.10.0 + "@typescript-eslint/visitor-keys": 7.10.0 debug: ^4.3.4 glob: "*" globby: ^11.1.0 @@ -5904,14 +5904,14 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@7.9.0, @typescript-eslint/utils@workspace:packages/utils": +"@typescript-eslint/utils@7.10.0, @typescript-eslint/utils@workspace:packages/utils": version: 0.0.0-use.local resolution: "@typescript-eslint/utils@workspace:packages/utils" dependencies: "@eslint-community/eslint-utils": ^4.4.0 - "@typescript-eslint/scope-manager": 7.9.0 - "@typescript-eslint/types": 7.9.0 - "@typescript-eslint/typescript-estree": 7.9.0 + "@typescript-eslint/scope-manager": 7.10.0 + "@typescript-eslint/types": 7.10.0 + "@typescript-eslint/typescript-estree": 7.10.0 downlevel-dts: "*" jest: 29.7.0 prettier: ^3.2.5 @@ -5957,13 +5957,13 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@7.9.0, @typescript-eslint/visitor-keys@workspace:packages/visitor-keys": +"@typescript-eslint/visitor-keys@7.10.0, @typescript-eslint/visitor-keys@workspace:packages/visitor-keys": version: 0.0.0-use.local resolution: "@typescript-eslint/visitor-keys@workspace:packages/visitor-keys" dependencies: "@jest/types": 29.6.3 "@types/eslint-visitor-keys": "*" - "@typescript-eslint/types": 7.9.0 + "@typescript-eslint/types": 7.10.0 downlevel-dts: "*" eslint-visitor-keys: ^3.4.3 jest: 29.7.0 @@ -5993,16 +5993,16 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/website-eslint@7.9.0, @typescript-eslint/website-eslint@workspace:packages/website-eslint": +"@typescript-eslint/website-eslint@7.10.0, @typescript-eslint/website-eslint@workspace:packages/website-eslint": version: 0.0.0-use.local resolution: "@typescript-eslint/website-eslint@workspace:packages/website-eslint" dependencies: "@eslint/js": "*" - "@typescript-eslint/eslint-plugin": 7.9.0 - "@typescript-eslint/parser": 7.9.0 - "@typescript-eslint/scope-manager": 7.9.0 - "@typescript-eslint/typescript-estree": 7.9.0 - "@typescript-eslint/visitor-keys": 7.9.0 + "@typescript-eslint/eslint-plugin": 7.10.0 + "@typescript-eslint/parser": 7.10.0 + "@typescript-eslint/scope-manager": 7.10.0 + "@typescript-eslint/typescript-estree": 7.10.0 + "@typescript-eslint/visitor-keys": 7.10.0 esbuild: ~0.20.2 eslint: "*" esquery: "*" @@ -19506,9 +19506,9 @@ __metadata: resolution: "typescript-eslint@workspace:packages/typescript-eslint" dependencies: "@jest/types": 29.6.3 - "@typescript-eslint/eslint-plugin": 7.9.0 - "@typescript-eslint/parser": 7.9.0 - "@typescript-eslint/utils": 7.9.0 + "@typescript-eslint/eslint-plugin": 7.10.0 + "@typescript-eslint/parser": 7.10.0 + "@typescript-eslint/utils": 7.10.0 downlevel-dts: "*" jest: 29.7.0 prettier: ^3.2.5 @@ -20225,14 +20225,14 @@ __metadata: "@types/mdast": ^4.0.3 "@types/react": "*" "@types/unist": ^3.0.2 - "@typescript-eslint/eslint-plugin": 7.9.0 - "@typescript-eslint/parser": 7.9.0 - "@typescript-eslint/rule-schema-to-typescript-types": 7.9.0 - "@typescript-eslint/scope-manager": 7.9.0 - "@typescript-eslint/types": 7.9.0 - "@typescript-eslint/typescript-estree": 7.9.0 - "@typescript-eslint/utils": 7.9.0 - "@typescript-eslint/website-eslint": 7.9.0 + "@typescript-eslint/eslint-plugin": 7.10.0 + "@typescript-eslint/parser": 7.10.0 + "@typescript-eslint/rule-schema-to-typescript-types": 7.10.0 + "@typescript-eslint/scope-manager": 7.10.0 + "@typescript-eslint/types": 7.10.0 + "@typescript-eslint/typescript-estree": 7.10.0 + "@typescript-eslint/utils": 7.10.0 + "@typescript-eslint/website-eslint": 7.10.0 clsx: ^2.1.0 copy-webpack-plugin: ^12.0.0 cross-fetch: "*"