diff --git a/.cspell.json b/.cspell.json
index 93e4a9b6594d..279727a77428 100644
--- a/.cspell.json
+++ b/.cspell.json
@@ -93,6 +93,7 @@
"IIFEs",
"jameshenry",
"joshuakgoldberg",
+ "kirkwaiblinger",
"linebreaks",
"lzstring",
"markdownlint",
@@ -149,6 +150,7 @@
"unoptimized",
"unprefixed",
"upsert",
+ "Waiblinger",
"warnonunsupportedtypescriptversion",
"Zacher"
],
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4080e4958122..1fcf54bf760e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,18 @@
+## 7.7.0 (2024-04-15)
+
+
+### 🚀 Features
+
+- **eslint-plugin:** replace `no-new-symbol` with `no-new-native-nonconstructor` ([#8895](https://github.com/typescript-eslint/typescript-eslint/pull/8895))
+- **typescript-estree:** add defaultProject for project service ([#8815](https://github.com/typescript-eslint/typescript-eslint/pull/8815))
+
+### ❤️ Thank You
+
+- Dave @reduckted
+- Josh Goldberg ✨
+
+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.6.0 (2024-04-08)
diff --git a/docs/maintenance/Team.mdx b/docs/maintenance/Team.mdx
index a9465f24b2ef..460a02edbe6e 100644
--- a/docs/maintenance/Team.mdx
+++ b/docs/maintenance/Team.mdx
@@ -77,6 +77,11 @@ TypeScript linting experience great.
name: 'auvred',
username: 'auvred',
},
+ {
+ description: 'Dotting my "j"s and crossing my "z"s.',
+ name: 'Kirk Waiblinger',
+ username: 'kirkwaiblinger',
+ },
]}
description="Code committers who regularly work on the code in the repository."
explanation="Committers triage issues, review pull requests, and write code to push the project's functionality and stability forward."
diff --git a/docs/packages/TypeScript_ESTree.mdx b/docs/packages/TypeScript_ESTree.mdx
index 7269942e84d3..6454920b23c3 100644
--- a/docs/packages/TypeScript_ESTree.mdx
+++ b/docs/packages/TypeScript_ESTree.mdx
@@ -280,9 +280,14 @@ interface ParseAndGenerateServicesOptions extends ParseOptions {
*/
interface ProjectServiceOptions {
/**
- * Globs of files to allow running with the default inferred project settings.
+ * Globs of files to allow running with the default project compiler options.
*/
allowDefaultProjectForFiles?: string[];
+
+ /**
+ * Path to a TSConfig to use instead of TypeScript's default project configuration.
+ */
+ defaultProject?: string;
}
interface ParserServices {
diff --git a/packages/ast-spec/CHANGELOG.md b/packages/ast-spec/CHANGELOG.md
index 43f55778c7ed..069cb338a776 100644
--- a/packages/ast-spec/CHANGELOG.md
+++ b/packages/ast-spec/CHANGELOG.md
@@ -1,3 +1,9 @@
+## 7.7.0 (2024-04-15)
+
+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.6.0 (2024-04-08)
diff --git a/packages/ast-spec/package.json b/packages/ast-spec/package.json
index c437b6da27f9..fda4218df1d0 100644
--- a/packages/ast-spec/package.json
+++ b/packages/ast-spec/package.json
@@ -1,6 +1,6 @@
{
"name": "@typescript-eslint/ast-spec",
- "version": "7.6.0",
+ "version": "7.7.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 e697c880584b..7938e87c4aeb 100644
--- a/packages/eslint-plugin-internal/CHANGELOG.md
+++ b/packages/eslint-plugin-internal/CHANGELOG.md
@@ -1,3 +1,9 @@
+## 7.7.0 (2024-04-15)
+
+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.6.0 (2024-04-08)
diff --git a/packages/eslint-plugin-internal/package.json b/packages/eslint-plugin-internal/package.json
index 37de490f666f..8ff65ceecfcc 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.6.0",
+ "version": "7.7.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.6.0",
- "@typescript-eslint/scope-manager": "7.6.0",
- "@typescript-eslint/type-utils": "7.6.0",
- "@typescript-eslint/utils": "7.6.0",
+ "@typescript-eslint/rule-tester": "7.7.0",
+ "@typescript-eslint/scope-manager": "7.7.0",
+ "@typescript-eslint/type-utils": "7.7.0",
+ "@typescript-eslint/utils": "7.7.0",
"prettier": "^3.2.5"
},
"devDependencies": {
diff --git a/packages/eslint-plugin/CHANGELOG.md b/packages/eslint-plugin/CHANGELOG.md
index ba2dafb61664..a1bcd5637aa3 100644
--- a/packages/eslint-plugin/CHANGELOG.md
+++ b/packages/eslint-plugin/CHANGELOG.md
@@ -1,3 +1,18 @@
+## 7.7.0 (2024-04-15)
+
+
+### 🚀 Features
+
+- **eslint-plugin:** replace `no-new-symbol` with `no-new-native-nonconstructor`
+
+
+### ❤️ Thank You
+
+- Dave
+- Josh Goldberg ✨
+
+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.6.0 (2024-04-08)
diff --git a/packages/eslint-plugin/package.json b/packages/eslint-plugin/package.json
index 8f83752ef56d..17281aa1344e 100644
--- a/packages/eslint-plugin/package.json
+++ b/packages/eslint-plugin/package.json
@@ -1,6 +1,6 @@
{
"name": "@typescript-eslint/eslint-plugin",
- "version": "7.6.0",
+ "version": "7.7.0",
"description": "TypeScript plugin for ESLint",
"files": [
"dist",
@@ -62,10 +62,10 @@
},
"dependencies": {
"@eslint-community/regexpp": "^4.10.0",
- "@typescript-eslint/scope-manager": "7.6.0",
- "@typescript-eslint/type-utils": "7.6.0",
- "@typescript-eslint/utils": "7.6.0",
- "@typescript-eslint/visitor-keys": "7.6.0",
+ "@typescript-eslint/scope-manager": "7.7.0",
+ "@typescript-eslint/type-utils": "7.7.0",
+ "@typescript-eslint/utils": "7.7.0",
+ "@typescript-eslint/visitor-keys": "7.7.0",
"debug": "^4.3.4",
"graphemer": "^1.4.0",
"ignore": "^5.3.1",
@@ -78,8 +78,8 @@
"@types/marked": "*",
"@types/mdast": "^4.0.3",
"@types/natural-compare": "*",
- "@typescript-eslint/rule-schema-to-typescript-types": "7.6.0",
- "@typescript-eslint/rule-tester": "7.6.0",
+ "@typescript-eslint/rule-schema-to-typescript-types": "7.7.0",
+ "@typescript-eslint/rule-tester": "7.7.0",
"ajv": "^6.12.6",
"chalk": "^5.3.0",
"cross-env": "^7.0.3",
diff --git a/packages/eslint-plugin/src/configs/eslint-recommended-raw.ts b/packages/eslint-plugin/src/configs/eslint-recommended-raw.ts
index aafff1c61c19..d42cfb1d8663 100644
--- a/packages/eslint-plugin/src/configs/eslint-recommended-raw.ts
+++ b/packages/eslint-plugin/src/configs/eslint-recommended-raw.ts
@@ -28,7 +28,9 @@ export default (
'no-dupe-keys': 'off', // ts(1117)
'no-func-assign': 'off', // ts(2630)
'no-import-assign': 'off', // ts(2632) & ts(2540)
+ // TODO - remove this once we no longer support ESLint v8
'no-new-symbol': 'off', // ts(7009)
+ 'no-new-native-nonconstructor': 'off', // ts(7009)
'no-obj-calls': 'off', // ts(2349)
'no-redeclare': 'off', // ts(2451)
'no-setter-return': 'off', // ts(2408)
diff --git a/packages/integration-tests/CHANGELOG.md b/packages/integration-tests/CHANGELOG.md
index 960a925d0b9f..8ae4476c2a86 100644
--- a/packages/integration-tests/CHANGELOG.md
+++ b/packages/integration-tests/CHANGELOG.md
@@ -1,3 +1,9 @@
+## 7.7.0 (2024-04-15)
+
+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.6.0 (2024-04-08)
diff --git a/packages/integration-tests/package.json b/packages/integration-tests/package.json
index d8774597c1fb..d0cb209a41e4 100644
--- a/packages/integration-tests/package.json
+++ b/packages/integration-tests/package.json
@@ -1,6 +1,6 @@
{
"name": "@typescript-eslint/integration-tests",
- "version": "7.6.0",
+ "version": "7.7.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 69c7e8cd8f51..3dd5e8975d32 100644
--- a/packages/parser/CHANGELOG.md
+++ b/packages/parser/CHANGELOG.md
@@ -1,3 +1,9 @@
+## 7.7.0 (2024-04-15)
+
+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.6.0 (2024-04-08)
diff --git a/packages/parser/package.json b/packages/parser/package.json
index 36c6bc8349e3..813f05ae7352 100644
--- a/packages/parser/package.json
+++ b/packages/parser/package.json
@@ -1,6 +1,6 @@
{
"name": "@typescript-eslint/parser",
- "version": "7.6.0",
+ "version": "7.7.0",
"description": "An ESLint custom parser which leverages TypeScript ESTree",
"files": [
"dist",
@@ -52,10 +52,10 @@
"eslint": "^8.56.0"
},
"dependencies": {
- "@typescript-eslint/scope-manager": "7.6.0",
- "@typescript-eslint/types": "7.6.0",
- "@typescript-eslint/typescript-estree": "7.6.0",
- "@typescript-eslint/visitor-keys": "7.6.0",
+ "@typescript-eslint/scope-manager": "7.7.0",
+ "@typescript-eslint/types": "7.7.0",
+ "@typescript-eslint/typescript-estree": "7.7.0",
+ "@typescript-eslint/visitor-keys": "7.7.0",
"debug": "^4.3.4"
},
"devDependencies": {
diff --git a/packages/repo-tools/CHANGELOG.md b/packages/repo-tools/CHANGELOG.md
index 7ebac7ce5003..150cef20d939 100644
--- a/packages/repo-tools/CHANGELOG.md
+++ b/packages/repo-tools/CHANGELOG.md
@@ -1,3 +1,9 @@
+## 7.7.0 (2024-04-15)
+
+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.6.0 (2024-04-08)
diff --git a/packages/repo-tools/package.json b/packages/repo-tools/package.json
index 2fdd5ec65ac4..c6d182ff3097 100644
--- a/packages/repo-tools/package.json
+++ b/packages/repo-tools/package.json
@@ -1,6 +1,6 @@
{
"name": "@typescript-eslint/repo-tools",
- "version": "7.6.0",
+ "version": "7.7.0",
"private": true,
"scripts": {
"//": "NOTE: intentionally no build step in this package",
diff --git a/packages/rule-schema-to-typescript-types/CHANGELOG.md b/packages/rule-schema-to-typescript-types/CHANGELOG.md
index e94d35830773..ad66113909ff 100644
--- a/packages/rule-schema-to-typescript-types/CHANGELOG.md
+++ b/packages/rule-schema-to-typescript-types/CHANGELOG.md
@@ -1,3 +1,9 @@
+## 7.7.0 (2024-04-15)
+
+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.6.0 (2024-04-08)
diff --git a/packages/rule-schema-to-typescript-types/package.json b/packages/rule-schema-to-typescript-types/package.json
index 31dc9be345b8..0de9efc6bf5e 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.6.0",
+ "version": "7.7.0",
"private": true,
"type": "commonjs",
"exports": {
@@ -34,8 +34,8 @@
"typecheck": "tsc -p tsconfig.json --noEmit"
},
"dependencies": {
- "@typescript-eslint/type-utils": "7.6.0",
- "@typescript-eslint/utils": "7.6.0",
+ "@typescript-eslint/type-utils": "7.7.0",
+ "@typescript-eslint/utils": "7.7.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 be2d8baf76b5..f18b89b37cc2 100644
--- a/packages/rule-tester/CHANGELOG.md
+++ b/packages/rule-tester/CHANGELOG.md
@@ -1,3 +1,9 @@
+## 7.7.0 (2024-04-15)
+
+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.6.0 (2024-04-08)
diff --git a/packages/rule-tester/package.json b/packages/rule-tester/package.json
index 4babef46bdc5..a2d2c9e994d1 100644
--- a/packages/rule-tester/package.json
+++ b/packages/rule-tester/package.json
@@ -1,6 +1,6 @@
{
"name": "@typescript-eslint/rule-tester",
- "version": "7.6.0",
+ "version": "7.7.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.6.0",
- "@typescript-eslint/utils": "7.6.0",
+ "@typescript-eslint/typescript-estree": "7.7.0",
+ "@typescript-eslint/utils": "7.7.0",
"ajv": "^6.12.6",
"lodash.merge": "4.6.2",
"semver": "^7.6.0"
@@ -60,7 +60,7 @@
},
"devDependencies": {
"@types/lodash.merge": "4.6.9",
- "@typescript-eslint/parser": "7.6.0",
+ "@typescript-eslint/parser": "7.7.0",
"chai": "^4.4.1",
"mocha": "^10.4.0",
"sinon": "^16.1.3",
diff --git a/packages/scope-manager/CHANGELOG.md b/packages/scope-manager/CHANGELOG.md
index 3854156055fa..505a16e212de 100644
--- a/packages/scope-manager/CHANGELOG.md
+++ b/packages/scope-manager/CHANGELOG.md
@@ -1,3 +1,9 @@
+## 7.7.0 (2024-04-15)
+
+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.6.0 (2024-04-08)
diff --git a/packages/scope-manager/package.json b/packages/scope-manager/package.json
index 3fa3cd579986..5c10b9aed06f 100644
--- a/packages/scope-manager/package.json
+++ b/packages/scope-manager/package.json
@@ -1,6 +1,6 @@
{
"name": "@typescript-eslint/scope-manager",
- "version": "7.6.0",
+ "version": "7.7.0",
"description": "TypeScript scope analyser for ESLint",
"files": [
"dist",
@@ -46,12 +46,12 @@
"typecheck": "npx nx typecheck"
},
"dependencies": {
- "@typescript-eslint/types": "7.6.0",
- "@typescript-eslint/visitor-keys": "7.6.0"
+ "@typescript-eslint/types": "7.7.0",
+ "@typescript-eslint/visitor-keys": "7.7.0"
},
"devDependencies": {
"@types/glob": "*",
- "@typescript-eslint/typescript-estree": "7.6.0",
+ "@typescript-eslint/typescript-estree": "7.7.0",
"glob": "*",
"jest-specific-snapshot": "*",
"make-dir": "*",
diff --git a/packages/type-utils/CHANGELOG.md b/packages/type-utils/CHANGELOG.md
index c20366c2e8c2..df8295181f65 100644
--- a/packages/type-utils/CHANGELOG.md
+++ b/packages/type-utils/CHANGELOG.md
@@ -1,3 +1,9 @@
+## 7.7.0 (2024-04-15)
+
+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.6.0 (2024-04-08)
diff --git a/packages/type-utils/package.json b/packages/type-utils/package.json
index 260a515415aa..ec1b094c0993 100644
--- a/packages/type-utils/package.json
+++ b/packages/type-utils/package.json
@@ -1,6 +1,6 @@
{
"name": "@typescript-eslint/type-utils",
- "version": "7.6.0",
+ "version": "7.7.0",
"description": "Type utilities for working with TypeScript + ESLint together",
"files": [
"dist",
@@ -46,13 +46,13 @@
"typecheck": "tsc -p tsconfig.json --noEmit"
},
"dependencies": {
- "@typescript-eslint/typescript-estree": "7.6.0",
- "@typescript-eslint/utils": "7.6.0",
+ "@typescript-eslint/typescript-estree": "7.7.0",
+ "@typescript-eslint/utils": "7.7.0",
"debug": "^4.3.4",
"ts-api-utils": "^1.3.0"
},
"devDependencies": {
- "@typescript-eslint/parser": "7.6.0",
+ "@typescript-eslint/parser": "7.7.0",
"ajv": "^6.12.6",
"downlevel-dts": "*",
"jest": "29.7.0",
diff --git a/packages/types/CHANGELOG.md b/packages/types/CHANGELOG.md
index a9d8d6fdd07f..37e28f0e9c82 100644
--- a/packages/types/CHANGELOG.md
+++ b/packages/types/CHANGELOG.md
@@ -1,3 +1,9 @@
+## 7.7.0 (2024-04-15)
+
+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.6.0 (2024-04-08)
diff --git a/packages/types/package.json b/packages/types/package.json
index f3568f21de08..253a38370b1d 100644
--- a/packages/types/package.json
+++ b/packages/types/package.json
@@ -1,6 +1,6 @@
{
"name": "@typescript-eslint/types",
- "version": "7.6.0",
+ "version": "7.7.0",
"description": "Types for the TypeScript-ESTree AST spec",
"files": [
"dist",
diff --git a/packages/typescript-eslint/CHANGELOG.md b/packages/typescript-eslint/CHANGELOG.md
index e47c8a67b907..8278aeaf3986 100644
--- a/packages/typescript-eslint/CHANGELOG.md
+++ b/packages/typescript-eslint/CHANGELOG.md
@@ -1,3 +1,9 @@
+## 7.7.0 (2024-04-15)
+
+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.6.0 (2024-04-08)
diff --git a/packages/typescript-eslint/package.json b/packages/typescript-eslint/package.json
index dea7f12f52db..d222007c5739 100644
--- a/packages/typescript-eslint/package.json
+++ b/packages/typescript-eslint/package.json
@@ -1,6 +1,6 @@
{
"name": "typescript-eslint",
- "version": "7.6.0",
+ "version": "7.7.0",
"description": "Tooling which enables you to use TypeScript with ESLint",
"files": [
"dist",
@@ -55,9 +55,9 @@
"eslint": "^8.56.0"
},
"dependencies": {
- "@typescript-eslint/eslint-plugin": "7.6.0",
- "@typescript-eslint/parser": "7.6.0",
- "@typescript-eslint/utils": "7.6.0"
+ "@typescript-eslint/eslint-plugin": "7.7.0",
+ "@typescript-eslint/parser": "7.7.0",
+ "@typescript-eslint/utils": "7.7.0"
},
"devDependencies": {
"downlevel-dts": "*",
diff --git a/packages/typescript-estree/CHANGELOG.md b/packages/typescript-estree/CHANGELOG.md
index 234164a51f64..94ce4cd015c0 100644
--- a/packages/typescript-estree/CHANGELOG.md
+++ b/packages/typescript-estree/CHANGELOG.md
@@ -1,3 +1,18 @@
+## 7.7.0 (2024-04-15)
+
+
+### 🚀 Features
+
+- **typescript-estree:** add defaultProject for project service
+
+
+### ❤️ Thank You
+
+- Dave
+- Josh Goldberg ✨
+
+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.6.0 (2024-04-08)
diff --git a/packages/typescript-estree/package.json b/packages/typescript-estree/package.json
index d0a9f469c605..119e8ed421cc 100644
--- a/packages/typescript-estree/package.json
+++ b/packages/typescript-estree/package.json
@@ -1,6 +1,6 @@
{
"name": "@typescript-eslint/typescript-estree",
- "version": "7.6.0",
+ "version": "7.7.0",
"description": "A parser that converts TypeScript source code into an ESTree compatible form",
"files": [
"dist",
@@ -54,8 +54,8 @@
"typecheck": "tsc -p tsconfig.json --noEmit"
},
"dependencies": {
- "@typescript-eslint/types": "7.6.0",
- "@typescript-eslint/visitor-keys": "7.6.0",
+ "@typescript-eslint/types": "7.7.0",
+ "@typescript-eslint/visitor-keys": "7.7.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 1cf7f9d82992..c355033191c4 100644
--- a/packages/typescript-estree/src/create-program/createProjectService.ts
+++ b/packages/typescript-estree/src/create-program/createProjectService.ts
@@ -1,4 +1,6 @@
/* eslint-disable @typescript-eslint/no-empty-function -- for TypeScript APIs*/
+import os from 'node:os';
+
import type * as ts from 'typescript/lib/tsserverlibrary';
import type { ProjectServiceOptions } from '../parser-options';
@@ -58,6 +60,42 @@ export function createProjectService(
jsDocParsingMode,
});
+ if (typeof options === 'object' && options.defaultProject) {
+ let configRead;
+
+ try {
+ configRead = tsserver.readConfigFile(
+ options.defaultProject,
+ system.readFile,
+ );
+ } catch (error) {
+ throw new Error(
+ `Could not parse default project '${options.defaultProject}': ${(error as Error).message}`,
+ );
+ }
+
+ if (configRead.error) {
+ throw new Error(
+ `Could not read default project '${options.defaultProject}': ${tsserver.formatDiagnostic(
+ configRead.error,
+ {
+ getCurrentDirectory: system.getCurrentDirectory,
+ getCanonicalFileName: fileName => fileName,
+ getNewLine: () => os.EOL,
+ },
+ )}`,
+ );
+ }
+
+ service.setCompilerOptionsForInferredProjects(
+ (
+ configRead.config as {
+ compilerOptions: ts.server.protocol.InferredProjectCompilerOptions;
+ }
+ ).compilerOptions,
+ );
+ }
+
return {
allowDefaultProjectForFiles:
typeof options === 'object'
diff --git a/packages/typescript-estree/src/parser-options.ts b/packages/typescript-estree/src/parser-options.ts
index 4347ee29e47e..b345dd72f030 100644
--- a/packages/typescript-estree/src/parser-options.ts
+++ b/packages/typescript-estree/src/parser-options.ts
@@ -106,9 +106,14 @@ interface ParseOptions {
*/
export interface ProjectServiceOptions {
/**
- * Globs of files to allow running with the default inferred project settings.
+ * Globs of files to allow running with the default project compiler options.
*/
allowDefaultProjectForFiles?: string[];
+
+ /**
+ * Path to a TSConfig to use instead of TypeScript's default project configuration.
+ */
+ defaultProject?: string;
}
interface ParseAndGenerateServicesOptions extends ParseOptions {
diff --git a/packages/typescript-estree/tests/lib/createProjectService.test.ts b/packages/typescript-estree/tests/lib/createProjectService.test.ts
index 9541dcd43942..a81106d03620 100644
--- a/packages/typescript-estree/tests/lib/createProjectService.test.ts
+++ b/packages/typescript-estree/tests/lib/createProjectService.test.ts
@@ -1,5 +1,21 @@
+import * as ts from 'typescript';
+
import { createProjectService } from '../../src/create-program/createProjectService';
+const mockReadConfigFile = jest.fn();
+const mockSetCompilerOptionsForInferredProjects = jest.fn();
+
+jest.mock('typescript/lib/tsserverlibrary', () => ({
+ ...jest.requireActual('typescript/lib/tsserverlibrary'),
+ readConfigFile: mockReadConfigFile,
+ server: {
+ ProjectService: class {
+ setCompilerOptionsForInferredProjects =
+ mockSetCompilerOptionsForInferredProjects;
+ },
+ },
+}));
+
describe('createProjectService', () => {
it('sets allowDefaultProjectForFiles when options.allowDefaultProjectForFiles is defined', () => {
const allowDefaultProjectForFiles = ['./*.js'];
@@ -18,4 +34,64 @@ describe('createProjectService', () => {
expect(settings.allowDefaultProjectForFiles).toBeUndefined();
});
+
+ it('throws an error when options.defaultProject is set and readConfigFile returns an error', () => {
+ mockReadConfigFile.mockReturnValue({
+ error: {
+ category: ts.DiagnosticCategory.Error,
+ code: 1234,
+ file: ts.createSourceFile('./tsconfig.json', '', {
+ languageVersion: ts.ScriptTarget.Latest,
+ }),
+ start: 0,
+ length: 0,
+ messageText: 'Oh no!',
+ } satisfies ts.Diagnostic,
+ });
+
+ expect(() =>
+ createProjectService(
+ {
+ allowDefaultProjectForFiles: ['file.js'],
+ defaultProject: './tsconfig.json',
+ },
+ undefined,
+ ),
+ ).toThrow(
+ /Could not read default project '\.\/tsconfig.json': .+ error TS1234: Oh no!/,
+ );
+ });
+
+ it('throws an error when options.defaultProject is set and readConfigFile throws an error', () => {
+ mockReadConfigFile.mockImplementation(() => {
+ throw new Error('Oh no!');
+ });
+
+ expect(() =>
+ createProjectService(
+ {
+ allowDefaultProjectForFiles: ['file.js'],
+ defaultProject: './tsconfig.json',
+ },
+ undefined,
+ ),
+ ).toThrow("Could not parse default project './tsconfig.json': Oh no!");
+ });
+
+ it('uses the default projects compiler options when options.defaultProject is set and readConfigFile succeeds', () => {
+ const compilerOptions = { strict: true };
+ mockReadConfigFile.mockReturnValue({ config: { compilerOptions } });
+
+ const { service } = createProjectService(
+ {
+ allowDefaultProjectForFiles: ['file.js'],
+ defaultProject: './tsconfig.json',
+ },
+ undefined,
+ );
+
+ expect(service.setCompilerOptionsForInferredProjects).toHaveBeenCalledWith(
+ compilerOptions,
+ );
+ });
});
diff --git a/packages/utils/CHANGELOG.md b/packages/utils/CHANGELOG.md
index cc3aede202b7..deff97bbf90e 100644
--- a/packages/utils/CHANGELOG.md
+++ b/packages/utils/CHANGELOG.md
@@ -1,3 +1,9 @@
+## 7.7.0 (2024-04-15)
+
+This was a version bump only for 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.6.0 (2024-04-08)
diff --git a/packages/utils/package.json b/packages/utils/package.json
index c5c8d257598c..298a85d807e8 100644
--- a/packages/utils/package.json
+++ b/packages/utils/package.json
@@ -1,6 +1,6 @@
{
"name": "@typescript-eslint/utils",
- "version": "7.6.0",
+ "version": "7.7.0",
"description": "Utilities for working with TypeScript + ESLint together",
"files": [
"dist",
@@ -70,16 +70,16 @@
"@eslint-community/eslint-utils": "^4.4.0",
"@types/json-schema": "^7.0.15",
"@types/semver": "^7.5.8",
- "@typescript-eslint/scope-manager": "7.6.0",
- "@typescript-eslint/types": "7.6.0",
- "@typescript-eslint/typescript-estree": "7.6.0",
+ "@typescript-eslint/scope-manager": "7.7.0",
+ "@typescript-eslint/types": "7.7.0",
+ "@typescript-eslint/typescript-estree": "7.7.0",
"semver": "^7.6.0"
},
"peerDependencies": {
"eslint": "^8.56.0"
},
"devDependencies": {
- "@typescript-eslint/parser": "7.6.0",
+ "@typescript-eslint/parser": "7.7.0",
"downlevel-dts": "*",
"jest": "29.7.0",
"prettier": "^3.2.5",
diff --git a/packages/visitor-keys/CHANGELOG.md b/packages/visitor-keys/CHANGELOG.md
index fb89f1530d0d..4e8bc897169e 100644
--- a/packages/visitor-keys/CHANGELOG.md
+++ b/packages/visitor-keys/CHANGELOG.md
@@ -1,3 +1,9 @@
+## 7.7.0 (2024-04-15)
+
+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.6.0 (2024-04-08)
diff --git a/packages/visitor-keys/package.json b/packages/visitor-keys/package.json
index 5f869737e7c7..a7e66a3d5ea8 100644
--- a/packages/visitor-keys/package.json
+++ b/packages/visitor-keys/package.json
@@ -1,6 +1,6 @@
{
"name": "@typescript-eslint/visitor-keys",
- "version": "7.6.0",
+ "version": "7.7.0",
"description": "Visitor keys used to help traverse the TypeScript-ESTree AST",
"files": [
"dist",
@@ -47,7 +47,7 @@
"typecheck": "tsc -p tsconfig.json --noEmit"
},
"dependencies": {
- "@typescript-eslint/types": "7.6.0",
+ "@typescript-eslint/types": "7.7.0",
"eslint-visitor-keys": "^3.4.3"
},
"devDependencies": {
diff --git a/packages/website-eslint/CHANGELOG.md b/packages/website-eslint/CHANGELOG.md
index f432405329d9..257070d26ca1 100644
--- a/packages/website-eslint/CHANGELOG.md
+++ b/packages/website-eslint/CHANGELOG.md
@@ -1,3 +1,9 @@
+## 7.7.0 (2024-04-15)
+
+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.6.0 (2024-04-08)
diff --git a/packages/website-eslint/package.json b/packages/website-eslint/package.json
index 415e97ec7e77..65bd0ef731c9 100644
--- a/packages/website-eslint/package.json
+++ b/packages/website-eslint/package.json
@@ -1,6 +1,6 @@
{
"name": "@typescript-eslint/website-eslint",
- "version": "7.6.0",
+ "version": "7.7.0",
"private": true,
"description": "ESLint which works in browsers.",
"files": [
@@ -23,16 +23,16 @@
"typecheck": "tsc --noEmit"
},
"dependencies": {
- "@typescript-eslint/types": "7.6.0",
- "@typescript-eslint/utils": "7.6.0"
+ "@typescript-eslint/types": "7.7.0",
+ "@typescript-eslint/utils": "7.7.0"
},
"devDependencies": {
"@eslint/js": "*",
- "@typescript-eslint/eslint-plugin": "7.6.0",
- "@typescript-eslint/parser": "7.6.0",
- "@typescript-eslint/scope-manager": "7.6.0",
- "@typescript-eslint/typescript-estree": "7.6.0",
- "@typescript-eslint/visitor-keys": "7.6.0",
+ "@typescript-eslint/eslint-plugin": "7.7.0",
+ "@typescript-eslint/parser": "7.7.0",
+ "@typescript-eslint/scope-manager": "7.7.0",
+ "@typescript-eslint/typescript-estree": "7.7.0",
+ "@typescript-eslint/visitor-keys": "7.7.0",
"esbuild": "~0.20.2",
"eslint": "*",
"esquery": "*",
diff --git a/packages/website/CHANGELOG.md b/packages/website/CHANGELOG.md
index fca37e24af91..75a33f8d4099 100644
--- a/packages/website/CHANGELOG.md
+++ b/packages/website/CHANGELOG.md
@@ -1,3 +1,9 @@
+## 7.7.0 (2024-04-15)
+
+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.6.0 (2024-04-08)
diff --git a/packages/website/package.json b/packages/website/package.json
index adeb8567f436..7183a59fe49e 100644
--- a/packages/website/package.json
+++ b/packages/website/package.json
@@ -1,6 +1,6 @@
{
"name": "website",
- "version": "7.6.0",
+ "version": "7.7.0",
"private": true,
"scripts": {
"build": "docusaurus build",
@@ -25,8 +25,8 @@
"@docusaurus/theme-common": "^3.2.1",
"@mdx-js/react": "^3.0.1",
"@prettier/sync": "*",
- "@typescript-eslint/parser": "7.6.0",
- "@typescript-eslint/website-eslint": "7.6.0",
+ "@typescript-eslint/parser": "7.7.0",
+ "@typescript-eslint/website-eslint": "7.7.0",
"clsx": "^2.1.0",
"eslint": "*",
"json-schema": "^0.4.0",
@@ -49,9 +49,9 @@
"@types/react": "*",
"@types/react-helmet": "^6.1.11",
"@types/react-router-dom": "^5.3.3",
- "@typescript-eslint/eslint-plugin": "7.6.0",
- "@typescript-eslint/rule-schema-to-typescript-types": "7.6.0",
- "@typescript-eslint/types": "7.6.0",
+ "@typescript-eslint/eslint-plugin": "7.7.0",
+ "@typescript-eslint/rule-schema-to-typescript-types": "7.7.0",
+ "@typescript-eslint/types": "7.7.0",
"copy-webpack-plugin": "^12.0.0",
"cross-fetch": "*",
"globby": "^11.1.0",
diff --git a/packages/website/src/components/RulesTable/index.tsx b/packages/website/src/components/RulesTable/index.tsx
index 36f91a0ba22b..43918d9208cf 100644
--- a/packages/website/src/components/RulesTable/index.tsx
+++ b/packages/website/src/components/RulesTable/index.tsx
@@ -2,6 +2,7 @@ import Link from '@docusaurus/Link';
import { useHistory } from '@docusaurus/router';
import type { RulesMeta } from '@site/rulesMeta';
import { useRulesMeta } from '@site/src/hooks/useRulesMeta';
+import type { RuleRecommendation } from '@typescript-eslint/utils/ts-eslint';
import clsx from 'clsx';
import React, { useMemo } from 'react';
@@ -31,6 +32,13 @@ function interpolateCode(
return fragments.map((v, i) => (i % 2 === 0 ? v : {v}
));
}
+function getActualRecommended({
+ docs,
+}: RulesMeta[number]): RuleRecommendation | undefined {
+ const recommended = docs?.recommended;
+ return typeof recommended === 'object' ? 'recommended' : recommended;
+}
+
function RuleRow({
rule,
}: {
@@ -40,9 +48,8 @@ function RuleRow({
return null;
}
const { fixable, hasSuggestions, type, deprecated } = rule;
- const { recommended, requiresTypeChecking, extendsBaseRule } = rule.docs;
- const actualRecommended =
- typeof recommended === 'object' ? 'recommended' : recommended;
+ const { requiresTypeChecking, extendsBaseRule } = rule.docs;
+ const actualRecommended = getActualRecommended(rule);
const formatting = type === 'layout';
return (