Skip to content

Commit 218ebde

Browse files
authored
add eslint@9 support and flat config (#3942)
1 parent 80218f4 commit 218ebde

15 files changed

+394
-98
lines changed

.changeset/perfect-fans-hammer.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"eslint-plugin-mobx": patch
3+
---
4+
5+
add eslint@9 support and flat config

packages/eslint-plugin-mobx/README.md

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ npm install --save-dev eslint @typescript-eslint/parser eslint-plugin-mobx
1010

1111
## Configuration
1212

13+
### Legacy Config
14+
1315
```javascript
1416
// .eslintrc.js
1517
module.exports = {
@@ -24,12 +26,37 @@ module.exports = {
2426
"mobx/exhaustive-make-observable": "warn",
2527
"mobx/unconditional-make-observable": "error",
2628
"mobx/missing-make-observable": "error",
27-
"mobx/missing-observer": "warn",
28-
"mobx/no-anonymous-observer": "warn"
29+
"mobx/missing-observer": "warn"
2930
}
3031
}
3132
```
3233

34+
### Flat Config
35+
36+
```javascript
37+
// eslint.config.js
38+
import pluginMobx from "eslint-plugin-mobx"
39+
40+
export default [
41+
// ...
42+
43+
// Either extend our recommended configuration:
44+
pluginMobx.flatConfigs.recommended,
45+
46+
// ...or specify and customize individual rules:
47+
{
48+
plugins: { mobx: pluginMobx },
49+
rules: {
50+
// these values are the same as recommended
51+
"mobx/exhaustive-make-observable": "warn",
52+
"mobx/unconditional-make-observable": "error",
53+
"mobx/missing-make-observable": "error",
54+
"mobx/missing-observer": "warn"
55+
}
56+
}
57+
]
58+
```
59+
3360
## Rules
3461

3562
### mobx/exhaustive-make-observable

packages/eslint-plugin-mobx/__tests__/exhaustive-make-observable.js

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
1-
import { RuleTester } from "eslint";
1+
import { getRuleTester } from "./utils/get-rule-tester";
22

33
import rule from "../src/exhaustive-make-observable.js";
44

5-
const tester = new RuleTester({
6-
parser: require.resolve('@typescript-eslint/parser'),
7-
parserOptions: {}
8-
});
5+
const tester = getRuleTester();
96

107
const decoratedFields = [
118
'@observable o = 5',

packages/eslint-plugin-mobx/__tests__/missing-make-observable.js

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
1-
import { RuleTester } from "eslint";
1+
import { getRuleTester } from "./utils/get-rule-tester";
22

33
import rule from "../src/missing-make-observable.js";
44

5-
const tester = new RuleTester({
6-
parser: require.resolve('@typescript-eslint/parser'),
7-
parserOptions: {}
8-
});
5+
const tester = getRuleTester();
96

107
const fields = [
118
'@observable o = 5',

packages/eslint-plugin-mobx/__tests__/missing-observer.js

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
1-
import { RuleTester } from "eslint"
1+
import { getRuleTester } from "./utils/get-rule-tester";
22

33
import rule from "../src/missing-observer.js"
44

5-
const tester = new RuleTester({
6-
parser: require.resolve("@typescript-eslint/parser"),
7-
parserOptions: {}
8-
})
5+
const tester = getRuleTester();
96

107
const valids = [
118
"observer(function Named() { });",

packages/eslint-plugin-mobx/__tests__/no-anonymous-observer.js

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
1-
import { RuleTester } from "eslint"
1+
import { getRuleTester } from "./utils/get-rule-tester";
22

33
import rule from "../src/no-anonymous-observer.js"
44

5-
const tester = new RuleTester({
6-
parser: require.resolve("@typescript-eslint/parser"),
7-
parserOptions: {}
8-
})
5+
const tester = getRuleTester();
96

107
const valids = ["observer(function Name() {})", "observer(class Name {})"]
118

packages/eslint-plugin-mobx/__tests__/unconditional-make-observable.js

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
1-
import { RuleTester } from "eslint";
1+
import { getRuleTester } from "./utils/get-rule-tester";
22

33
import rule from "../src/unconditional-make-observable.js";
44

5-
const tester = new RuleTester({
6-
parser: require.resolve('@typescript-eslint/parser'),
7-
parserOptions: {}
8-
});
5+
const tester = getRuleTester();
96

107
const valid1 = {
118
code: `
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
const version = global.ESLINT_V;
2+
3+
const { RuleTester } = require(`eslint-${version}`);
4+
const typescriptEslintParser = require("@typescript-eslint/parser");
5+
6+
function getRuleTesterConfig() {
7+
switch (version) {
8+
case 7:
9+
return {
10+
parser: require.resolve("@typescript-eslint/parser"),
11+
parserOptions: {},
12+
};
13+
case 9:
14+
return {
15+
languageOptions: {
16+
parser: typescriptEslintParser,
17+
parserOptions: {},
18+
},
19+
};
20+
default:
21+
throw new Error(`Unknown or unspecified ESLINT_V (${String(version)})`);
22+
}
23+
}
24+
25+
function getRuleTester() {
26+
return new RuleTester(getRuleTesterConfig());
27+
}
28+
29+
export { getRuleTester }
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
const buildConfig = require("../../jest.base.config")
2+
3+
module.exports = buildConfig(__dirname, {
4+
displayName: 'eslint-plugin-mobx with eslint@7',
5+
setupFilesAfterEnv: ["<rootDir>/jest.setup.js"],
6+
testRegex: "__tests__/[^/]+\\.(t|j)sx?$",
7+
globals: {
8+
ESLINT_V: 7
9+
}
10+
})
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
const buildConfig = require("../../jest.base.config")
2+
3+
module.exports = buildConfig(__dirname, {
4+
displayName: 'eslint-plugin-mobx with eslint@9',
5+
setupFilesAfterEnv: ["<rootDir>/jest.setup.js"],
6+
testRegex: "__tests__/[^/]+\\.(t|j)sx?$",
7+
globals: {
8+
ESLINT_V: 9
9+
}
10+
})

0 commit comments

Comments
 (0)