eslint-plugin-effector 0.10.5 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.nvmrc +1 -1
- package/package.json +3 -2
- package/rules/enforce-effect-naming-convention/enforce-effect-naming-convention.js +9 -2
- package/rules/enforce-gate-naming-convention/enforce-gate-naming-convention.js +10 -2
- package/rules/enforce-store-naming-convention/enforce-store-naming-convention.js +9 -2
- package/rules/mandatory-scope-binding/mandatory-scope-binding.js +9 -2
- package/rules/no-watch/no-watch.js +10 -2
- package/utils/get-corrected-store-name.js +31 -7
- package/utils/is.js +10 -1
- package/utils/naming.js +1 -1
- package/utils/node-type-is.js +5 -2
- package/docs/.vitepress/config.js +0 -58
- package/docs/.vitepress/dist/404.html +0 -19
- package/docs/.vitepress/dist/assets/app.c5be1f68.js +0 -7
- package/docs/.vitepress/dist/assets/index.md.79361962.js +0 -1
- package/docs/.vitepress/dist/assets/index.md.79361962.lean.js +0 -1
- package/docs/.vitepress/dist/assets/inter-cyrillic-ext.0877b0d9.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-cyrillic.f8750142.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-greek-ext.3e6f6728.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-greek.117e1956.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-italic-cyrillic-ext.33bd5a8e.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-italic-cyrillic.ea42a392.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-italic-greek-ext.4fbe9427.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-italic-greek.8f4463c4.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-italic-latin-ext.bd8920cc.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-italic-latin.bd3b6f56.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-italic-vietnamese.6ce511fb.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-latin-ext.7cc429bc.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-latin.4fe6132f.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-roman-cyrillic-ext.e75737ce.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-roman-cyrillic.5f2c6c8c.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-roman-greek-ext.ab0619bc.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-roman-greek.d5a6d92a.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-roman-latin-ext.0030eebd.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-roman-latin.2ed14f66.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-roman-vietnamese.14ce25a6.woff2 +0 -0
- package/docs/.vitepress/dist/assets/inter-vietnamese.2c644a25.woff2 +0 -0
- package/docs/.vitepress/dist/assets/presets___future.md.6542932d.js +0 -1
- package/docs/.vitepress/dist/assets/presets___future.md.6542932d.lean.js +0 -1
- package/docs/.vitepress/dist/assets/presets___index.md.af77aa24.js +0 -1
- package/docs/.vitepress/dist/assets/presets___index.md.af77aa24.lean.js +0 -1
- package/docs/.vitepress/dist/assets/presets___list.md.86dea8af.js +0 -1
- package/docs/.vitepress/dist/assets/presets___list.md.86dea8af.lean.js +0 -1
- package/docs/.vitepress/dist/assets/presets___patronum.md.9f3ad5fe.js +0 -1
- package/docs/.vitepress/dist/assets/presets___patronum.md.9f3ad5fe.lean.js +0 -1
- package/docs/.vitepress/dist/assets/presets___react.md.dc2cc31a.js +0 -1
- package/docs/.vitepress/dist/assets/presets___react.md.dc2cc31a.lean.js +0 -1
- package/docs/.vitepress/dist/assets/presets___recommended.md.af826424.js +0 -1
- package/docs/.vitepress/dist/assets/presets___recommended.md.af826424.lean.js +0 -1
- package/docs/.vitepress/dist/assets/presets___scope.md.e5dd9837.js +0 -1
- package/docs/.vitepress/dist/assets/presets___scope.md.e5dd9837.lean.js +0 -1
- package/docs/.vitepress/dist/assets/presets_future.md.2962dd38.js +0 -1
- package/docs/.vitepress/dist/assets/presets_future.md.2962dd38.lean.js +0 -1
- package/docs/.vitepress/dist/assets/presets_index.md.c3c40451.js +0 -1
- package/docs/.vitepress/dist/assets/presets_index.md.c3c40451.lean.js +0 -1
- package/docs/.vitepress/dist/assets/presets_patronum.md.58445698.js +0 -1
- package/docs/.vitepress/dist/assets/presets_patronum.md.58445698.lean.js +0 -1
- package/docs/.vitepress/dist/assets/presets_react.md.fda31c90.js +0 -1
- package/docs/.vitepress/dist/assets/presets_react.md.fda31c90.lean.js +0 -1
- package/docs/.vitepress/dist/assets/presets_recommended.md.396d0c01.js +0 -1
- package/docs/.vitepress/dist/assets/presets_recommended.md.396d0c01.lean.js +0 -1
- package/docs/.vitepress/dist/assets/presets_scope.md.55da3541.js +0 -1
- package/docs/.vitepress/dist/assets/presets_scope.md.55da3541.lean.js +0 -1
- package/docs/.vitepress/dist/assets/rules___index.md.c943fc87.js +0 -1
- package/docs/.vitepress/dist/assets/rules___index.md.c943fc87.lean.js +0 -1
- package/docs/.vitepress/dist/assets/rules___list.md.ba316f20.js +0 -1
- package/docs/.vitepress/dist/assets/rules___list.md.ba316f20.lean.js +0 -1
- package/docs/.vitepress/dist/assets/rules_enforce-effect-naming-convention.md.09e5af2c.js +0 -6
- package/docs/.vitepress/dist/assets/rules_enforce-effect-naming-convention.md.09e5af2c.lean.js +0 -1
- package/docs/.vitepress/dist/assets/rules_enforce-gate-naming-convention.md.5f3af41a.js +0 -6
- package/docs/.vitepress/dist/assets/rules_enforce-gate-naming-convention.md.5f3af41a.lean.js +0 -1
- package/docs/.vitepress/dist/assets/rules_enforce-store-naming-convention.md.db33b9cb.js +0 -26
- package/docs/.vitepress/dist/assets/rules_enforce-store-naming-convention.md.db33b9cb.lean.js +0 -1
- package/docs/.vitepress/dist/assets/rules_index.md.3e915bb2.js +0 -1
- package/docs/.vitepress/dist/assets/rules_index.md.3e915bb2.lean.js +0 -1
- package/docs/.vitepress/dist/assets/rules_keep-options-order.md.5345093b.js +0 -16
- package/docs/.vitepress/dist/assets/rules_keep-options-order.md.5345093b.lean.js +0 -1
- package/docs/.vitepress/dist/assets/rules_mandatory-scope-binding.md.aff04a66.js +0 -14
- package/docs/.vitepress/dist/assets/rules_mandatory-scope-binding.md.aff04a66.lean.js +0 -1
- package/docs/.vitepress/dist/assets/rules_no-ambiguity-target.md.7fde769b.js +0 -7
- package/docs/.vitepress/dist/assets/rules_no-ambiguity-target.md.7fde769b.lean.js +0 -1
- package/docs/.vitepress/dist/assets/rules_no-duplicate-on.md.09525e1d.js +0 -11
- package/docs/.vitepress/dist/assets/rules_no-duplicate-on.md.09525e1d.lean.js +0 -1
- package/docs/.vitepress/dist/assets/rules_no-forward.md.2becbf92.js +0 -11
- package/docs/.vitepress/dist/assets/rules_no-forward.md.2becbf92.lean.js +0 -1
- package/docs/.vitepress/dist/assets/rules_no-getState.md.665d0467.js +0 -15
- package/docs/.vitepress/dist/assets/rules_no-getState.md.665d0467.lean.js +0 -1
- package/docs/.vitepress/dist/assets/rules_no-guard.md.5056c7b6.js +0 -22
- package/docs/.vitepress/dist/assets/rules_no-guard.md.5056c7b6.lean.js +0 -1
- package/docs/.vitepress/dist/assets/rules_no-patronum-debug.md.19f444fb.js +0 -14
- package/docs/.vitepress/dist/assets/rules_no-patronum-debug.md.19f444fb.lean.js +0 -1
- package/docs/.vitepress/dist/assets/rules_no-unnecessary-combination.md.e7221074.js +0 -20
- package/docs/.vitepress/dist/assets/rules_no-unnecessary-combination.md.e7221074.lean.js +0 -1
- package/docs/.vitepress/dist/assets/rules_no-unnecessary-duplication.md.3a99556b.js +0 -27
- package/docs/.vitepress/dist/assets/rules_no-unnecessary-duplication.md.3a99556b.lean.js +0 -1
- package/docs/.vitepress/dist/assets/rules_no-useless-methods.md.e13dc29f.js +0 -9
- package/docs/.vitepress/dist/assets/rules_no-useless-methods.md.e13dc29f.lean.js +0 -1
- package/docs/.vitepress/dist/assets/rules_no-watch.md.72ac4d86.js +0 -35
- package/docs/.vitepress/dist/assets/rules_no-watch.md.72ac4d86.lean.js +0 -1
- package/docs/.vitepress/dist/assets/rules_prefer-sample-over-forward-with-mapping.md.e5a7f363.js +0 -22
- package/docs/.vitepress/dist/assets/rules_prefer-sample-over-forward-with-mapping.md.e5a7f363.lean.js +0 -1
- package/docs/.vitepress/dist/assets/rules_prefer-useUnit.md.2d27cecd.js +0 -28
- package/docs/.vitepress/dist/assets/rules_prefer-useUnit.md.2d27cecd.lean.js +0 -1
- package/docs/.vitepress/dist/assets/rules_strict-effect-handlers.md.2f8965e2.js +0 -23
- package/docs/.vitepress/dist/assets/rules_strict-effect-handlers.md.2f8965e2.lean.js +0 -1
- package/docs/.vitepress/dist/assets/style.9e7714f0.css +0 -1
- package/docs/.vitepress/dist/hashmap.json +0 -1
- package/docs/.vitepress/dist/index.html +0 -20
- package/docs/.vitepress/dist/presets/__future.html +0 -20
- package/docs/.vitepress/dist/presets/__index.html +0 -20
- package/docs/.vitepress/dist/presets/__list.html +0 -20
- package/docs/.vitepress/dist/presets/__patronum.html +0 -20
- package/docs/.vitepress/dist/presets/__react.html +0 -20
- package/docs/.vitepress/dist/presets/__recommended.html +0 -20
- package/docs/.vitepress/dist/presets/__scope.html +0 -20
- package/docs/.vitepress/dist/presets/future.html +0 -20
- package/docs/.vitepress/dist/presets/index.html +0 -20
- package/docs/.vitepress/dist/presets/patronum.html +0 -20
- package/docs/.vitepress/dist/presets/react.html +0 -20
- package/docs/.vitepress/dist/presets/recommended.html +0 -20
- package/docs/.vitepress/dist/presets/scope.html +0 -20
- package/docs/.vitepress/dist/rules/__index.html +0 -20
- package/docs/.vitepress/dist/rules/__list.html +0 -20
- package/docs/.vitepress/dist/rules/enforce-effect-naming-convention.html +0 -25
- package/docs/.vitepress/dist/rules/enforce-gate-naming-convention.html +0 -25
- package/docs/.vitepress/dist/rules/enforce-store-naming-convention.html +0 -45
- package/docs/.vitepress/dist/rules/index.html +0 -20
- package/docs/.vitepress/dist/rules/keep-options-order.html +0 -35
- package/docs/.vitepress/dist/rules/mandatory-scope-binding.html +0 -33
- package/docs/.vitepress/dist/rules/no-ambiguity-target.html +0 -26
- package/docs/.vitepress/dist/rules/no-duplicate-on.html +0 -30
- package/docs/.vitepress/dist/rules/no-forward.html +0 -30
- package/docs/.vitepress/dist/rules/no-getState.html +0 -34
- package/docs/.vitepress/dist/rules/no-guard.html +0 -41
- package/docs/.vitepress/dist/rules/no-patronum-debug.html +0 -33
- package/docs/.vitepress/dist/rules/no-unnecessary-combination.html +0 -39
- package/docs/.vitepress/dist/rules/no-unnecessary-duplication.html +0 -46
- package/docs/.vitepress/dist/rules/no-useless-methods.html +0 -28
- package/docs/.vitepress/dist/rules/no-watch.html +0 -54
- package/docs/.vitepress/dist/rules/prefer-sample-over-forward-with-mapping.html +0 -41
- package/docs/.vitepress/dist/rules/prefer-useUnit.html +0 -47
- package/docs/.vitepress/dist/rules/strict-effect-handlers.html +0 -42
- package/docs/.vitepress/theme/custom.css +0 -8
- package/docs/.vitepress/theme/index.js +0 -4
- package/docs/public/apple-touch-icon.png +0 -0
- package/docs/public/comet-192.png +0 -0
- package/docs/public/comet-512.png +0 -0
- package/docs/public/comet.svg +0 -228
- package/docs/public/favicon.ico +0 -0
- package/docs/public/manifest.webmanifest +0 -6
package/.nvmrc
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
18.12
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eslint-plugin-effector",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"description": "Enforcing best practices for Effector",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"eslint",
|
|
@@ -12,11 +12,12 @@
|
|
|
12
12
|
"main": "index.js",
|
|
13
13
|
"author": "Igor Kamyshev <igor@kamyshev.me>",
|
|
14
14
|
"license": "MIT",
|
|
15
|
+
"packageManager": "pnpm@8.10.5",
|
|
15
16
|
"publishConfig": {
|
|
16
17
|
"access": "public"
|
|
17
18
|
},
|
|
18
19
|
"engines": {
|
|
19
|
-
"node": "^
|
|
20
|
+
"node": "^16 || ^17 || ^18 || ^19 || ^20"
|
|
20
21
|
},
|
|
21
22
|
"peerDependencies": {
|
|
22
23
|
"effector": "*",
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
const { ESLintUtils } = require("@typescript-eslint/utils");
|
|
2
|
+
|
|
1
3
|
const { extractImportedFrom } = require("../../utils/extract-imported-from");
|
|
2
4
|
const { createLinkToRule } = require("../../utils/create-link-to-rule");
|
|
3
5
|
const { nodeTypeIs } = require("../../utils/node-type-is");
|
|
@@ -22,9 +24,14 @@ module.exports = {
|
|
|
22
24
|
hasSuggestions: true,
|
|
23
25
|
},
|
|
24
26
|
create(context) {
|
|
25
|
-
|
|
27
|
+
let parserServices;
|
|
28
|
+
try {
|
|
29
|
+
parserServices = ESLintUtils.getParserServices(context);
|
|
30
|
+
} catch (err) {
|
|
31
|
+
// no types information
|
|
32
|
+
}
|
|
26
33
|
// TypeScript-way
|
|
27
|
-
if (parserServices
|
|
34
|
+
if (parserServices?.program) {
|
|
28
35
|
return {
|
|
29
36
|
VariableDeclarator(node) {
|
|
30
37
|
const isEffectorEffect = nodeTypeIs.effect({
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
const { ESLintUtils } = require("@typescript-eslint/utils");
|
|
2
|
+
|
|
1
3
|
const { extractImportedFrom } = require("../../utils/extract-imported-from");
|
|
2
4
|
const { nodeTypeIs } = require("../../utils/node-type-is");
|
|
3
5
|
const { createLinkToRule } = require("../../utils/create-link-to-rule");
|
|
@@ -21,9 +23,15 @@ module.exports = {
|
|
|
21
23
|
hasSuggestions: true,
|
|
22
24
|
},
|
|
23
25
|
create(context) {
|
|
24
|
-
|
|
26
|
+
let parserServices;
|
|
27
|
+
try {
|
|
28
|
+
parserServices = ESLintUtils.getParserServices(context);
|
|
29
|
+
} catch (err) {
|
|
30
|
+
// no types information
|
|
31
|
+
}
|
|
32
|
+
|
|
25
33
|
// TypeScript-way
|
|
26
|
-
if (parserServices
|
|
34
|
+
if (parserServices?.program) {
|
|
27
35
|
return {
|
|
28
36
|
VariableDeclarator(node) {
|
|
29
37
|
const isEffectorGate = nodeTypeIs.gate({
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
const { ESLintUtils } = require("@typescript-eslint/utils");
|
|
2
|
+
|
|
1
3
|
const { extractImportedFrom } = require("../../utils/extract-imported-from");
|
|
2
4
|
const { namingOf } = require("../../utils/naming");
|
|
3
5
|
const {
|
|
@@ -32,12 +34,17 @@ module.exports = {
|
|
|
32
34
|
hasSuggestions: true,
|
|
33
35
|
},
|
|
34
36
|
create(context) {
|
|
35
|
-
|
|
37
|
+
let parserServices;
|
|
38
|
+
try {
|
|
39
|
+
parserServices = ESLintUtils.getParserServices(context);
|
|
40
|
+
} catch (err) {
|
|
41
|
+
// no types information
|
|
42
|
+
}
|
|
36
43
|
|
|
37
44
|
validateStoreNameConvention(context);
|
|
38
45
|
|
|
39
46
|
// TypeScript-way
|
|
40
|
-
if (parserServices
|
|
47
|
+
if (parserServices?.program) {
|
|
41
48
|
return {
|
|
42
49
|
VariableDeclarator(node) {
|
|
43
50
|
const isEffectorStore = nodeTypeIs.store({
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
const { ESLintUtils } = require("@typescript-eslint/utils");
|
|
2
|
+
|
|
1
3
|
const { createLinkToRule } = require("../../utils/create-link-to-rule");
|
|
2
4
|
const { isInsideReactComponent } = require("../../utils/react");
|
|
3
5
|
const { nodeTypeIs } = require("../../utils/node-type-is");
|
|
@@ -21,10 +23,15 @@ module.exports = {
|
|
|
21
23
|
schema: [],
|
|
22
24
|
},
|
|
23
25
|
create(context) {
|
|
24
|
-
|
|
26
|
+
let parserServices;
|
|
27
|
+
try {
|
|
28
|
+
parserServices = ESLintUtils.getParserServices(context);
|
|
29
|
+
} catch (err) {
|
|
30
|
+
// no types information
|
|
31
|
+
}
|
|
25
32
|
|
|
26
33
|
// TypeScript-only rule, since units can be imported from anywhere
|
|
27
|
-
if (!parserServices
|
|
34
|
+
if (!parserServices?.program) {
|
|
28
35
|
return {};
|
|
29
36
|
}
|
|
30
37
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
const { ESLintUtils } = require("@typescript-eslint/utils");
|
|
2
|
+
|
|
1
3
|
const {
|
|
2
4
|
traverseNestedObjectNode,
|
|
3
5
|
} = require("../../utils/traverse-nested-object-node");
|
|
@@ -20,8 +22,14 @@ module.exports = {
|
|
|
20
22
|
schema: [],
|
|
21
23
|
},
|
|
22
24
|
create(context) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
+
let parserServices;
|
|
26
|
+
try {
|
|
27
|
+
parserServices = ESLintUtils.getParserServices(context);
|
|
28
|
+
} catch (err) {
|
|
29
|
+
// no types information
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if (!parserServices?.program) {
|
|
25
33
|
// JavaScript-way https://github.com/effector/eslint-plugin/issues/48#issuecomment-931107829
|
|
26
34
|
return {};
|
|
27
35
|
}
|
|
@@ -5,17 +5,41 @@ function getCorrectedStoreName(storeName, context) {
|
|
|
5
5
|
|
|
6
6
|
// handle edge case
|
|
7
7
|
if (storeName.startsWith("$") && storeName.endsWith("$")) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
} else {
|
|
11
|
-
return `${storeName.slice(1)}$`;
|
|
12
|
-
}
|
|
8
|
+
const storeNameWithoutConvention = trimByPattern(storeName, "$");
|
|
9
|
+
return formatStoreName(storeNameWithoutConvention, storeNameConvention);
|
|
13
10
|
}
|
|
14
11
|
|
|
15
|
-
const correctedStoreName =
|
|
16
|
-
storeNameConvention === "prefix" ? `$${storeName}` : `${storeName}$`;
|
|
12
|
+
const correctedStoreName = formatStoreName(storeName, storeNameConvention);
|
|
17
13
|
|
|
18
14
|
return correctedStoreName;
|
|
19
15
|
}
|
|
20
16
|
|
|
17
|
+
function formatStoreName(storeName, convention) {
|
|
18
|
+
return convention === "prefix" ? `$${storeName}` : `${storeName}$`;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function trimByPattern(s, template) {
|
|
22
|
+
let l = 0,
|
|
23
|
+
r = s.length - 1;
|
|
24
|
+
|
|
25
|
+
while (l <= r) {
|
|
26
|
+
const head = s[l];
|
|
27
|
+
const tail = s[r];
|
|
28
|
+
|
|
29
|
+
if (head === template) {
|
|
30
|
+
l++;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
if (tail === template) {
|
|
34
|
+
r--;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
if (head !== template && tail !== template) {
|
|
38
|
+
return s.slice(l, r + 1);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return s;
|
|
43
|
+
}
|
|
44
|
+
|
|
21
45
|
module.exports = { getCorrectedStoreName };
|
package/utils/is.js
CHANGED
|
@@ -1,9 +1,18 @@
|
|
|
1
|
+
const { ESLintUtils } = require("@typescript-eslint/utils");
|
|
2
|
+
|
|
1
3
|
const { nodeTypeIs } = require("./node-type-is");
|
|
2
4
|
const { namingOf } = require("./naming");
|
|
3
5
|
|
|
4
6
|
function isSomething({ isValidNaming, isTypeCorrect }) {
|
|
5
7
|
return ({ node, context }) => {
|
|
6
|
-
|
|
8
|
+
let parserServices;
|
|
9
|
+
try {
|
|
10
|
+
parserServices = ESLintUtils.getParserServices(context);
|
|
11
|
+
} catch (e) {
|
|
12
|
+
// no types info
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
if (parserServices?.program) {
|
|
7
16
|
return isTypeCorrect({ node, context });
|
|
8
17
|
}
|
|
9
18
|
|
package/utils/naming.js
CHANGED
|
@@ -14,7 +14,7 @@ function isStoreNameValid({ name, context }) {
|
|
|
14
14
|
const storeNameConvention = getStoreNameConvention(context);
|
|
15
15
|
|
|
16
16
|
// validate edge case
|
|
17
|
-
if (name?.startsWith("$") && name?.endsWith("$")) {
|
|
17
|
+
if (name?.length > 1 && name?.startsWith("$") && name?.endsWith("$")) {
|
|
18
18
|
return false;
|
|
19
19
|
}
|
|
20
20
|
|
package/utils/node-type-is.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
const { ESLintUtils } = require('@typescript-eslint/utils');
|
|
2
|
+
|
|
1
3
|
function hasType({ node, possibleTypes, context, from }) {
|
|
2
4
|
try {
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
+
const parserServices = ESLintUtils.getParserServices(context);
|
|
6
|
+
const checker = parserServices.program.getTypeChecker();
|
|
7
|
+
const originalNode = parserServices.esTreeNodeToTSNodeMap.get(node);
|
|
5
8
|
const type = checker.getTypeAtLocation(
|
|
6
9
|
originalNode?.initializer ?? originalNode
|
|
7
10
|
);
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
export default {
|
|
2
|
-
lang: "en-US",
|
|
3
|
-
title: "ESLint plugin for Effector",
|
|
4
|
-
description: "Enforcing best practices for Effector",
|
|
5
|
-
lastUpdated: true,
|
|
6
|
-
head: [
|
|
7
|
-
["link", { rel: "icon", href: "/favicon.ico", sizes: "any" }],
|
|
8
|
-
["link", { rel: "icon", href: "/comet.svg", type: "image/svg+xml" }],
|
|
9
|
-
["link", { rel: "apple-touch-icon", href: "/apple-touch-icon.png" }],
|
|
10
|
-
["link", { rel: "manifest", href: "/manifest.webmanifest" }],
|
|
11
|
-
],
|
|
12
|
-
themeConfig: {
|
|
13
|
-
siteTitle: "ESLint plugin for Effector",
|
|
14
|
-
logo: "/comet.svg",
|
|
15
|
-
footer: {
|
|
16
|
-
message: "Released under the MIT License.",
|
|
17
|
-
},
|
|
18
|
-
socialLinks: [
|
|
19
|
-
{ icon: "github", link: "https://github.com/effector/eslint-plugin" },
|
|
20
|
-
{ icon: "twitter", link: "https://twitter.com/effectorjs" },
|
|
21
|
-
],
|
|
22
|
-
algolia: {
|
|
23
|
-
appId: "NW4641ANOK",
|
|
24
|
-
apiKey: "82a2fcdc603a1de18478e1c461450168",
|
|
25
|
-
indexName: "eslint-effector",
|
|
26
|
-
},
|
|
27
|
-
editLink: {
|
|
28
|
-
pattern:
|
|
29
|
-
"https://github.com/effector/eslint-plugin/edit/master/docs/:path",
|
|
30
|
-
},
|
|
31
|
-
nav: [
|
|
32
|
-
{
|
|
33
|
-
text: "Presets",
|
|
34
|
-
link: "/presets/",
|
|
35
|
-
activeMatch: "^/presets/",
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
text: "Rules",
|
|
39
|
-
link: "/rules/",
|
|
40
|
-
activeMatch: "^/rules/",
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
text: "More",
|
|
44
|
-
items: [
|
|
45
|
-
{
|
|
46
|
-
text: "Changelog",
|
|
47
|
-
link: "/changelog",
|
|
48
|
-
},
|
|
49
|
-
{
|
|
50
|
-
text: "Effector",
|
|
51
|
-
link: "https://effector.dev",
|
|
52
|
-
},
|
|
53
|
-
],
|
|
54
|
-
},
|
|
55
|
-
],
|
|
56
|
-
sidebar: {},
|
|
57
|
-
},
|
|
58
|
-
};
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en-US">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
6
|
-
<title>404 | ESLint plugin for Effector</title>
|
|
7
|
-
<meta name="description" content="Not Found">
|
|
8
|
-
<link rel="stylesheet" href="/assets/style.9e7714f0.css">
|
|
9
|
-
<link rel="modulepreload" href="/assets/app.c5be1f68.js">
|
|
10
|
-
|
|
11
|
-
<script id="check-dark-light">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
|
|
12
|
-
</head>
|
|
13
|
-
<body>
|
|
14
|
-
<div id="app"><div class="Layout" data-v-5236d721><!--[--><!--]--><!--[--><span tabindex="-1" data-v-ba282093></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-ba282093> Skip to content </a><!--]--><!----><header class="VPNav no-sidebar" data-v-5236d721 data-v-ad1d1a51><div class="VPNavBar" data-v-ad1d1a51 data-v-5c544ded><div class="container" data-v-5c544ded><div class="VPNavBarTitle" data-v-5c544ded data-v-de342594><a class="title" href="/" data-v-de342594><!--[--><!--]--><!----><!--[-->ESLint plugin for Effector<!--]--><!--[--><!--]--></a></div><div class="content" data-v-5c544ded><!--[--><!--]--><!----><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-5c544ded data-v-bbd7bba4><span id="main-nav-aria-label" class="visually-hidden" data-v-bbd7bba4>Main Navigation</span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/presets/" data-v-bbd7bba4 data-v-f2e87c9b data-v-43d5b194><!--[-->Presets<!--]--><!----></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/rules/" data-v-bbd7bba4 data-v-f2e87c9b data-v-43d5b194><!--[-->Rules<!--]--><!----></a><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-5c544ded data-v-b18b5f44><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" aria-label="toggle dark mode" aria-checked="false" data-v-b18b5f44 data-v-910d4043 data-v-6fb6d0ff><span class="check" data-v-6fb6d0ff><span class="icon" data-v-6fb6d0ff><!--[--><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="sun" data-v-910d4043><path d="M12,18c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6S15.3,18,12,18zM12,8c-2.2,0-4,1.8-4,4c0,2.2,1.8,4,4,4c2.2,0,4-1.8,4-4C16,9.8,14.2,8,12,8z"></path><path d="M12,4c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,3.6,12.6,4,12,4z"></path><path d="M12,24c-0.6,0-1-0.4-1-1v-2c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,23.6,12.6,24,12,24z"></path><path d="M5.6,6.6c-0.3,0-0.5-0.1-0.7-0.3L3.5,4.9c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C6.2,6.5,5.9,6.6,5.6,6.6z"></path><path d="M19.8,20.8c-0.3,0-0.5-0.1-0.7-0.3l-1.4-1.4c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C20.3,20.7,20,20.8,19.8,20.8z"></path><path d="M3,13H1c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S3.6,13,3,13z"></path><path d="M23,13h-2c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S23.6,13,23,13z"></path><path d="M4.2,20.8c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C4.7,20.7,4.5,20.8,4.2,20.8z"></path><path d="M18.4,6.6c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C18.9,6.5,18.6,6.6,18.4,6.6z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="moon" data-v-910d4043><path d="M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"></path></svg><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-5c544ded data-v-ec2bb10b data-v-bb87c15e><!--[--><a class="VPSocialLink" href="https://github.com/effector/eslint-plugin" target="_blank" rel="noopener" data-v-bb87c15e data-v-9dcd5acc><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg></a><a class="VPSocialLink" href="https://twitter.com/effectorjs" target="_blank" rel="noopener" data-v-bb87c15e data-v-9dcd5acc><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Twitter</title><path d="M23.953 4.57a10 10 0 01-2.825.775 4.958 4.958 0 002.163-2.723c-.951.555-2.005.959-3.127 1.184a4.92 4.92 0 00-8.384 4.482C7.69 8.095 4.067 6.13 1.64 3.162a4.822 4.822 0 00-.666 2.475c0 1.71.87 3.213 2.188 4.096a4.904 4.904 0 01-2.228-.616v.06a4.923 4.923 0 003.946 4.827 4.996 4.996 0 01-2.212.085 4.936 4.936 0 004.604 3.417 9.867 9.867 0 01-6.102 2.105c-.39 0-.779-.023-1.17-.067a13.995 13.995 0 007.557 2.209c9.053 0 13.998-7.496 13.998-13.985 0-.21 0-.42-.015-.63A9.935 9.935 0 0024 4.59z"/></svg></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-5c544ded data-v-231001ce data-v-1da9cf42><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-1da9cf42><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="icon" data-v-1da9cf42><circle cx="12" cy="12" r="2"></circle><circle cx="19" cy="12" r="2"></circle><circle cx="5" cy="12" r="2"></circle></svg></button><div class="menu" data-v-1da9cf42><div class="VPMenu" data-v-1da9cf42 data-v-54f41434><!----><!--[--><!--[--><!----><div class="group" data-v-231001ce><div class="item appearance" data-v-231001ce><p class="label" data-v-231001ce>Appearance</p><div class="appearance-action" data-v-231001ce><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" aria-label="toggle dark mode" aria-checked="false" data-v-231001ce data-v-910d4043 data-v-6fb6d0ff><span class="check" data-v-6fb6d0ff><span class="icon" data-v-6fb6d0ff><!--[--><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="sun" data-v-910d4043><path d="M12,18c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6S15.3,18,12,18zM12,8c-2.2,0-4,1.8-4,4c0,2.2,1.8,4,4,4c2.2,0,4-1.8,4-4C16,9.8,14.2,8,12,8z"></path><path d="M12,4c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,3.6,12.6,4,12,4z"></path><path d="M12,24c-0.6,0-1-0.4-1-1v-2c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,23.6,12.6,24,12,24z"></path><path d="M5.6,6.6c-0.3,0-0.5-0.1-0.7-0.3L3.5,4.9c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C6.2,6.5,5.9,6.6,5.6,6.6z"></path><path d="M19.8,20.8c-0.3,0-0.5-0.1-0.7-0.3l-1.4-1.4c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C20.3,20.7,20,20.8,19.8,20.8z"></path><path d="M3,13H1c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S3.6,13,3,13z"></path><path d="M23,13h-2c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S23.6,13,23,13z"></path><path d="M4.2,20.8c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C4.7,20.7,4.5,20.8,4.2,20.8z"></path><path d="M18.4,6.6c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C18.9,6.5,18.6,6.6,18.4,6.6z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="moon" data-v-910d4043><path d="M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"></path></svg><!--]--></span></span></button></div></div></div><div class="group" data-v-231001ce><div class="item social-links" data-v-231001ce><div class="VPSocialLinks social-links-list" data-v-231001ce data-v-bb87c15e><!--[--><a class="VPSocialLink" href="https://github.com/effector/eslint-plugin" target="_blank" rel="noopener" data-v-bb87c15e data-v-9dcd5acc><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg></a><a class="VPSocialLink" href="https://twitter.com/effectorjs" target="_blank" rel="noopener" data-v-bb87c15e data-v-9dcd5acc><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Twitter</title><path d="M23.953 4.57a10 10 0 01-2.825.775 4.958 4.958 0 002.163-2.723c-.951.555-2.005.959-3.127 1.184a4.92 4.92 0 00-8.384 4.482C7.69 8.095 4.067 6.13 1.64 3.162a4.822 4.822 0 00-.666 2.475c0 1.71.87 3.213 2.188 4.096a4.904 4.904 0 01-2.228-.616v.06a4.923 4.923 0 003.946 4.827 4.996 4.996 0 01-2.212.085 4.936 4.936 0 004.604 3.417 9.867 9.867 0 01-6.102 2.105c-.39 0-.779-.023-1.17-.067a13.995 13.995 0 007.557 2.209c9.053 0 13.998-7.496 13.998-13.985 0-.21 0-.42-.015-.63A9.935 9.935 0 0024 4.59z"/></svg></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-5c544ded data-v-8494978f><span class="container" data-v-8494978f><span class="top" data-v-8494978f></span><span class="middle" data-v-8494978f></span><span class="bottom" data-v-8494978f></span></span></button></div></div></div><!----></header><!----><!----><div class="VPContent" id="VPContent" data-v-5236d721 data-v-1853a4d3><div class="NotFound" data-v-1853a4d3 data-v-b74f7232><p class="code" data-v-b74f7232>404</p><h1 class="title" data-v-b74f7232>PAGE NOT FOUND</h1><div class="divider" data-v-b74f7232></div><blockquote class="quote" data-v-b74f7232> But if you don't change your direction, and if you keep looking, you may end up where you are heading. </blockquote><div class="action" data-v-b74f7232><a class="link" href="/" aria-label="go to home" data-v-b74f7232> Take me home </a></div></div></div><footer class="VPFooter" data-v-5236d721 data-v-ae90d55f><div class="container" data-v-ae90d55f><p class="message" data-v-ae90d55f>Released under the MIT License.</p><!----></div></footer><!--[--><!--]--></div></div>
|
|
15
|
-
<script>__VP_HASH_MAP__ = JSON.parse("{\"index.md\":\"79361962\",\"presets___future.md\":\"6542932d\",\"presets___index.md\":\"af77aa24\",\"presets___list.md\":\"86dea8af\",\"presets___patronum.md\":\"9f3ad5fe\",\"presets___react.md\":\"dc2cc31a\",\"presets___recommended.md\":\"af826424\",\"presets___scope.md\":\"e5dd9837\",\"presets_future.md\":\"2962dd38\",\"presets_index.md\":\"c3c40451\",\"presets_patronum.md\":\"58445698\",\"presets_react.md\":\"fda31c90\",\"presets_recommended.md\":\"396d0c01\",\"presets_scope.md\":\"55da3541\",\"rules___index.md\":\"c943fc87\",\"rules___list.md\":\"ba316f20\",\"rules_enforce-effect-naming-convention.md\":\"09e5af2c\",\"rules_enforce-gate-naming-convention.md\":\"5f3af41a\",\"rules_enforce-store-naming-convention.md\":\"db33b9cb\",\"rules_index.md\":\"3e915bb2\",\"rules_keep-options-order.md\":\"5345093b\",\"rules_mandatory-scope-binding.md\":\"aff04a66\",\"rules_no-ambiguity-target.md\":\"7fde769b\",\"rules_no-duplicate-on.md\":\"09525e1d\",\"rules_no-forward.md\":\"2becbf92\",\"rules_no-getstate.md\":\"665d0467\",\"rules_no-guard.md\":\"5056c7b6\",\"rules_no-patronum-debug.md\":\"19f444fb\",\"rules_no-unnecessary-combination.md\":\"e7221074\",\"rules_no-unnecessary-duplication.md\":\"3a99556b\",\"rules_no-useless-methods.md\":\"e13dc29f\",\"rules_no-watch.md\":\"72ac4d86\",\"rules_prefer-sample-over-forward-with-mapping.md\":\"e5a7f363\",\"rules_prefer-useunit.md\":\"2d27cecd\",\"rules_strict-effect-handlers.md\":\"2f8965e2\"}")</script>
|
|
16
|
-
<script type="module" async src="/assets/app.c5be1f68.js"></script>
|
|
17
|
-
|
|
18
|
-
</body>
|
|
19
|
-
</html>
|