Set up typed eslint

This commit is contained in:
Joscha 2025-03-02 18:59:59 +01:00
parent dbdb3c66a3
commit 7ea8ac6715
5 changed files with 95 additions and 56 deletions

126
pnpm-lock.yaml generated
View file

@ -24,36 +24,42 @@ importers:
'@eslint/js':
specifier: ^9.21.0
version: 9.21.0
'@types/eslint-config-prettier':
specifier: ^6.11.3
version: 6.11.3
'@vitejs/plugin-vue':
specifier: ^5.2.1
version: 5.2.1(vite@6.2.0(@types/node@22.13.8))(vue@3.5.13(typescript@5.7.3))
version: 5.2.1(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2))(vue@3.5.13(typescript@5.7.3))
'@vue/tsconfig':
specifier: ^0.7.0
version: 0.7.0(typescript@5.7.3)(vue@3.5.13(typescript@5.7.3))
eslint:
specifier: ^9.21.0
version: 9.21.0
version: 9.21.0(jiti@2.4.2)
eslint-config-prettier:
specifier: ^10.0.2
version: 10.0.2(eslint@9.21.0)
version: 10.0.2(eslint@9.21.0(jiti@2.4.2))
eslint-plugin-vue:
specifier: ^9.32.0
version: 9.32.0(eslint@9.21.0)
version: 9.32.0(eslint@9.21.0(jiti@2.4.2))
globals:
specifier: ^16.0.0
version: 16.0.0
jiti:
specifier: ^2.4.2
version: 2.4.2
typescript:
specifier: ~5.7.3
version: 5.7.3
typescript-eslint:
specifier: ^8.25.0
version: 8.25.0(eslint@9.21.0)(typescript@5.7.3)
version: 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
vite:
specifier: ^6.2.0
version: 6.2.0(@types/node@22.13.8)
version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)
vite-plugin-vue-devtools:
specifier: ^7.7.2
version: 7.7.2(rollup@4.34.9)(vite@6.2.0(@types/node@22.13.8))(vue@3.5.13(typescript@5.7.3))
version: 7.7.2(rollup@4.34.9)(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2))(vue@3.5.13(typescript@5.7.3))
vue-tsc:
specifier: ^2.2.8
version: 2.2.8(typescript@5.7.3)
@ -551,6 +557,9 @@ packages:
resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==}
engines: {node: '>=18'}
'@types/eslint-config-prettier@6.11.3':
resolution: {integrity: sha512-3wXCiM8croUnhg9LdtZUJQwNcQYGWxxdOWDjPe1ykCqJFPVpzAKfs/2dgSoCtAvdPeaponcWPI7mPcGGp9dkKQ==}
'@types/estree@1.0.6':
resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
@ -1073,6 +1082,10 @@ packages:
isexe@2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
jiti@2.4.2:
resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==}
hasBin: true
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
@ -1781,9 +1794,9 @@ snapshots:
'@esbuild/win32-x64@0.25.0':
optional: true
'@eslint-community/eslint-utils@4.4.1(eslint@9.21.0)':
'@eslint-community/eslint-utils@4.4.1(eslint@9.21.0(jiti@2.4.2))':
dependencies:
eslint: 9.21.0
eslint: 9.21.0(jiti@2.4.2)
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.1': {}
@ -1936,6 +1949,8 @@ snapshots:
'@sindresorhus/merge-streams@4.0.0': {}
'@types/eslint-config-prettier@6.11.3': {}
'@types/estree@1.0.6': {}
'@types/json-schema@7.0.15': {}
@ -1944,15 +1959,15 @@ snapshots:
dependencies:
undici-types: 6.20.0
'@typescript-eslint/eslint-plugin@8.25.0(@typescript-eslint/parser@8.25.0(eslint@9.21.0)(typescript@5.7.3))(eslint@9.21.0)(typescript@5.7.3)':
'@typescript-eslint/eslint-plugin@8.25.0(@typescript-eslint/parser@8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)':
dependencies:
'@eslint-community/regexpp': 4.12.1
'@typescript-eslint/parser': 8.25.0(eslint@9.21.0)(typescript@5.7.3)
'@typescript-eslint/parser': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
'@typescript-eslint/scope-manager': 8.25.0
'@typescript-eslint/type-utils': 8.25.0(eslint@9.21.0)(typescript@5.7.3)
'@typescript-eslint/utils': 8.25.0(eslint@9.21.0)(typescript@5.7.3)
'@typescript-eslint/type-utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
'@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
'@typescript-eslint/visitor-keys': 8.25.0
eslint: 9.21.0
eslint: 9.21.0(jiti@2.4.2)
graphemer: 1.4.0
ignore: 5.3.2
natural-compare: 1.4.0
@ -1961,14 +1976,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/parser@8.25.0(eslint@9.21.0)(typescript@5.7.3)':
'@typescript-eslint/parser@8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)':
dependencies:
'@typescript-eslint/scope-manager': 8.25.0
'@typescript-eslint/types': 8.25.0
'@typescript-eslint/typescript-estree': 8.25.0(typescript@5.7.3)
'@typescript-eslint/visitor-keys': 8.25.0
debug: 4.4.0
eslint: 9.21.0
eslint: 9.21.0(jiti@2.4.2)
typescript: 5.7.3
transitivePeerDependencies:
- supports-color
@ -1978,12 +1993,12 @@ snapshots:
'@typescript-eslint/types': 8.25.0
'@typescript-eslint/visitor-keys': 8.25.0
'@typescript-eslint/type-utils@8.25.0(eslint@9.21.0)(typescript@5.7.3)':
'@typescript-eslint/type-utils@8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)':
dependencies:
'@typescript-eslint/typescript-estree': 8.25.0(typescript@5.7.3)
'@typescript-eslint/utils': 8.25.0(eslint@9.21.0)(typescript@5.7.3)
'@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
debug: 4.4.0
eslint: 9.21.0
eslint: 9.21.0(jiti@2.4.2)
ts-api-utils: 2.0.1(typescript@5.7.3)
typescript: 5.7.3
transitivePeerDependencies:
@ -2005,13 +2020,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/utils@8.25.0(eslint@9.21.0)(typescript@5.7.3)':
'@typescript-eslint/utils@8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)':
dependencies:
'@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0)
'@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0(jiti@2.4.2))
'@typescript-eslint/scope-manager': 8.25.0
'@typescript-eslint/types': 8.25.0
'@typescript-eslint/typescript-estree': 8.25.0(typescript@5.7.3)
eslint: 9.21.0
eslint: 9.21.0(jiti@2.4.2)
typescript: 5.7.3
transitivePeerDependencies:
- supports-color
@ -2021,9 +2036,9 @@ snapshots:
'@typescript-eslint/types': 8.25.0
eslint-visitor-keys: 4.2.0
'@vitejs/plugin-vue@5.2.1(vite@6.2.0(@types/node@22.13.8))(vue@3.5.13(typescript@5.7.3))':
'@vitejs/plugin-vue@5.2.1(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2))(vue@3.5.13(typescript@5.7.3))':
dependencies:
vite: 6.2.0(@types/node@22.13.8)
vite: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)
vue: 3.5.13(typescript@5.7.3)
'@volar/language-core@2.4.11':
@ -2103,14 +2118,14 @@ snapshots:
de-indent: 1.0.2
he: 1.2.0
'@vue/devtools-core@7.7.2(vite@6.2.0(@types/node@22.13.8))(vue@3.5.13(typescript@5.7.3))':
'@vue/devtools-core@7.7.2(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2))(vue@3.5.13(typescript@5.7.3))':
dependencies:
'@vue/devtools-kit': 7.7.2
'@vue/devtools-shared': 7.7.2
mitt: 3.0.1
nanoid: 5.1.2
pathe: 2.0.3
vite-hot-client: 0.2.4(vite@6.2.0(@types/node@22.13.8))
vite-hot-client: 0.2.4(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2))
vue: 3.5.13(typescript@5.7.3)
transitivePeerDependencies:
- vite
@ -2310,20 +2325,20 @@ snapshots:
escape-string-regexp@4.0.0: {}
eslint-config-prettier@10.0.2(eslint@9.21.0):
eslint-config-prettier@10.0.2(eslint@9.21.0(jiti@2.4.2)):
dependencies:
eslint: 9.21.0
eslint: 9.21.0(jiti@2.4.2)
eslint-plugin-vue@9.32.0(eslint@9.21.0):
eslint-plugin-vue@9.32.0(eslint@9.21.0(jiti@2.4.2)):
dependencies:
'@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0)
eslint: 9.21.0
'@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0(jiti@2.4.2))
eslint: 9.21.0(jiti@2.4.2)
globals: 13.24.0
natural-compare: 1.4.0
nth-check: 2.1.1
postcss-selector-parser: 6.1.2
semver: 7.7.1
vue-eslint-parser: 9.4.3(eslint@9.21.0)
vue-eslint-parser: 9.4.3(eslint@9.21.0(jiti@2.4.2))
xml-name-validator: 4.0.0
transitivePeerDependencies:
- supports-color
@ -2342,9 +2357,9 @@ snapshots:
eslint-visitor-keys@4.2.0: {}
eslint@9.21.0:
eslint@9.21.0(jiti@2.4.2):
dependencies:
'@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0)
'@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0(jiti@2.4.2))
'@eslint-community/regexpp': 4.12.1
'@eslint/config-array': 0.19.2
'@eslint/core': 0.12.0
@ -2378,6 +2393,8 @@ snapshots:
minimatch: 3.1.2
natural-compare: 1.4.0
optionator: 0.9.4
optionalDependencies:
jiti: 2.4.2
transitivePeerDependencies:
- supports-color
@ -2549,6 +2566,8 @@ snapshots:
isexe@2.0.0: {}
jiti@2.4.2: {}
js-tokens@4.0.0: {}
js-yaml@4.1.0:
@ -2798,12 +2817,12 @@ snapshots:
type-fest@0.20.2: {}
typescript-eslint@8.25.0(eslint@9.21.0)(typescript@5.7.3):
typescript-eslint@8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3):
dependencies:
'@typescript-eslint/eslint-plugin': 8.25.0(@typescript-eslint/parser@8.25.0(eslint@9.21.0)(typescript@5.7.3))(eslint@9.21.0)(typescript@5.7.3)
'@typescript-eslint/parser': 8.25.0(eslint@9.21.0)(typescript@5.7.3)
'@typescript-eslint/utils': 8.25.0(eslint@9.21.0)(typescript@5.7.3)
eslint: 9.21.0
'@typescript-eslint/eslint-plugin': 8.25.0(@typescript-eslint/parser@8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
'@typescript-eslint/parser': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
'@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
eslint: 9.21.0(jiti@2.4.2)
typescript: 5.7.3
transitivePeerDependencies:
- supports-color
@ -2828,11 +2847,11 @@ snapshots:
util-deprecate@1.0.2: {}
vite-hot-client@0.2.4(vite@6.2.0(@types/node@22.13.8)):
vite-hot-client@0.2.4(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2)):
dependencies:
vite: 6.2.0(@types/node@22.13.8)
vite: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)
vite-plugin-inspect@0.8.9(rollup@4.34.9)(vite@6.2.0(@types/node@22.13.8)):
vite-plugin-inspect@0.8.9(rollup@4.34.9)(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2)):
dependencies:
'@antfu/utils': 0.7.10
'@rollup/pluginutils': 5.1.4(rollup@4.34.9)
@ -2843,28 +2862,28 @@ snapshots:
perfect-debounce: 1.0.0
picocolors: 1.1.1
sirv: 3.0.1
vite: 6.2.0(@types/node@22.13.8)
vite: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)
transitivePeerDependencies:
- rollup
- supports-color
vite-plugin-vue-devtools@7.7.2(rollup@4.34.9)(vite@6.2.0(@types/node@22.13.8))(vue@3.5.13(typescript@5.7.3)):
vite-plugin-vue-devtools@7.7.2(rollup@4.34.9)(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2))(vue@3.5.13(typescript@5.7.3)):
dependencies:
'@vue/devtools-core': 7.7.2(vite@6.2.0(@types/node@22.13.8))(vue@3.5.13(typescript@5.7.3))
'@vue/devtools-core': 7.7.2(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2))(vue@3.5.13(typescript@5.7.3))
'@vue/devtools-kit': 7.7.2
'@vue/devtools-shared': 7.7.2
execa: 9.5.2
sirv: 3.0.1
vite: 6.2.0(@types/node@22.13.8)
vite-plugin-inspect: 0.8.9(rollup@4.34.9)(vite@6.2.0(@types/node@22.13.8))
vite-plugin-vue-inspector: 5.3.1(vite@6.2.0(@types/node@22.13.8))
vite: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)
vite-plugin-inspect: 0.8.9(rollup@4.34.9)(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2))
vite-plugin-vue-inspector: 5.3.1(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2))
transitivePeerDependencies:
- '@nuxt/kit'
- rollup
- supports-color
- vue
vite-plugin-vue-inspector@5.3.1(vite@6.2.0(@types/node@22.13.8)):
vite-plugin-vue-inspector@5.3.1(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2)):
dependencies:
'@babel/core': 7.26.9
'@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.9)
@ -2875,11 +2894,11 @@ snapshots:
'@vue/compiler-dom': 3.5.13
kolorist: 1.8.0
magic-string: 0.30.17
vite: 6.2.0(@types/node@22.13.8)
vite: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)
transitivePeerDependencies:
- supports-color
vite@6.2.0(@types/node@22.13.8):
vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2):
dependencies:
esbuild: 0.25.0
postcss: 8.5.3
@ -2887,13 +2906,14 @@ snapshots:
optionalDependencies:
'@types/node': 22.13.8
fsevents: 2.3.3
jiti: 2.4.2
vscode-uri@3.1.0: {}
vue-eslint-parser@9.4.3(eslint@9.21.0):
vue-eslint-parser@9.4.3(eslint@9.21.0(jiti@2.4.2)):
dependencies:
debug: 4.4.0
eslint: 9.21.0
eslint: 9.21.0(jiti@2.4.2)
eslint-scope: 7.2.2
eslint-visitor-keys: 3.4.3
espree: 9.6.1

View file

@ -10,9 +10,19 @@ export default tseslint.config(
{ languageOptions: { globals: { ...globals.browser, ...globals.node } } },
{
languageOptions: {
parserOptions: {
projectService: true,
tsconfigRootDir: import.meta.dirname,
extraFileExtensions: ["vue"],
},
},
},
eslint.configs.recommended,
...tseslint.configs.strict,
...tseslint.configs.stylistic,
...tseslint.configs.strictTypeChecked,
...tseslint.configs.stylisticTypeChecked,
...vue.configs["flat/recommended"],
prettier,

View file

@ -14,12 +14,14 @@
},
"devDependencies": {
"@eslint/js": "^9.21.0",
"@types/eslint-config-prettier": "^6.11.3",
"@vitejs/plugin-vue": "^5.2.1",
"@vue/tsconfig": "^0.7.0",
"eslint": "^9.21.0",
"eslint-config-prettier": "^10.0.2",
"eslint-plugin-vue": "^9.32.0",
"globals": "^16.0.0",
"jiti": "^2.4.2",
"typescript": "~5.7.3",
"typescript-eslint": "^8.25.0",
"vite": "^6.2.0",

View file

@ -2,4 +2,11 @@ import { createApp } from "vue";
import "./style.css";
import App from "./App.vue";
// The type of App contains any in its type parameters, according to vscode.
// Presumably, this is what triggers the lint.
//
// @vue/eslint-config-typescript turns this option off entirely.
// https://github.com/vuejs/eslint-config-typescript/blob/bcdeb741521a718d44dfe77aadcf6d0702b1fd21/src/internals.ts#L139
//
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
createApp(App).mount("#app");

View file

@ -14,5 +14,5 @@
"moduleDetection": "force",
"noEmit": true
},
"include": ["vite.config.ts"]
"include": ["vite.config.ts", "eslint.config.ts"]
}