Skip to content

Commit c0c716b

Browse files
scagoodaladdin-add
andauthored
feat: Resolve getAncestors and getScope calls in eslint v9 (#466)
Co-authored-by: 唯然 <[email protected]>
1 parent 7d33c30 commit c0c716b

27 files changed

+220
-55
lines changed

__tests__/always-return.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict'
22

33
const rule = require('../rules/always-return')
4-
const RuleTester = require('eslint').RuleTester
4+
const { RuleTester } = require('./rule-tester')
55
const ruleTester = new RuleTester({
66
parserOptions: {
77
ecmaVersion: 11,

__tests__/avoid-new.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict'
22

33
const rule = require('../rules/avoid-new')
4-
const RuleTester = require('eslint').RuleTester
4+
const { RuleTester } = require('./rule-tester')
55
const ruleTester = new RuleTester({
66
parserOptions: {
77
ecmaVersion: 6,

__tests__/catch-or-return.js

+7-6
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
'use strict'
22

33
const rule = require('../rules/catch-or-return')
4-
const RuleTester = require('eslint').RuleTester
5-
const ruleTester = new RuleTester()
4+
const { RuleTester } = require('./rule-tester')
5+
const ruleTester = new RuleTester({
6+
parserOptions: {
7+
ecmaVersion: 6,
8+
},
9+
})
610

711
const catchMessage = 'Expected catch() or return'
812
const doneMessage = 'Expected done() or return'
@@ -19,10 +23,7 @@ ruleTester.run('catch-or-return', rule, {
1923
'frank.then(to).finally(fn).catch(jail)',
2024

2125
// arrow function use case
22-
{
23-
code: 'postJSON("/smajobber/api/reportJob.json")\n\t.then(()=>this.setState())\n\t.catch(()=>this.setState())',
24-
parserOptions: { ecmaVersion: 6 },
25-
},
26+
'postJSON("/smajobber/api/reportJob.json")\n\t.then(()=>this.setState())\n\t.catch(()=>this.setState())',
2627

2728
// return
2829
'function a() { return frank().then(go) }',

__tests__/no-callback-in-promise.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict'
22

33
const rule = require('../rules/no-callback-in-promise')
4-
const RuleTester = require('eslint').RuleTester
4+
const { RuleTester } = require('./rule-tester')
55
const ruleTester = new RuleTester({
66
parserOptions: {
77
ecmaVersion: 6,

__tests__/no-multiple-resolved.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict'
22

33
const rule = require('../rules/no-multiple-resolved')
4-
const RuleTester = require('eslint').RuleTester
4+
const { RuleTester } = require('./rule-tester')
55
const ruleTester = new RuleTester({
66
parserOptions: {
77
ecmaVersion: 2020,

__tests__/no-native.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict'
22

33
const rule = require('../rules/no-native')
4-
const RuleTester = require('eslint').RuleTester
4+
const { RuleTester } = require('./rule-tester')
55
const parserOptions = {
66
ecmaVersion: 6,
77
sourceType: 'module',

__tests__/no-nesting.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict'
22

33
const rule = require('../rules/no-nesting')
4-
const RuleTester = require('eslint').RuleTester
4+
const { RuleTester } = require('./rule-tester')
55
const ruleTester = new RuleTester({
66
parserOptions: {
77
ecmaVersion: 6,

__tests__/no-new-statics.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict'
22

33
const rule = require('../rules/no-new-statics')
4-
const RuleTester = require('eslint').RuleTester
4+
const { RuleTester } = require('./rule-tester')
55
const ruleTester = new RuleTester()
66

77
ruleTester.run('no-new-statics', rule, {

__tests__/no-promise-in-callback.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict'
22

33
const rule = require('../rules/no-promise-in-callback')
4-
const RuleTester = require('eslint').RuleTester
4+
const { RuleTester } = require('./rule-tester')
55
const ruleTester = new RuleTester({
66
parserOptions: {
77
ecmaVersion: 6,

__tests__/no-return-in-finally.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use strict'
22

3-
const RuleTester = require('eslint').RuleTester
3+
const { RuleTester } = require('./rule-tester')
44
const rule = require('../rules/no-return-in-finally')
55
const ruleTester = new RuleTester({
66
parserOptions: {

__tests__/no-return-wrap.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict'
22

33
const rule = require('../rules/no-return-wrap')
4-
const RuleTester = require('eslint').RuleTester
4+
const { RuleTester } = require('./rule-tester')
55
const ruleTester = new RuleTester({
66
parserOptions: {
77
ecmaVersion: 6,

__tests__/param-names.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict'
22

33
const rule = require('../rules/param-names')
4-
const RuleTester = require('eslint').RuleTester
4+
const { RuleTester } = require('./rule-tester')
55
const ruleTester = new RuleTester({
66
parserOptions: {
77
ecmaVersion: 6,

__tests__/prefer-await-to-callbacks.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict'
22

33
const rule = require('../rules/prefer-await-to-callbacks')
4-
const RuleTester = require('eslint').RuleTester
4+
const { RuleTester } = require('./rule-tester')
55
const ruleTester = new RuleTester({
66
parserOptions: {
77
ecmaVersion: 8,

__tests__/prefer-await-to-then.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict'
22

33
const rule = require('../rules/prefer-await-to-then')
4-
const RuleTester = require('eslint').RuleTester
4+
const { RuleTester } = require('./rule-tester')
55
const ruleTester = new RuleTester({
66
parserOptions: {
77
ecmaVersion: 8,

__tests__/rule-tester.js

+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
/**
2+
* @fileoverview Helpers for tests.
3+
* @author 唯然<[email protected]>
4+
*/
5+
'use strict'
6+
const { version } = require('eslint/package.json')
7+
const { RuleTester } = require('eslint')
8+
const globals = require('globals')
9+
10+
const majorVersion = Number.parseInt(version.split('.')[0], 10)
11+
12+
function convertConfig(config) {
13+
if (config instanceof Object === false) {
14+
return config
15+
}
16+
17+
if (config.languageOptions == null) {
18+
config.languageOptions = {}
19+
}
20+
21+
if (config.parserOptions) {
22+
Object.assign(config.languageOptions, config.parserOptions)
23+
delete config.parserOptions
24+
}
25+
26+
if (typeof config.parser === 'string') {
27+
config.languageOptions.parser = require(config.parser)
28+
delete config.parser
29+
}
30+
31+
if (config.globals instanceof Object) {
32+
config.languageOptions.globals = config.globals
33+
delete config.globals
34+
}
35+
36+
if (config.env instanceof Object) {
37+
if (config.languageOptions.globals == null) {
38+
config.languageOptions.globals = {}
39+
}
40+
41+
for (const key in config.env) {
42+
Object.assign(config.languageOptions.globals, globals[key])
43+
}
44+
45+
delete config.env
46+
}
47+
48+
delete config.parserOptions
49+
delete config.parser
50+
51+
return config
52+
}
53+
54+
exports.RuleTester = function (config = {}) {
55+
if (majorVersion <= 8) {
56+
return new RuleTester(config)
57+
}
58+
59+
const ruleTester = new RuleTester(convertConfig(config))
60+
const $run = ruleTester.run.bind(ruleTester)
61+
ruleTester.run = function (name, rule, tests) {
62+
tests.valid = tests.valid.map(convertConfig)
63+
tests.invalid = tests.invalid.map(convertConfig)
64+
65+
$run(name, rule, tests)
66+
}
67+
return ruleTester
68+
}

__tests__/valid-params.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict'
22

33
const rule = require('../rules/valid-params')
4-
const RuleTester = require('eslint').RuleTester
4+
const { RuleTester } = require('./rule-tester')
55
const ruleTester = new RuleTester({
66
parserOptions: {
77
ecmaVersion: 6,

package-lock.json

+62-15
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+11-2
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,15 @@
5555
"lines": 100,
5656
"statements": 100
5757
}
58-
}
58+
},
59+
"collectCoverageFrom": [
60+
"rules/*.js",
61+
"rules/*/*.js",
62+
"!rules/lib/eslint-compat.js"
63+
],
64+
"testPathIgnorePatterns": [
65+
"__tests__/rule-tester.js"
66+
]
5967
},
6068
"devDependencies": {
6169
"@typescript-eslint/parser": "^5.45.0",
@@ -67,6 +75,7 @@
6775
"eslint-plugin-jest": "^26.9.0",
6876
"eslint-plugin-node": "^11.1.0",
6977
"eslint-plugin-prettier": "^4.2.1",
78+
"globals": "^14.0.0",
7079
"husky": "^7.0.4",
7180
"jest": "^28.1.3",
7281
"lint-staged": "^12.5.0",
@@ -75,7 +84,7 @@
7584
"typescript": "^4.9.3"
7685
},
7786
"peerDependencies": {
78-
"eslint": "^7.0.0 || ^8.0.0"
87+
"eslint": "^7.0.0 || ^8.0.0 || ^9.0.0"
7988
},
8089
"engines": {
8190
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"

0 commit comments

Comments
 (0)