Skip to content

Commit 331feb7

Browse files
authored
chore: use eslint v9 & flat config (#521)
* chore: use eslint v9 & flat config * fix * fix * remove legacy config
1 parent 7642d29 commit 331feb7

File tree

18 files changed

+311
-260
lines changed

18 files changed

+311
-260
lines changed

.eslintignore

Lines changed: 0 additions & 13 deletions
This file was deleted.

.eslintrc.cjs

Lines changed: 0 additions & 80 deletions
This file was deleted.

.github/workflows/test.yml

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@ jobs:
1616
uses: actions/checkout@v4
1717
- name: Setup Node.js
1818
uses: actions/setup-node@v4
19-
with:
20-
node-version: 18
2119
- name: Enable corepack
2220
run: corepack enable
2321
- name: Install
@@ -48,13 +46,13 @@ jobs:
4846
run: |
4947
pnpm build
5048
pnpm test:integrations
51-
test-for-eslint:
49+
test-for-old-eslint:
5250
name: 'Test for ESLint ${{ matrix.eslint }} on ${{ matrix.os }} using Node.js ${{ matrix.node }}'
5351
runs-on: ${{ matrix.os }}
5452
strategy:
5553
matrix:
5654
os: [ubuntu-latest]
57-
eslint: [8, ^9.0.0-0]
55+
eslint: [8]
5856
node: [20]
5957
steps:
6058
- name: Checkout
@@ -67,8 +65,5 @@ jobs:
6765
run: corepack enable
6866
- name: Install
6967
run: pnpm add eslint@${{ matrix.eslint }}
70-
- name: Install ts-eslint v5
71-
run: pnpm add @typescript-eslint/parser@4 @typescript-eslint/eslint-plugin@4
72-
if: matrix.eslint == 5
7368
- name: Test
7469
run: pnpm test

.npmrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
shamefully-hoist=true
2+
force=true

.prettierrc.mjs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export default {
2+
// Make the VSCode extension use a local prettier.
3+
}

docs/.vitepress/components/eslint-code-block.vue

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ export default {
4545
}
4646
},
4747
filename: {
48-
type: String
48+
type: String,
49+
default: undefined
4950
},
5051
language: {
5152
type: String,
@@ -82,10 +83,10 @@ export default {
8283
(this.language === 'json'
8384
? 'example.json'
8485
: this.language === 'yaml'
85-
? 'example.yaml'
86-
: this.language === 'javascript'
87-
? 'example.js'
88-
: 'example.vue')
86+
? 'example.yaml'
87+
: this.language === 'javascript'
88+
? 'example.js'
89+
: 'example.vue')
8990
)
9091
},
9192
config() {
@@ -121,8 +122,8 @@ export default {
121122
this.language === 'json'
122123
? 'jsonc-eslint-parser'
123124
: this.language === 'yaml'
124-
? 'yaml-eslint-parser'
125-
: 'vue-eslint-parser',
125+
? 'yaml-eslint-parser'
126+
: 'vue-eslint-parser',
126127
parserOptions: {
127128
ecmaVersion: 2020,
128129
sourceType: 'module',
@@ -137,8 +138,8 @@ export default {
137138
.getFiles()
138139
.filter(file => /\.(?:json5?|ya?ml)$/i.test(file))
139140
: this.isResource
140-
? [this.resplvedFilename]
141-
: []
141+
? [this.resplvedFilename]
142+
: []
142143
).map(pattern => ({ pattern, localeKey: this.localeKey })),
143144
messageSyntaxVersion: this.messageSyntaxVersion
144145
}

eslint.config.mjs

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
import pluginVue from 'eslint-plugin-vue'
2+
import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended'
3+
import markdown from 'eslint-plugin-markdown'
4+
import tseslint from 'typescript-eslint'
5+
6+
export default [
7+
...pluginVue.configs['flat/recommended'],
8+
eslintPluginPrettierRecommended,
9+
...markdown.configs.recommended,
10+
{
11+
rules: {
12+
'object-shorthand': 'error',
13+
'no-debugger': 'error',
14+
'vue/multi-word-component-names': 'off',
15+
'prefer-template': 'error',
16+
'no-restricted-properties': [
17+
'error',
18+
{
19+
object: 'context',
20+
property: 'getSourceCode',
21+
message: 'Use lib/utils/compat.ts'
22+
},
23+
{
24+
object: 'context',
25+
property: 'getFilename',
26+
message: 'Use lib/utils/compat.ts'
27+
},
28+
{
29+
object: 'context',
30+
property: 'getPhysicalFilename',
31+
message: 'Use lib/utils/compat.ts'
32+
},
33+
{
34+
object: 'context',
35+
property: 'getCwd',
36+
message: 'Use lib/utils/compat.ts'
37+
},
38+
{
39+
object: 'context',
40+
property: 'getScope',
41+
message: 'Use lib/utils/compat.ts'
42+
},
43+
{
44+
object: 'context',
45+
property: 'parserServices',
46+
message: 'Use lib/utils/compat.ts'
47+
}
48+
]
49+
}
50+
},
51+
...tseslint.config({
52+
files: ['*.ts', '**/*.ts', '*.mts', '**/*.mts'],
53+
extends: [...tseslint.configs.recommended],
54+
rules: {
55+
'@typescript-eslint/no-non-null-assertion': 'off',
56+
'@typescript-eslint/consistent-type-imports': 'error'
57+
}
58+
}),
59+
{
60+
files: ['*.vue', '**/*.vue'],
61+
languageOptions: {
62+
parserOptions: {
63+
parser: tseslint.parser
64+
}
65+
}
66+
},
67+
{
68+
files: ['js', 'mjs', 'cjs', 'ts', 'mts', 'cts', 'vue'].map(ext => [
69+
`**/*.md/*.${ext}`
70+
]),
71+
rules: {
72+
'prettier/prettier': 'off',
73+
'vue/no-v-html': 'off'
74+
}
75+
},
76+
{
77+
ignores: [
78+
'!docs/.vitepress/',
79+
'!.github/',
80+
'!.vscode/',
81+
'.nyc_output/',
82+
'assets/',
83+
'coverage/',
84+
'dist/',
85+
'docs/.vitepress/cache/',
86+
'docs/.vitepress/dist/',
87+
'lib/configs/**/*.ts',
88+
'node_modules/',
89+
'tests/integrations/'
90+
// 'tests/fixtures/' // Do not specify it here for the test to work.
91+
]
92+
}
93+
]

lib/rules/no-unused-keys.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -456,8 +456,8 @@ function create(context: RuleContext): RuleListener {
456456
before
457457
? before.range[1]
458458
: hyphen
459-
? hyphen.range[0]
460-
: removeNode.range[0],
459+
? hyphen.range[0]
460+
: removeNode.range[0],
461461
removeNode.range[1]
462462
])
463463
}

lib/rules/valid-message-syntax.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ function create(context: RuleContext): RuleListener {
4545
message === null
4646
? 'null'
4747
: message instanceof RegExp
48-
? 'RegExp'
49-
: typeof message
48+
? 'RegExp'
49+
: typeof message
5050
context.report({
5151
message: `Unexpected '${type}' message`,
5252
loc: reportNode.loc

lib/utils/ignored-paths.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@ function mergeDefaultOptions<O>(
6464
return mergedOptions as never
6565
}
6666

67-
/* eslint-disable valid-jsdoc */
6867
/**
6968
* Normalize the path separators in a given string.
7069
* On Windows environment, this replaces `\` by `/`.
@@ -77,7 +76,6 @@ const normalizePathSeps =
7776
null,
7877
new RegExp(`\\${sep}`, 'g')
7978
)
80-
/* eslint-enable valid-jsdoc */
8179

8280
/**
8381
* Converts a glob pattern to a new glob pattern relative to a different directory
@@ -179,7 +177,7 @@ export class IgnoredPaths {
179177
statSync(options.ignorePath)
180178
ignorePath = options.ignorePath
181179
} catch (
182-
// eslint-disable-next-line @typescript-eslint/no-explicit-any, prettier/prettier
180+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
183181
e: any
184182
) {
185183
e.message = `Cannot read ignore file: ${options.ignorePath}\nError: ${e.message}`
@@ -214,7 +212,7 @@ export class IgnoredPaths {
214212
readFileSync(packageJSONPath, 'utf8')
215213
)
216214
} catch (
217-
// eslint-disable-next-line @typescript-eslint/no-explicit-any, prettier/prettier
215+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
218216
e: any
219217
) {
220218
debug(

0 commit comments

Comments
 (0)