generated from wopjs/template
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patheslint-plugin.js
42 lines (40 loc) · 1.11 KB
/
eslint-plugin.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
const plugin = {
meta: {
name: "eslint-plugin-disposable",
},
rules: {
"readonly-dispose": {
create(context) {
function checkProperty(node) {
context.report({
fix(fixer) {
return fixer.insertTextBefore(node, "readonly ");
},
message: `Use readonly for Disposable to avoid leaks through accidental reassignment.`,
node,
});
}
return {
"PropertyDefinition[readonly!=true][key.name=dispose][typeAnnotation.typeAnnotation.typeName.name=/Disposer|IDisposable|DisposableType|DisposableDisposer|DisposableStore|DisposableMap|DisposableOne/]":
checkProperty,
"PropertyDefinition[readonly!=true][key.name=dispose][value.type=CallExpression][value.callee.name=/disposableStore|disposableMap|disposableOne/]":
checkProperty,
};
},
meta: {
fixable: "code",
},
},
},
};
module.exports = {
plugin,
recommended: {
plugins: {
disposable: plugin,
},
rules: {
"disposable/readonly-dispose": "error",
},
},
};