Skip to content

Commit d4af3bd

Browse files
committed
Add support for namespaces and fix imports
1 parent b4fc9c4 commit d4af3bd

3 files changed

Lines changed: 314 additions & 158 deletions

File tree

Lines changed: 156 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,42 @@
1-
import { RuleTester } from "eslint";
1+
import { RuleTester } from "eslint"
22

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

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

1010
const fields = [
11-
'@observable o = 5',
12-
'@observable.ref or = []',
13-
'@observable.shallow os = []',
14-
'@observable.deep od = {}',
15-
'@computed get c() {}',
16-
'@computed.struct get cs() {}',
17-
'@computed({ equals }) get co() {}',
18-
'@action a() {}',
19-
'@action.bound ab() {}',
20-
'@flow *f() {}',
21-
'@flow.bound *fb() {}',
22-
];
23-
24-
const valid1 = fields.map(field => `
11+
"observable o = 5",
12+
"observable.ref or = []",
13+
"observable.shallow os = []",
14+
"observable.deep od = {}",
15+
"computed get c() {}",
16+
"computed.struct get cs() {}",
17+
"computed({ equals }) get co() {}",
18+
"action a() {}",
19+
"action.bound ab() {}",
20+
"flow *f() {}",
21+
"flow.bound *fb() {}"
22+
]
23+
24+
const valid1 = fields
25+
.map(
26+
field => `
2527
class C {
26-
${field}
28+
@${field}
2729
2830
constructor() {
2931
makeObservable(this)
3032
}
3133
}
32-
`).map(code => ({ code }))
34+
`
35+
)
36+
.map(code => ({ code }))
3337

3438
const valid2 = {
35-
code: `
39+
code: `
3640
class C {
3741
o = 5;
3842
get c() {};
@@ -46,131 +50,204 @@ class C {
4650
`
4751
}
4852

49-
const valid3 = fields.map(field => `
53+
const valid3 = fields
54+
.map(
55+
field => `
5056
class C {
51-
${field}
57+
@${field}
5258
5359
constructor() {
5460
makeObservable(this, null, { name: 'foo' })
5561
}
5662
}
57-
`).map(code => ({ code }))
63+
`
64+
)
65+
.map(code => ({ code }))
5866

59-
const valid4 = fields.map(field => `
67+
const valid4 = fields
68+
.map(
69+
field => `
6070
class C {
61-
${field}
71+
@${field}
6272
6373
constructor(aString: string);
6474
constructor(aNum: number);
6575
constructor(stringOrNum: string | number) {
6676
makeObservable(this, null, { name: 'foo' })
6777
}
6878
}
69-
`).map(code => ({ code }))
79+
`
80+
)
81+
.map(code => ({ code }))
7082

7183
const invalid1 = fields.map(field => ({
72-
code: `
84+
code: `
7385
class C {
74-
${field}
86+
@${field}
7587
}
7688
`,
77-
errors: [
78-
{ messageId: 'missingMakeObservable' },
79-
],
80-
output: `
89+
errors: [{ messageId: "missingMakeObservable" }],
90+
output: `
8191
class C {
8292
constructor() { makeObservable(this); }
83-
${field}
93+
@${field}
8494
}
8595
`
8696
}))
8797

8898
const invalid2 = fields.map(field => ({
89-
code: `
99+
code: `
90100
class C {
91-
${field}
101+
@${field}
92102
constructor() {}
93103
}
94104
`,
95-
errors: [
96-
{ messageId: 'missingMakeObservable' },
97-
],
98-
output: `
105+
errors: [{ messageId: "missingMakeObservable" }],
106+
output: `
99107
class C {
100-
${field}
108+
@${field}
101109
constructor() {;makeObservable(this);}
102110
}
103-
`,
111+
`
104112
}))
105113

106114
const invalid3 = fields.map(field => ({
107-
code: `
115+
code: `
108116
class C {
109-
${field}
117+
@${field}
110118
constructor() {
111119
makeObservable({ a: 5 });
112120
}
113121
}
114122
`,
115-
errors: [
116-
{ messageId: 'missingMakeObservable' },
117-
],
118-
output: `
123+
errors: [{ messageId: "missingMakeObservable" }],
124+
output: `
119125
class C {
120-
${field}
126+
@${field}
121127
constructor() {
122128
makeObservable({ a: 5 });
123129
;makeObservable(this);}
124130
}
125-
`,
131+
`
126132
}))
127133

128134
const invalid4 = fields.map(field => ({
129-
code: `
135+
code: `
130136
class C {
131-
${field}
137+
@${field}
132138
constructor()
133139
}
134140
`,
135-
errors: [
136-
{ messageId: 'missingMakeObservable' },
137-
],
138-
output: `
141+
errors: [{ messageId: "missingMakeObservable" }],
142+
output: `
139143
class C {
140-
${field}
144+
@${field}
141145
constructor() { makeObservable(this); }
142146
}
143-
`,
147+
`
144148
}))
145149

146-
147150
const invalid5 = fields.map(field => ({
148-
code: `
151+
code: `
149152
class C {
150-
${field}
153+
@${field}
151154
constructor() {
152155
makeObservable(this, { o: observable.ref });
153156
}
154157
}
155158
`,
156-
errors: [
157-
{ messageId: 'secondArgMustBeNullish' },
158-
],
159+
errors: [{ messageId: "secondArgMustBeNullish" }]
160+
}))
161+
162+
const invalid6 = fields.map(field => ({
163+
code: `
164+
import * as mobx from 'mobx';
165+
166+
class C {
167+
@mobx.${field}
168+
}
169+
`,
170+
errors: [{ messageId: "missingMakeObservable" }],
171+
output: `
172+
import * as mobx from 'mobx';
173+
174+
class C {
175+
constructor() { mobx.makeObservable(this); }
176+
@mobx.${field}
177+
}
178+
`
179+
}))
180+
181+
const invalid7 = fields.map(field => ({
182+
code: `
183+
import { foo } from 'mobx';
184+
185+
class C {
186+
@${field}
187+
}
188+
`,
189+
errors: [{ messageId: "missingMakeObservable" }],
190+
output: `
191+
import { foo, makeObservable } from 'mobx';
192+
193+
class C {
194+
constructor() { makeObservable(this); }
195+
@${field}
196+
}
197+
`
159198
}))
160199

200+
const invalid8 = fields.map(field => ({
201+
code: `
202+
import { foo } from 'mobx';
203+
import * as mobx from 'mobx';
204+
205+
class C {
206+
@mobx.${field}
207+
}
208+
`,
209+
errors: [{ messageId: "missingMakeObservable" }],
210+
output: `
211+
import { foo } from 'mobx';
212+
import * as mobx from 'mobx';
213+
214+
class C {
215+
constructor() { mobx.makeObservable(this); }
216+
@mobx.${field}
217+
}
218+
`
219+
}))
220+
221+
const invalid9 = fields.map(field => ({
222+
code: `
223+
import { makeObservable as makeBanana } from 'mobx';
224+
225+
class C {
226+
@${field}
227+
}
228+
`,
229+
errors: [{ messageId: "missingMakeObservable" }],
230+
output: `
231+
import { makeObservable as makeBanana } from 'mobx';
232+
233+
class C {
234+
constructor() { makeBanana(this); }
235+
@${field}
236+
}
237+
`
238+
}))
161239

162240
tester.run("missing-make-observable", rule, {
163-
valid: [
164-
...valid1,
165-
valid2,
166-
...valid3,
167-
...valid4,
168-
],
169-
invalid: [
170-
...invalid1,
171-
...invalid2,
172-
...invalid3,
173-
...invalid4,
174-
...invalid5,
175-
],
176-
});
241+
valid: [...valid1, valid2, ...valid3, ...valid4],
242+
invalid: [
243+
...invalid1,
244+
...invalid2,
245+
...invalid3,
246+
...invalid4,
247+
...invalid5,
248+
...invalid6,
249+
...invalid7,
250+
...invalid8,
251+
...invalid9
252+
]
253+
})

0 commit comments

Comments
 (0)