eslint: Type-check ESLint configuration.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
Anders Kaseorg
2025-09-09 15:05:46 -07:00
committed by Tim Abbott
parent 1e463d1db5
commit 56fc587dfd
5 changed files with 60 additions and 14 deletions

View File

@@ -1,6 +1,9 @@
// @ts-check
import {FlatCompat} from "@eslint/eslintrc";
import js from "@eslint/js";
import confusingBrowserGlobals from "confusing-browser-globals";
import {defineConfig} from "eslint/config";
import prettier from "eslint-config-prettier";
import {configs as astroConfigs} from "eslint-plugin-astro";
import formatjs from "eslint-plugin-formatjs";
@@ -13,7 +16,7 @@ import tseslint from "typescript-eslint";
const compat = new FlatCompat({baseDirectory: import.meta.dirname});
export default tseslint.config(
export default defineConfig(
{
// This is intended for generated files and vendored third-party files.
// For our source code, instead of adding files here, consider using
@@ -29,7 +32,8 @@ export default tseslint.config(
},
js.configs.recommended,
importPlugin.flatConfigs.recommended,
compat.extends("plugin:no-jquery/recommended", "plugin:no-jquery/deprecated"),
compat.config(noJquery.configs.recommended),
compat.config(noJquery.configs.deprecated),
unicorn.configs.recommended,
prettier,
tseslint.configs.strictTypeChecked,
@@ -318,7 +322,7 @@ export default tseslint.config(
"unicorn/prefer-string-replace-all": "off",
},
},
...astroConfigs.recommended,
astroConfigs.recommended,
{
files: ["starlight_help/src/components/ZulipNote.astro"],
rules: {

View File

@@ -105,6 +105,7 @@
"@types/blueimp-md5": "^2.18.0",
"@types/co-body": "^6.1.3",
"@types/confusing-browser-globals": "^1.0.3",
"@types/eslint-config-prettier": "^6.11.3",
"@types/gtag.js": "^0.0.20",
"@types/is-url": "^1.2.32",
"@types/jquery": "^3.3.31",
@@ -125,6 +126,7 @@
"@types/winchan": "^0.2.0",
"@typescript-eslint/eslint-plugin": "^8.2.0",
"@typescript-eslint/parser": "^8.2.0",
"@typescript-eslint/utils": "^8.25.0",
"astro-eslint-parser": "^1.2.2",
"babel-plugin-istanbul": "^7.0.0",
"callsites": "^4.2.0",
@@ -170,6 +172,7 @@
},
"pnpm": {
"overrides": {
"@types/eslint": "-",
"source-map@^0.6": "npm:source-map-js@^1.2.1"
},
"patchedDependencies": {

22
pnpm-lock.yaml generated
View File

@@ -5,6 +5,7 @@ settings:
excludeLinksFromLockfile: false
overrides:
'@types/eslint': '-'
source-map@^0.6: npm:source-map-js@^1.2.1
patchedDependencies:
@@ -335,6 +336,9 @@ importers:
'@types/confusing-browser-globals':
specifier: ^1.0.3
version: 1.0.3
'@types/eslint-config-prettier':
specifier: ^6.11.3
version: 6.11.3
'@types/gtag.js':
specifier: ^0.0.20
version: 0.0.20
@@ -395,6 +399,9 @@ importers:
'@typescript-eslint/parser':
specifier: ^8.2.0
version: 8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)
'@typescript-eslint/utils':
specifier: ^8.25.0
version: 8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)
astro-eslint-parser:
specifier: ^1.2.2
version: 1.2.2
@@ -2705,12 +2712,12 @@ packages:
'@types/debug@4.1.12':
resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
'@types/eslint-config-prettier@6.11.3':
resolution: {integrity: sha512-3wXCiM8croUnhg9LdtZUJQwNcQYGWxxdOWDjPe1ykCqJFPVpzAKfs/2dgSoCtAvdPeaponcWPI7mPcGGp9dkKQ==}
'@types/eslint-scope@3.7.7':
resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==}
'@types/eslint@9.6.1':
resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==}
'@types/estree-jsx@1.0.5':
resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==}
@@ -12358,16 +12365,12 @@ snapshots:
dependencies:
'@types/ms': 2.1.0
'@types/eslint-config-prettier@6.11.3': {}
'@types/eslint-scope@3.7.7':
dependencies:
'@types/eslint': 9.6.1
'@types/estree': 1.0.8
'@types/eslint@9.6.1':
dependencies:
'@types/estree': 1.0.8
'@types/json-schema': 7.0.15
'@types/estree-jsx@1.0.5':
dependencies:
'@types/estree': 1.0.8
@@ -14788,7 +14791,6 @@ snapshots:
dependencies:
'@formatjs/icu-messageformat-parser': 2.11.2
'@formatjs/ts-transformer': 3.14.0
'@types/eslint': 9.6.1
'@types/picomatch': 3.0.2
'@typescript-eslint/utils': 8.42.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)
eslint: 9.34.0(jiti@2.5.1)

View File

@@ -49,4 +49,4 @@ API_FEATURE_LEVEL = 425
# historical commits sharing the same major version, in which case a
# minor version bump suffices.
PROVISION_VERSION = (347, 2) # bumped 2025-09-04 to upgrade Python requirements
PROVISION_VERSION = (347, 3) # bumped 2025-09-09 to add @types/eslint-config-prettier

View File

@@ -0,0 +1,37 @@
import type {Linter, Rule} from "eslint";
declare const eslintPluginNoJquery: {
rules: Record<string, Rule.RuleModule>;
configs: {
recommended: Linter.LegacyConfig;
slim: Linter.LegacyConfig;
deprecated: Linter.LegacyConfig;
["deprecated-3.7"]: Linter.LegacyConfig;
["deprecated-3.6"]: Linter.LegacyConfig;
["deprecated-3.5"]: Linter.LegacyConfig;
["deprecated-3.4"]: Linter.LegacyConfig;
["deprecated-3.3"]: Linter.LegacyConfig;
["deprecated-3.2"]: Linter.LegacyConfig;
["deprecated-3.1"]: Linter.LegacyConfig;
["deprecated-3.0"]: Linter.LegacyConfig;
["deprecated-2.2"]: Linter.LegacyConfig;
["deprecated-2.1"]: Linter.LegacyConfig;
["deprecated-2.0"]: Linter.LegacyConfig;
["deprecated-1.12"]: Linter.LegacyConfig;
["deprecated-1.11"]: Linter.LegacyConfig;
["deprecated-1.10"]: Linter.LegacyConfig;
["deprecated-1.9"]: Linter.LegacyConfig;
["deprecated-1.8"]: Linter.LegacyConfig;
["deprecated-1.7"]: Linter.LegacyConfig;
["deprecated-1.6"]: Linter.LegacyConfig;
["deprecated-1.5"]: Linter.LegacyConfig;
["deprecated-1.4"]: Linter.LegacyConfig;
["deprecated-1.3"]: Linter.LegacyConfig;
["deprecated-1.2"]: Linter.LegacyConfig;
["deprecated-1.1"]: Linter.LegacyConfig;
["deprecated-1.0"]: Linter.LegacyConfig;
all: Linter.LegacyConfig;
};
};
export = eslintPluginNoJquery;