Skip to content

Commit 59d642c

Browse files
authored
ci: run against upcoming next major ESLint version (#1534)
* ci: run against next ESLint * test: make util * test: use a class * test: use a class (2) * test: improve compat class * refactor: make `flatCompat` util private * test: get `linter#verify` cases passing * ci: skip lint project on eslint v9 * test: ignore coverage in util class * chore: move Jest config into dedicated file * ci: handle skipping linting in Jest config * test: skip `unbound-method` when using `@typescript-eslint` v6 * ci: skip ESLint v9 on Node v16 * refactor: import `Config` from `jest` directly * refactor: address `@ts-expect-error`s * refactor: use a constant instead of a function
1 parent 7bc48aa commit 59d642c

File tree

58 files changed

+303
-186
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+303
-186
lines changed

.eslintrc.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ module.exports = {
9898
globals,
9999
},
100100
{
101-
files: ['src/**/*', 'dangerfile.ts', 'tools/*'],
101+
files: ['src/**/*', 'dangerfile.ts', 'tools/*', './jest.config.ts'],
102102
parserOptions: {
103103
sourceType: 'module',
104104
},

.github/workflows/nodejs.yml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,15 @@ jobs:
7272
fail-fast: false
7373
matrix:
7474
node-version: [16.x, 18.x, 19.x, 20.x, 21.x]
75-
eslint-version: [7, 8]
75+
eslint-version: [7, 8, next]
7676
ts-eslint-plugin-version: [6, 7]
7777
exclude:
7878
# ts-eslint/plugin@7 doesn't support node@16
7979
- node-version: 16.x
8080
ts-eslint-plugin-version: 7
81+
# eslint@9 doesn't support node@16
82+
- node-version: 16.x
83+
eslint-version: next
8184
# ts-eslint/plugin@7 doesn't support node@19
8285
- node-version: 19.x
8386
ts-eslint-plugin-version: 7
@@ -103,7 +106,7 @@ jobs:
103106
yarn add --dev eslint@${{ matrix.eslint-version }} @typescript-eslint/eslint-plugin@${{ matrix.ts-eslint-plugin-version }} @typescript-eslint/parser@${{ matrix.ts-eslint-plugin-version }}
104107
- name: run tests
105108
# only collect coverage on eslint versions that support dynamic import
106-
run: yarn test --coverage ${{ matrix.eslint-version >= 8 }}
109+
run: yarn test --coverage ${{ matrix.eslint-version == 8 }}
107110
env:
108111
CI: true
109112
- uses: codecov/codecov-action@v3

jest.config.ts

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import { version as typescriptESLintPluginVersion } from '@typescript-eslint/eslint-plugin/package.json';
2+
import { version as eslintVersion } from 'eslint/package.json';
3+
import type { Config } from 'jest';
4+
import * as semver from 'semver';
5+
6+
const config = {
7+
clearMocks: true,
8+
restoreMocks: true,
9+
resetMocks: true,
10+
11+
coverageThreshold: {
12+
global: {
13+
branches: 100,
14+
functions: 100,
15+
lines: 100,
16+
statements: 100,
17+
},
18+
},
19+
20+
projects: [
21+
{
22+
displayName: 'test',
23+
testPathIgnorePatterns: [
24+
'<rootDir>/lib/.*',
25+
'<rootDir>/src/rules/__tests__/fixtures/*',
26+
'<rootDir>/src/rules/__tests__/test-utils.ts',
27+
],
28+
coveragePathIgnorePatterns: ['/node_modules/'],
29+
},
30+
{
31+
displayName: 'lint',
32+
runner: 'jest-runner-eslint',
33+
testMatch: ['<rootDir>/**/*.{js,ts}'],
34+
testPathIgnorePatterns: ['<rootDir>/lib/.*'],
35+
coveragePathIgnorePatterns: ['/node_modules/'],
36+
},
37+
],
38+
} satisfies Config;
39+
40+
if (semver.major(eslintVersion) >= 9) {
41+
config.projects = config.projects.filter(
42+
({ displayName }) => displayName !== 'lint',
43+
);
44+
45+
// jest/unbound-method doesn't work when using @typescript-eslint v6
46+
if (semver.major(typescriptESLintPluginVersion) === 6) {
47+
for (const project of config.projects) {
48+
project.testPathIgnorePatterns.push(
49+
'<rootDir>/src/rules/__tests__/unbound-method.test.ts',
50+
);
51+
project.coveragePathIgnorePatterns.push(
52+
'<rootDir>/src/rules/unbound-method.ts',
53+
);
54+
}
55+
}
56+
}
57+
58+
export default config;

package.json

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -64,36 +64,6 @@
6464
"@semantic-release/github"
6565
]
6666
},
67-
"jest": {
68-
"coverageThreshold": {
69-
"global": {
70-
"branches": 100,
71-
"functions": 100,
72-
"lines": 100,
73-
"statements": 100
74-
}
75-
},
76-
"projects": [
77-
{
78-
"displayName": "test",
79-
"testPathIgnorePatterns": [
80-
"<rootDir>/lib/.*",
81-
"<rootDir>/src/rules/__tests__/fixtures/*",
82-
"<rootDir>/src/rules/__tests__/test-utils.ts"
83-
]
84-
},
85-
{
86-
"displayName": "lint",
87-
"runner": "jest-runner-eslint",
88-
"testMatch": [
89-
"<rootDir>/**/*.{js,ts}"
90-
],
91-
"testPathIgnorePatterns": [
92-
"<rootDir>/lib/.*"
93-
]
94-
}
95-
]
96-
},
9767
"dependencies": {
9868
"@typescript-eslint/utils": "^6.0.0"
9969
},

src/rules/__tests__/consistent-test-it.test.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
import { TSESLint } from '@typescript-eslint/utils';
21
import dedent from 'dedent';
32
import rule from '../consistent-test-it';
43
import { TestCaseName } from '../utils';
5-
import { espreeParser } from './test-utils';
4+
import { FlatCompatRuleTester, espreeParser } from './test-utils';
65

7-
const ruleTester = new TSESLint.RuleTester({
6+
const ruleTester = new FlatCompatRuleTester({
87
parser: espreeParser,
98
parserOptions: {
109
ecmaVersion: 2015,

src/rules/__tests__/expect-expect.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import { AST_NODE_TYPES, TSESLint } from '@typescript-eslint/utils';
1+
import { AST_NODE_TYPES } from '@typescript-eslint/utils';
22
import dedent from 'dedent';
33
import rule from '../expect-expect';
4-
import { espreeParser } from './test-utils';
4+
import { FlatCompatRuleTester, espreeParser } from './test-utils';
55

6-
const ruleTester = new TSESLint.RuleTester({
6+
const ruleTester = new FlatCompatRuleTester({
77
parser: espreeParser,
88
parserOptions: {
99
ecmaVersion: 2015,

src/rules/__tests__/max-expects.test.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
import { TSESLint } from '@typescript-eslint/utils';
21
import dedent from 'dedent';
32
import rule from '../max-expects';
4-
import { espreeParser } from './test-utils';
3+
import { FlatCompatRuleTester, espreeParser } from './test-utils';
54

6-
const ruleTester = new TSESLint.RuleTester({
5+
const ruleTester = new FlatCompatRuleTester({
76
parser: espreeParser,
87
parserOptions: {
98
ecmaVersion: 2017,

src/rules/__tests__/max-nested-describe.test.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
import { TSESLint } from '@typescript-eslint/utils';
21
import dedent from 'dedent';
32
import rule from '../max-nested-describe';
4-
import { espreeParser } from './test-utils';
3+
import { FlatCompatRuleTester, espreeParser } from './test-utils';
54

6-
const ruleTester = new TSESLint.RuleTester({
5+
const ruleTester = new FlatCompatRuleTester({
76
parser: espreeParser,
87
parserOptions: {
98
ecmaVersion: 2017,

src/rules/__tests__/no-alias-methods.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import { TSESLint } from '@typescript-eslint/utils';
21
import rule from '../no-alias-methods';
2+
import { FlatCompatRuleTester } from './test-utils';
33

4-
const ruleTester = new TSESLint.RuleTester();
4+
const ruleTester = new FlatCompatRuleTester();
55

66
ruleTester.run('no-alias-methods', rule, {
77
valid: [

src/rules/__tests__/no-commented-out-tests.test.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
import { TSESLint } from '@typescript-eslint/utils';
21
import dedent from 'dedent';
32
import rule from '../no-commented-out-tests';
4-
import { espreeParser } from './test-utils';
3+
import { FlatCompatRuleTester, espreeParser } from './test-utils';
54

6-
const ruleTester = new TSESLint.RuleTester({
5+
const ruleTester = new FlatCompatRuleTester({
76
parser: espreeParser,
87
parserOptions: {
98
ecmaVersion: 2015,

src/rules/__tests__/no-conditional-expect.test.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
import { TSESLint } from '@typescript-eslint/utils';
21
import dedent from 'dedent';
32
import rule from '../no-conditional-expect';
4-
import { espreeParser } from './test-utils';
3+
import { FlatCompatRuleTester, espreeParser } from './test-utils';
54

6-
const ruleTester = new TSESLint.RuleTester({
5+
const ruleTester = new FlatCompatRuleTester({
76
parser: espreeParser,
87
parserOptions: {
98
ecmaVersion: 2019,

src/rules/__tests__/no-conditional-in-test.test.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
import { TSESLint } from '@typescript-eslint/utils';
21
import dedent from 'dedent';
32
import rule from '../no-conditional-in-test';
4-
import { espreeParser } from './test-utils';
3+
import { FlatCompatRuleTester, espreeParser } from './test-utils';
54

6-
const ruleTester = new TSESLint.RuleTester({
5+
const ruleTester = new FlatCompatRuleTester({
76
parser: espreeParser,
87
parserOptions: {
98
ecmaVersion: 2015,

src/rules/__tests__/no-confusing-set-timeout.test.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
import { TSESLint } from '@typescript-eslint/utils';
21
import dedent from 'dedent';
32
import rule from '../no-confusing-set-timeout';
4-
import { espreeParser } from './test-utils';
3+
import { FlatCompatRuleTester, espreeParser } from './test-utils';
54

6-
const ruleTester = new TSESLint.RuleTester({
5+
const ruleTester = new FlatCompatRuleTester({
76
parser: espreeParser,
87
parserOptions: {
98
ecmaVersion: 2020,

src/rules/__tests__/no-deprecated-functions.test.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@ import {
44
type JestVersion,
55
detectJestVersion,
66
} from '../utils/detectJestVersion';
7+
import { FlatCompatRuleTester, usingFlatConfig } from './test-utils';
78

89
jest.mock('../utils/detectJestVersion');
910

1011
const detectJestVersionMock = detectJestVersion as jest.MockedFunction<
1112
typeof detectJestVersion
1213
>;
1314

14-
const ruleTester = new TSESLint.RuleTester();
15+
const ruleTester = new FlatCompatRuleTester();
1516

1617
const generateValidCases = (
1718
jestVersion: JestVersion | string | undefined,
@@ -154,6 +155,20 @@ describe('the rule', () => {
154155
expect(() => {
155156
const linter = new TSESLint.Linter();
156157

158+
/* istanbul ignore if */
159+
if (usingFlatConfig) {
160+
linter.verify('jest.resetModuleRegistry()', [
161+
{
162+
plugins: {
163+
jest: { rules: { 'no-deprecated-functions': rule } },
164+
},
165+
rules: { 'jest/no-deprecated-functions': 'error' },
166+
},
167+
]);
168+
169+
return;
170+
}
171+
157172
linter.defineRule('no-deprecated-functions', rule);
158173

159174
linter.verify('jest.resetModuleRegistry()', {

src/rules/__tests__/no-disabled-tests.test.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
import { TSESLint } from '@typescript-eslint/utils';
21
import dedent from 'dedent';
32
import rule from '../no-disabled-tests';
4-
import { espreeParser } from './test-utils';
3+
import { FlatCompatRuleTester, espreeParser } from './test-utils';
54

6-
const ruleTester = new TSESLint.RuleTester({
5+
const ruleTester = new FlatCompatRuleTester({
76
parser: espreeParser,
87
parserOptions: {
98
ecmaVersion: 2015,

src/rules/__tests__/no-done-callback.test.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
import { TSESLint } from '@typescript-eslint/utils';
21
import dedent from 'dedent';
32
import rule from '../no-done-callback';
4-
import { espreeParser } from './test-utils';
3+
import { FlatCompatRuleTester, espreeParser } from './test-utils';
54

6-
const ruleTester = new TSESLint.RuleTester({
5+
const ruleTester = new FlatCompatRuleTester({
76
parser: espreeParser,
87
parserOptions: {
98
ecmaVersion: 2017,

src/rules/__tests__/no-duplicate-hooks.test.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
import { TSESLint } from '@typescript-eslint/utils';
21
import dedent from 'dedent';
32
import rule from '../no-duplicate-hooks';
4-
import { espreeParser } from './test-utils';
3+
import { FlatCompatRuleTester, espreeParser } from './test-utils';
54

6-
const ruleTester = new TSESLint.RuleTester({
5+
const ruleTester = new FlatCompatRuleTester({
76
parser: espreeParser,
87
parserOptions: {
98
ecmaVersion: 2015,

src/rules/__tests__/no-export.test.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
import { TSESLint } from '@typescript-eslint/utils';
21
import dedent from 'dedent';
32
import rule from '../no-export';
4-
import { espreeParser } from './test-utils';
3+
import { FlatCompatRuleTester, espreeParser } from './test-utils';
54

6-
const ruleTester = new TSESLint.RuleTester({
5+
const ruleTester = new FlatCompatRuleTester({
76
parser: espreeParser,
87
parserOptions: {
98
ecmaVersion: 2015,

src/rules/__tests__/no-focused-tests.test.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
import { TSESLint } from '@typescript-eslint/utils';
21
import dedent from 'dedent';
32
import rule from '../no-focused-tests';
4-
import { espreeParser } from './test-utils';
3+
import { FlatCompatRuleTester, espreeParser } from './test-utils';
54

6-
const ruleTester = new TSESLint.RuleTester({
5+
const ruleTester = new FlatCompatRuleTester({
76
parser: espreeParser,
87
parserOptions: {
98
ecmaVersion: 6,

src/rules/__tests__/no-hooks.test.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
import { TSESLint } from '@typescript-eslint/utils';
21
import dedent from 'dedent';
32
import rule from '../no-hooks';
43
import { HookName } from '../utils';
5-
import { espreeParser } from './test-utils';
4+
import { FlatCompatRuleTester, espreeParser } from './test-utils';
65

7-
const ruleTester = new TSESLint.RuleTester({
6+
const ruleTester = new FlatCompatRuleTester({
87
parser: espreeParser,
98
parserOptions: {
109
ecmaVersion: 2015,

src/rules/__tests__/no-identical-title.test.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
import { TSESLint } from '@typescript-eslint/utils';
21
import dedent from 'dedent';
32
import rule from '../no-identical-title';
4-
import { espreeParser } from './test-utils';
3+
import { FlatCompatRuleTester, espreeParser } from './test-utils';
54

6-
const ruleTester = new TSESLint.RuleTester({
5+
const ruleTester = new FlatCompatRuleTester({
76
parser: espreeParser,
87
parserOptions: {
98
ecmaVersion: 2015,

src/rules/__tests__/no-interpolation-in-snapshots.test.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
import { TSESLint } from '@typescript-eslint/utils';
21
import rule from '../no-interpolation-in-snapshots';
3-
import { espreeParser } from './test-utils';
2+
import { FlatCompatRuleTester, espreeParser } from './test-utils';
43

5-
const ruleTester = new TSESLint.RuleTester({
4+
const ruleTester = new FlatCompatRuleTester({
65
parser: espreeParser,
76
parserOptions: {
87
ecmaVersion: 2017,

src/rules/__tests__/no-jasmine-globals.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import { TSESLint } from '@typescript-eslint/utils';
21
import rule from '../no-jasmine-globals';
2+
import { FlatCompatRuleTester } from './test-utils';
33

4-
const ruleTester = new TSESLint.RuleTester();
4+
const ruleTester = new FlatCompatRuleTester();
55

66
ruleTester.run('no-jasmine-globals', rule, {
77
valid: [

0 commit comments

Comments
 (0)