eslint-plugin-svelte 2.34.0 → 2.35.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/README.md +1 -0
- package/lib/meta.d.ts +1 -1
- package/lib/meta.js +1 -1
- package/lib/rules/@typescript-eslint/no-unnecessary-condition.js +2 -1
- package/lib/rules/block-lang.js +2 -1
- package/lib/rules/comment-directive.js +3 -2
- package/lib/rules/first-attribute-linebreak.js +2 -1
- package/lib/rules/html-quotes.js +2 -1
- package/lib/rules/html-self-closing.js +2 -3
- package/lib/rules/indent-helpers/index.js +3 -2
- package/lib/rules/infinite-reactive-loop.js +4 -3
- package/lib/rules/max-attributes-per-line.js +2 -1
- package/lib/rules/mustache-spacing.js +2 -1
- package/lib/rules/no-dupe-else-if-blocks.js +2 -1
- package/lib/rules/no-dupe-on-directives.js +2 -1
- package/lib/rules/no-dupe-use-directives.js +2 -1
- package/lib/rules/no-dynamic-slot-name.js +2 -1
- package/lib/rules/no-extra-reactive-curlies.js +2 -1
- package/lib/rules/no-immutable-reactive-statements.js +2 -1
- package/lib/rules/no-inline-styles.d.ts +2 -0
- package/lib/rules/no-inline-styles.js +52 -0
- package/lib/rules/no-reactive-functions.js +2 -1
- package/lib/rules/no-reactive-literals.js +2 -1
- package/lib/rules/no-reactive-reassign.js +2 -1
- package/lib/rules/no-trailing-spaces.js +2 -1
- package/lib/rules/no-unused-class-name.js +4 -2
- package/lib/rules/no-unused-svelte-ignore.js +3 -2
- package/lib/rules/no-useless-mustaches.js +2 -1
- package/lib/rules/prefer-class-directive.js +2 -1
- package/lib/rules/prefer-destructured-store-props.js +3 -2
- package/lib/rules/prefer-style-directive.js +2 -1
- package/lib/rules/reference-helpers/svelte-store.js +2 -1
- package/lib/rules/require-event-dispatcher-types.js +2 -1
- package/lib/rules/require-store-reactive-access.js +2 -1
- package/lib/rules/shorthand-attribute.js +2 -1
- package/lib/rules/shorthand-directive.js +2 -1
- package/lib/rules/sort-attributes.js +2 -1
- package/lib/rules/system.js +2 -1
- package/lib/rules/valid-compile.js +2 -1
- package/lib/shared/svelte-compile-warns/extract-leading-comments.js +2 -1
- package/lib/shared/svelte-compile-warns/ignore-comment.js +2 -1
- package/lib/shared/svelte-compile-warns/index.js +30 -14
- package/lib/shared/svelte-compile-warns/transform/babel.js +2 -1
- package/lib/shared/svelte-compile-warns/transform/less.js +2 -1
- package/lib/shared/svelte-compile-warns/transform/postcss.js +3 -2
- package/lib/shared/svelte-compile-warns/transform/stylus.js +2 -1
- package/lib/shared/svelte-compile-warns/transform/typescript.js +3 -1
- package/lib/utils/ast-utils.js +3 -2
- package/lib/utils/compat.d.ts +5 -0
- package/lib/utils/compat.js +20 -0
- package/lib/utils/css-utils/style-attribute.js +5 -4
- package/lib/utils/load-module.js +5 -4
- package/lib/utils/rules.js +2 -0
- package/lib/utils/svelte-kit.js +4 -3
- package/lib/utils/ts-utils/index.js +4 -2
- package/package.json +9 -8
package/README.md
CHANGED
|
@@ -342,6 +342,7 @@ These rules relate to better ways of doing things to help you avoid problems:
|
|
|
342
342
|
| [svelte/no-at-debug-tags](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-at-debug-tags/) | disallow the use of `{@debug}` | :star: |
|
|
343
343
|
| [svelte/no-ignored-unsubscribe](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-ignored-unsubscribe/) | disallow ignoring the unsubscribe method returned by the `subscribe()` on Svelte stores. | |
|
|
344
344
|
| [svelte/no-immutable-reactive-statements](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-immutable-reactive-statements/) | disallow reactive statements that don't reference reactive values. | |
|
|
345
|
+
| [svelte/no-inline-styles](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-inline-styles/) | disallow attributes and directives that produce inline styles | |
|
|
345
346
|
| [svelte/no-reactive-functions](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-reactive-functions/) | it's not necessary to define functions in reactive statements | :bulb: |
|
|
346
347
|
| [svelte/no-reactive-literals](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-reactive-literals/) | don't assign literal values in reactive statements | :bulb: |
|
|
347
348
|
| [svelte/no-unused-class-name](https://sveltejs.github.io/eslint-plugin-svelte/rules/no-unused-class-name/) | disallow the use of a class in the template without a corresponding style | |
|
package/lib/meta.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export declare const name: "eslint-plugin-svelte";
|
|
2
|
-
export declare const version: "2.
|
|
2
|
+
export declare const version: "2.35.0";
|
package/lib/meta.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const utils_1 = require("../../utils");
|
|
4
4
|
const ts_utils_1 = require("../../utils/ts-utils");
|
|
5
|
+
const compat_1 = require("../../utils/compat");
|
|
5
6
|
function unionTypeParts(type) {
|
|
6
7
|
return [...iterate(type)];
|
|
7
8
|
function* iterate(t) {
|
|
@@ -87,7 +88,7 @@ exports.default = (0, utils_1.createRule)('@typescript-eslint/no-unnecessary-con
|
|
|
87
88
|
}
|
|
88
89
|
const { service, ts } = tools;
|
|
89
90
|
const checker = service.program.getTypeChecker();
|
|
90
|
-
const sourceCode =
|
|
91
|
+
const sourceCode = (0, compat_1.getSourceCode)(context);
|
|
91
92
|
const compilerOptions = service.program.getCompilerOptions();
|
|
92
93
|
const isStrictNullChecks = compilerOptions.strict
|
|
93
94
|
? compilerOptions.strictNullChecks !== false
|
package/lib/rules/block-lang.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const utils_1 = require("../utils");
|
|
4
4
|
const ast_utils_1 = require("../utils/ast-utils");
|
|
5
|
+
const compat_1 = require("../utils/compat");
|
|
5
6
|
exports.default = (0, utils_1.createRule)('block-lang', {
|
|
6
7
|
meta: {
|
|
7
8
|
docs: {
|
|
@@ -55,7 +56,7 @@ exports.default = (0, utils_1.createRule)('block-lang', {
|
|
|
55
56
|
type: 'suggestion'
|
|
56
57
|
},
|
|
57
58
|
create(context) {
|
|
58
|
-
if (!context.parserServices.isSvelte) {
|
|
59
|
+
if (!(0, compat_1.getSourceCode)(context).parserServices.isSvelte) {
|
|
59
60
|
return {};
|
|
60
61
|
}
|
|
61
62
|
const enforceScriptPresent = context.options[0]?.enforceScriptPresent ?? false;
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const shared_1 = require("../shared");
|
|
4
4
|
const utils_1 = require("../utils");
|
|
5
|
+
const compat_1 = require("../utils/compat");
|
|
5
6
|
const COMMENT_DIRECTIVE_B = /^\s*(eslint-(?:en|dis)able)(?:\s+|$)/;
|
|
6
7
|
const COMMENT_DIRECTIVE_L = /^\s*(eslint-disable(?:-next)?-line)(?:\s+|$)/;
|
|
7
8
|
const ALL_RULES = () => true;
|
|
@@ -35,7 +36,7 @@ exports.default = (0, utils_1.createRule)('comment-directive', {
|
|
|
35
36
|
type: 'problem'
|
|
36
37
|
},
|
|
37
38
|
create(context) {
|
|
38
|
-
const shared = (0, shared_1.getShared)(
|
|
39
|
+
const shared = (0, shared_1.getShared)((0, compat_1.getFilename)(context));
|
|
39
40
|
if (!shared)
|
|
40
41
|
return {};
|
|
41
42
|
const options = context.options[0] || {};
|
|
@@ -44,7 +45,7 @@ exports.default = (0, utils_1.createRule)('comment-directive', {
|
|
|
44
45
|
ruleId: 'svelte/comment-directive',
|
|
45
46
|
reportUnusedDisableDirectives
|
|
46
47
|
});
|
|
47
|
-
const sourceCode =
|
|
48
|
+
const sourceCode = (0, compat_1.getSourceCode)(context);
|
|
48
49
|
function parse(pattern, comment) {
|
|
49
50
|
const text = stripDirectiveComment(comment.value);
|
|
50
51
|
const match = pattern.exec(text);
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const utils_1 = require("../utils");
|
|
4
|
+
const compat_1 = require("../utils/compat");
|
|
4
5
|
exports.default = (0, utils_1.createRule)('first-attribute-linebreak', {
|
|
5
6
|
meta: {
|
|
6
7
|
docs: {
|
|
@@ -29,7 +30,7 @@ exports.default = (0, utils_1.createRule)('first-attribute-linebreak', {
|
|
|
29
30
|
create(context) {
|
|
30
31
|
const multiline = context.options[0]?.multiline || 'below';
|
|
31
32
|
const singleline = context.options[0]?.singleline || 'beside';
|
|
32
|
-
const sourceCode =
|
|
33
|
+
const sourceCode = (0, compat_1.getSourceCode)(context);
|
|
33
34
|
function report(firstAttribute, location) {
|
|
34
35
|
context.report({
|
|
35
36
|
node: firstAttribute,
|
package/lib/rules/html-quotes.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const utils_1 = require("../utils");
|
|
4
4
|
const ast_utils_1 = require("../utils/ast-utils");
|
|
5
5
|
const ast_utils_2 = require("../utils/ast-utils");
|
|
6
|
+
const compat_1 = require("../utils/compat");
|
|
6
7
|
const QUOTE_CHARS = {
|
|
7
8
|
double: '"',
|
|
8
9
|
single: "'"
|
|
@@ -46,7 +47,7 @@ exports.default = (0, utils_1.createRule)('html-quotes', {
|
|
|
46
47
|
type: 'layout'
|
|
47
48
|
},
|
|
48
49
|
create(context) {
|
|
49
|
-
const sourceCode =
|
|
50
|
+
const sourceCode = (0, compat_1.getSourceCode)(context);
|
|
50
51
|
const preferQuote = context.options[0]?.prefer ?? 'double';
|
|
51
52
|
const dynamicQuote = context.options[0]?.dynamic?.quoted ? preferQuote : 'unquoted';
|
|
52
53
|
const avoidInvalidUnquotedInHTML = Boolean(context.options[0]?.dynamic?.avoidInvalidUnquotedInHTML);
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const utils_1 = require("../utils");
|
|
4
4
|
const ast_utils_1 = require("../utils/ast-utils");
|
|
5
|
+
const compat_1 = require("../utils/compat");
|
|
5
6
|
const TYPE_MESSAGES = {
|
|
6
7
|
normal: 'HTML elements',
|
|
7
8
|
void: 'HTML void elements',
|
|
@@ -108,9 +109,7 @@ exports.default = (0, utils_1.createRule)('html-self-closing', {
|
|
|
108
109
|
context.report({
|
|
109
110
|
node,
|
|
110
111
|
loc: {
|
|
111
|
-
start: context
|
|
112
|
-
.getSourceCode()
|
|
113
|
-
.getLocFromIndex(node.startTag.range[1] - (node.startTag.selfClosing ? 2 : 1)),
|
|
112
|
+
start: (0, compat_1.getSourceCode)(context).getLocFromIndex(node.startTag.range[1] - (node.startTag.selfClosing ? 2 : 1)),
|
|
114
113
|
end: node.loc.end
|
|
115
114
|
},
|
|
116
115
|
messageId: shouldBeClosed ? 'requireClosing' : 'disallowClosing',
|
|
@@ -30,6 +30,7 @@ const TS = __importStar(require("./ts"));
|
|
|
30
30
|
const ast_1 = require("./ast");
|
|
31
31
|
const eslint_utils_1 = require("@eslint-community/eslint-utils");
|
|
32
32
|
const offset_context_1 = require("./offset-context");
|
|
33
|
+
const compat_1 = require("../../utils/compat");
|
|
33
34
|
function parseOptions(options, defaultOptions) {
|
|
34
35
|
const ret = {
|
|
35
36
|
indentChar: ' ',
|
|
@@ -65,10 +66,10 @@ function parseOptions(options, defaultOptions) {
|
|
|
65
66
|
return ret;
|
|
66
67
|
}
|
|
67
68
|
function defineVisitor(context, defaultOptions) {
|
|
68
|
-
if (!
|
|
69
|
+
if (!(0, compat_1.getFilename)(context).endsWith('.svelte'))
|
|
69
70
|
return {};
|
|
70
71
|
const options = parseOptions(context.options[0] || {}, defaultOptions);
|
|
71
|
-
const sourceCode =
|
|
72
|
+
const sourceCode = (0, compat_1.getSourceCode)(context);
|
|
72
73
|
const offsets = new offset_context_1.OffsetContext({ sourceCode, options });
|
|
73
74
|
function getIndentText({ line, column }) {
|
|
74
75
|
return sourceCode.lines[line - 1].slice(0, column);
|
|
@@ -4,8 +4,9 @@ const eslint_utils_1 = require("@eslint-community/eslint-utils");
|
|
|
4
4
|
const utils_1 = require("../utils");
|
|
5
5
|
const ast_utils_1 = require("../utils/ast-utils");
|
|
6
6
|
const svelte_eslint_parser_1 = require("svelte-eslint-parser");
|
|
7
|
+
const compat_1 = require("../utils/compat");
|
|
7
8
|
function extractTickReferences(context) {
|
|
8
|
-
const referenceTracker = new eslint_utils_1.ReferenceTracker(
|
|
9
|
+
const referenceTracker = new eslint_utils_1.ReferenceTracker((0, compat_1.getSourceCode)(context).scopeManager.globalScope);
|
|
9
10
|
const a = referenceTracker.iterateEsmReferences({
|
|
10
11
|
svelte: {
|
|
11
12
|
[eslint_utils_1.ReferenceTracker.ESM]: true,
|
|
@@ -22,7 +23,7 @@ function extractTickReferences(context) {
|
|
|
22
23
|
});
|
|
23
24
|
}
|
|
24
25
|
function extractTaskReferences(context) {
|
|
25
|
-
const referenceTracker = new eslint_utils_1.ReferenceTracker(
|
|
26
|
+
const referenceTracker = new eslint_utils_1.ReferenceTracker((0, compat_1.getSourceCode)(context).scopeManager.globalScope);
|
|
26
27
|
const a = referenceTracker.iterateGlobalReferences({
|
|
27
28
|
setTimeout: { [eslint_utils_1.ReferenceTracker.CALL]: true },
|
|
28
29
|
setInterval: { [eslint_utils_1.ReferenceTracker.CALL]: true },
|
|
@@ -81,7 +82,7 @@ function isPromiseThenOrCatchBody(node) {
|
|
|
81
82
|
return ['then', 'catch'].includes(property.name);
|
|
82
83
|
}
|
|
83
84
|
function getReactiveVariableReferences(context) {
|
|
84
|
-
const scopeManager =
|
|
85
|
+
const scopeManager = (0, compat_1.getSourceCode)(context).scopeManager;
|
|
85
86
|
const toplevelScope = scopeManager.globalScope?.childScopes.find((scope) => scope.type === 'module') ||
|
|
86
87
|
scopeManager.globalScope;
|
|
87
88
|
if (!toplevelScope) {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const utils_1 = require("../utils");
|
|
4
|
+
const compat_1 = require("../utils/compat");
|
|
4
5
|
function isSingleLine(node) {
|
|
5
6
|
return node.loc.start.line === node.loc.end.line;
|
|
6
7
|
}
|
|
@@ -49,7 +50,7 @@ exports.default = (0, utils_1.createRule)('max-attributes-per-line', {
|
|
|
49
50
|
create(context) {
|
|
50
51
|
const multilineMaximum = context.options[0]?.multiline ?? 1;
|
|
51
52
|
const singlelineMaximum = context.options[0]?.singleline ?? 1;
|
|
52
|
-
const sourceCode =
|
|
53
|
+
const sourceCode = (0, compat_1.getSourceCode)(context);
|
|
53
54
|
function report(attribute) {
|
|
54
55
|
if (!attribute) {
|
|
55
56
|
return;
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const eslint_utils_1 = require("@eslint-community/eslint-utils");
|
|
4
4
|
const utils_1 = require("../utils");
|
|
5
5
|
const ast_utils_1 = require("../utils/ast-utils");
|
|
6
|
+
const compat_1 = require("../utils/compat");
|
|
6
7
|
const VALUE_SCHEMA = { enum: ['never', 'always'] };
|
|
7
8
|
function parseOptions(options) {
|
|
8
9
|
return {
|
|
@@ -55,7 +56,7 @@ exports.default = (0, utils_1.createRule)('mustache-spacing', {
|
|
|
55
56
|
},
|
|
56
57
|
create(context) {
|
|
57
58
|
const options = parseOptions(context.options[0]);
|
|
58
|
-
const sourceCode =
|
|
59
|
+
const sourceCode = (0, compat_1.getSourceCode)(context);
|
|
59
60
|
function verifyBraces(openingBrace, closingBrace, openingOption, closingOption, hasExpression) {
|
|
60
61
|
const firstToken = sourceCode.getTokenAfter(openingBrace, {
|
|
61
62
|
includeComments: true
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const utils_1 = require("../utils");
|
|
4
4
|
const ast_utils_1 = require("../utils/ast-utils");
|
|
5
|
+
const compat_1 = require("../utils/compat");
|
|
5
6
|
function splitByLogicalOperator(operator, node) {
|
|
6
7
|
if (node.type === 'LogicalExpression' && node.operator === operator) {
|
|
7
8
|
return [
|
|
@@ -44,7 +45,7 @@ exports.default = (0, utils_1.createRule)('no-dupe-else-if-blocks', {
|
|
|
44
45
|
type: 'problem'
|
|
45
46
|
},
|
|
46
47
|
create(context) {
|
|
47
|
-
const sourceCode =
|
|
48
|
+
const sourceCode = (0, compat_1.getSourceCode)(context);
|
|
48
49
|
function equal(a, b) {
|
|
49
50
|
if (a.type !== b.type) {
|
|
50
51
|
return false;
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const utils_1 = require("../utils");
|
|
4
4
|
const ast_utils_1 = require("../utils/ast-utils");
|
|
5
|
+
const compat_1 = require("../utils/compat");
|
|
5
6
|
exports.default = (0, utils_1.createRule)('no-dupe-on-directives', {
|
|
6
7
|
meta: {
|
|
7
8
|
docs: {
|
|
@@ -16,7 +17,7 @@ exports.default = (0, utils_1.createRule)('no-dupe-on-directives', {
|
|
|
16
17
|
type: 'problem'
|
|
17
18
|
},
|
|
18
19
|
create(context) {
|
|
19
|
-
const sourceCode =
|
|
20
|
+
const sourceCode = (0, compat_1.getSourceCode)(context);
|
|
20
21
|
const directiveDataMap = new Map();
|
|
21
22
|
return {
|
|
22
23
|
SvelteDirective(node) {
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const utils_1 = require("../utils");
|
|
4
4
|
const ast_utils_1 = require("../utils/ast-utils");
|
|
5
|
+
const compat_1 = require("../utils/compat");
|
|
5
6
|
exports.default = (0, utils_1.createRule)('no-dupe-use-directives', {
|
|
6
7
|
meta: {
|
|
7
8
|
docs: {
|
|
@@ -16,7 +17,7 @@ exports.default = (0, utils_1.createRule)('no-dupe-use-directives', {
|
|
|
16
17
|
type: 'problem'
|
|
17
18
|
},
|
|
18
19
|
create(context) {
|
|
19
|
-
const sourceCode =
|
|
20
|
+
const sourceCode = (0, compat_1.getSourceCode)(context);
|
|
20
21
|
const directiveDataMap = new Map();
|
|
21
22
|
return {
|
|
22
23
|
SvelteDirective(node) {
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const utils_1 = require("../utils");
|
|
4
4
|
const ast_utils_1 = require("../utils/ast-utils");
|
|
5
|
+
const compat_1 = require("../utils/compat");
|
|
5
6
|
exports.default = (0, utils_1.createRule)('no-dynamic-slot-name', {
|
|
6
7
|
meta: {
|
|
7
8
|
docs: {
|
|
@@ -18,7 +19,7 @@ exports.default = (0, utils_1.createRule)('no-dynamic-slot-name', {
|
|
|
18
19
|
type: 'problem'
|
|
19
20
|
},
|
|
20
21
|
create(context) {
|
|
21
|
-
const sourceCode =
|
|
22
|
+
const sourceCode = (0, compat_1.getSourceCode)(context);
|
|
22
23
|
return {
|
|
23
24
|
"SvelteElement[name.name='slot'] > SvelteStartTag.startTag > SvelteAttribute[key.name='name']"(node) {
|
|
24
25
|
if (node.value.length === 0) {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const utils_1 = require("../utils");
|
|
4
|
+
const compat_1 = require("../utils/compat");
|
|
4
5
|
exports.default = (0, utils_1.createRule)('no-extra-reactive-curlies', {
|
|
5
6
|
meta: {
|
|
6
7
|
docs: {
|
|
@@ -20,7 +21,7 @@ exports.default = (0, utils_1.createRule)('no-extra-reactive-curlies', {
|
|
|
20
21
|
create(context) {
|
|
21
22
|
return {
|
|
22
23
|
[`SvelteReactiveStatement > BlockStatement[body.length=1]`]: (node) => {
|
|
23
|
-
const source =
|
|
24
|
+
const source = (0, compat_1.getSourceCode)(context);
|
|
24
25
|
return context.report({
|
|
25
26
|
node,
|
|
26
27
|
loc: node.loc,
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const utils_1 = require("../utils");
|
|
4
4
|
const ast_utils_1 = require("../utils/ast-utils");
|
|
5
|
+
const compat_1 = require("../utils/compat");
|
|
5
6
|
exports.default = (0, utils_1.createRule)('no-immutable-reactive-statements', {
|
|
6
7
|
meta: {
|
|
7
8
|
docs: {
|
|
@@ -16,7 +17,7 @@ exports.default = (0, utils_1.createRule)('no-immutable-reactive-statements', {
|
|
|
16
17
|
type: 'suggestion'
|
|
17
18
|
},
|
|
18
19
|
create(context) {
|
|
19
|
-
const scopeManager =
|
|
20
|
+
const scopeManager = (0, compat_1.getSourceCode)(context).scopeManager;
|
|
20
21
|
const globalScope = scopeManager.globalScope;
|
|
21
22
|
const toplevelScope = globalScope?.childScopes.find((scope) => scope.type === 'module') || globalScope;
|
|
22
23
|
if (!globalScope || !toplevelScope) {
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const utils_1 = require("../utils");
|
|
4
|
+
exports.default = (0, utils_1.createRule)('no-inline-styles', {
|
|
5
|
+
meta: {
|
|
6
|
+
docs: {
|
|
7
|
+
description: 'disallow attributes and directives that produce inline styles',
|
|
8
|
+
category: 'Best Practices',
|
|
9
|
+
recommended: false
|
|
10
|
+
},
|
|
11
|
+
schema: [
|
|
12
|
+
{
|
|
13
|
+
type: 'object',
|
|
14
|
+
properties: {
|
|
15
|
+
allowTransitions: {
|
|
16
|
+
type: 'boolean'
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
additionalProperties: false
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
messages: {
|
|
23
|
+
hasStyleAttribute: 'Found disallowed style attribute.',
|
|
24
|
+
hasStyleDirective: 'Found disallowed style directive.',
|
|
25
|
+
hasTransition: 'Found disallowed transition.'
|
|
26
|
+
},
|
|
27
|
+
type: 'suggestion'
|
|
28
|
+
},
|
|
29
|
+
create(context) {
|
|
30
|
+
const allowTransitions = context.options[0]?.allowTransitions ?? false;
|
|
31
|
+
return {
|
|
32
|
+
SvelteElement(node) {
|
|
33
|
+
if (node.kind !== 'html') {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
for (const attribute of node.startTag.attributes) {
|
|
37
|
+
if (attribute.type === 'SvelteStyleDirective') {
|
|
38
|
+
context.report({ loc: attribute.loc, messageId: 'hasStyleDirective' });
|
|
39
|
+
}
|
|
40
|
+
if (attribute.type === 'SvelteAttribute' && attribute.key.name === 'style') {
|
|
41
|
+
context.report({ loc: attribute.loc, messageId: 'hasStyleAttribute' });
|
|
42
|
+
}
|
|
43
|
+
if (!allowTransitions &&
|
|
44
|
+
attribute.type === 'SvelteDirective' &&
|
|
45
|
+
attribute.kind === 'Transition') {
|
|
46
|
+
context.report({ loc: attribute.loc, messageId: 'hasTransition' });
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
});
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const utils_1 = require("../utils");
|
|
4
|
+
const compat_1 = require("../utils/compat");
|
|
4
5
|
exports.default = (0, utils_1.createRule)('no-reactive-functions', {
|
|
5
6
|
meta: {
|
|
6
7
|
docs: {
|
|
@@ -23,7 +24,7 @@ exports.default = (0, utils_1.createRule)('no-reactive-functions', {
|
|
|
23
24
|
if (!parent) {
|
|
24
25
|
return false;
|
|
25
26
|
}
|
|
26
|
-
const source =
|
|
27
|
+
const source = (0, compat_1.getSourceCode)(context);
|
|
27
28
|
return context.report({
|
|
28
29
|
node: parent,
|
|
29
30
|
loc: parent.loc,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const utils_1 = require("../utils");
|
|
4
|
+
const compat_1 = require("../utils/compat");
|
|
4
5
|
exports.default = (0, utils_1.createRule)('no-reactive-literals', {
|
|
5
6
|
meta: {
|
|
6
7
|
docs: {
|
|
@@ -27,7 +28,7 @@ exports.default = (0, utils_1.createRule)('no-reactive-literals', {
|
|
|
27
28
|
if (!parent) {
|
|
28
29
|
return false;
|
|
29
30
|
}
|
|
30
|
-
const source =
|
|
31
|
+
const source = (0, compat_1.getSourceCode)(context);
|
|
31
32
|
return context.report({
|
|
32
33
|
node: parent,
|
|
33
34
|
loc: parent.loc,
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const utils_1 = require("../utils");
|
|
4
4
|
const eslint_utils_1 = require("@eslint-community/eslint-utils");
|
|
5
|
+
const compat_1 = require("../utils/compat");
|
|
5
6
|
exports.default = (0, utils_1.createRule)('no-reactive-reassign', {
|
|
6
7
|
meta: {
|
|
7
8
|
docs: {
|
|
@@ -28,7 +29,7 @@ exports.default = (0, utils_1.createRule)('no-reactive-reassign', {
|
|
|
28
29
|
},
|
|
29
30
|
create(context) {
|
|
30
31
|
const props = context.options[0]?.props !== false;
|
|
31
|
-
const sourceCode =
|
|
32
|
+
const sourceCode = (0, compat_1.getSourceCode)(context);
|
|
32
33
|
const scopeManager = sourceCode.scopeManager;
|
|
33
34
|
const globalScope = scopeManager.globalScope;
|
|
34
35
|
const toplevelScope = globalScope?.childScopes.find((scope) => scope.type === 'module') || globalScope;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const utils_1 = require("../utils");
|
|
4
|
+
const compat_1 = require("../utils/compat");
|
|
4
5
|
exports.default = (0, utils_1.createRule)('no-trailing-spaces', {
|
|
5
6
|
meta: {
|
|
6
7
|
type: 'layout',
|
|
@@ -30,7 +31,7 @@ exports.default = (0, utils_1.createRule)('no-trailing-spaces', {
|
|
|
30
31
|
const options = context.options[0];
|
|
31
32
|
const skipBlankLines = options?.skipBlankLines || false;
|
|
32
33
|
const ignoreComments = options?.ignoreComments || false;
|
|
33
|
-
const sourceCode =
|
|
34
|
+
const sourceCode = (0, compat_1.getSourceCode)(context);
|
|
34
35
|
const ignoreLineNumbers = new Set();
|
|
35
36
|
if (ignoreComments) {
|
|
36
37
|
for (const { type, loc } of sourceCode.getAllComments()) {
|
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const utils_1 = require("../utils");
|
|
7
7
|
const postcss_selector_parser_1 = __importDefault(require("postcss-selector-parser"));
|
|
8
|
+
const compat_1 = require("../utils/compat");
|
|
8
9
|
exports.default = (0, utils_1.createRule)('no-unused-class-name', {
|
|
9
10
|
meta: {
|
|
10
11
|
docs: {
|
|
@@ -30,7 +31,8 @@ exports.default = (0, utils_1.createRule)('no-unused-class-name', {
|
|
|
30
31
|
type: 'suggestion'
|
|
31
32
|
},
|
|
32
33
|
create(context) {
|
|
33
|
-
|
|
34
|
+
const sourceCode = (0, compat_1.getSourceCode)(context);
|
|
35
|
+
if (!sourceCode.parserServices.isSvelte) {
|
|
34
36
|
return {};
|
|
35
37
|
}
|
|
36
38
|
const allowedClassNames = context.options[0]?.allowedClassNames ?? [];
|
|
@@ -46,7 +48,7 @@ exports.default = (0, utils_1.createRule)('no-unused-class-name', {
|
|
|
46
48
|
}
|
|
47
49
|
},
|
|
48
50
|
'Program:exit'() {
|
|
49
|
-
const styleContext =
|
|
51
|
+
const styleContext = sourceCode.parserServices.getStyleContext();
|
|
50
52
|
if (['parse-error', 'unknown-lang'].includes(styleContext.status)) {
|
|
51
53
|
return;
|
|
52
54
|
}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const svelte_compile_warns_1 = require("../shared/svelte-compile-warns");
|
|
4
4
|
const utils_1 = require("../utils");
|
|
5
5
|
const ignore_comment_1 = require("../shared/svelte-compile-warns/ignore-comment");
|
|
6
|
+
const compat_1 = require("../utils/compat");
|
|
6
7
|
exports.default = (0, utils_1.createRule)('no-unused-svelte-ignore', {
|
|
7
8
|
meta: {
|
|
8
9
|
docs: {
|
|
@@ -18,10 +19,10 @@ exports.default = (0, utils_1.createRule)('no-unused-svelte-ignore', {
|
|
|
18
19
|
type: 'suggestion'
|
|
19
20
|
},
|
|
20
21
|
create(context) {
|
|
21
|
-
|
|
22
|
+
const sourceCode = (0, compat_1.getSourceCode)(context);
|
|
23
|
+
if (!sourceCode.parserServices.isSvelte) {
|
|
22
24
|
return {};
|
|
23
25
|
}
|
|
24
|
-
const sourceCode = context.getSourceCode();
|
|
25
26
|
const ignoreComments = [];
|
|
26
27
|
for (const item of (0, ignore_comment_1.getSvelteIgnoreItems)(context)) {
|
|
27
28
|
if (item.code == null) {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const utils_1 = require("../utils");
|
|
4
|
+
const compat_1 = require("../utils/compat");
|
|
4
5
|
function stripQuotes(text) {
|
|
5
6
|
if ((text.startsWith('"') || text.startsWith("'") || text.startsWith('`')) &&
|
|
6
7
|
text.endsWith(text[0])) {
|
|
@@ -39,7 +40,7 @@ exports.default = (0, utils_1.createRule)('no-useless-mustaches', {
|
|
|
39
40
|
const opts = context.options[0] || {};
|
|
40
41
|
const ignoreIncludesComment = Boolean(opts.ignoreIncludesComment);
|
|
41
42
|
const ignoreStringEscape = Boolean(opts.ignoreStringEscape);
|
|
42
|
-
const sourceCode =
|
|
43
|
+
const sourceCode = (0, compat_1.getSourceCode)(context);
|
|
43
44
|
function verify(node) {
|
|
44
45
|
if (node.kind === 'raw') {
|
|
45
46
|
return;
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const utils_1 = require("../utils");
|
|
4
4
|
const ast_utils_1 = require("../utils/ast-utils");
|
|
5
|
+
const compat_1 = require("../utils/compat");
|
|
5
6
|
exports.default = (0, utils_1.createRule)('prefer-class-directive', {
|
|
6
7
|
meta: {
|
|
7
8
|
docs: {
|
|
@@ -18,7 +19,7 @@ exports.default = (0, utils_1.createRule)('prefer-class-directive', {
|
|
|
18
19
|
type: 'suggestion'
|
|
19
20
|
},
|
|
20
21
|
create(context) {
|
|
21
|
-
const sourceCode =
|
|
22
|
+
const sourceCode = (0, compat_1.getSourceCode)(context);
|
|
22
23
|
function parseConditionalExpression(node) {
|
|
23
24
|
const result = new Map();
|
|
24
25
|
if (!processItems({
|
|
@@ -4,6 +4,7 @@ const eslint_utils_1 = require("@eslint-community/eslint-utils");
|
|
|
4
4
|
const esutils_1 = require("esutils");
|
|
5
5
|
const utils_1 = require("../utils");
|
|
6
6
|
const ast_utils_1 = require("../utils/ast-utils");
|
|
7
|
+
const compat_1 = require("../utils/compat");
|
|
7
8
|
exports.default = (0, utils_1.createRule)('prefer-destructured-store-props', {
|
|
8
9
|
meta: {
|
|
9
10
|
docs: {
|
|
@@ -69,7 +70,7 @@ exports.default = (0, utils_1.createRule)('prefer-destructured-store-props', {
|
|
|
69
70
|
}
|
|
70
71
|
}
|
|
71
72
|
function hasTopLevelVariable(name) {
|
|
72
|
-
const scopeManager =
|
|
73
|
+
const scopeManager = (0, compat_1.getSourceCode)(context).scopeManager;
|
|
73
74
|
if (scopeManager.globalScope?.set.has(name)) {
|
|
74
75
|
return true;
|
|
75
76
|
}
|
|
@@ -168,7 +169,7 @@ exports.default = (0, utils_1.createRule)('prefer-destructured-store-props', {
|
|
|
168
169
|
store,
|
|
169
170
|
property: !node.computed
|
|
170
171
|
? node.property.name
|
|
171
|
-
:
|
|
172
|
+
: (0, compat_1.getSourceCode)(context).getText(node.property).replace(/\s+/g, ' ')
|
|
172
173
|
},
|
|
173
174
|
suggest
|
|
174
175
|
});
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const utils_1 = require("../utils");
|
|
4
4
|
const css_utils_1 = require("../utils/css-utils");
|
|
5
5
|
const ast_utils_1 = require("../utils/ast-utils");
|
|
6
|
+
const compat_1 = require("../utils/compat");
|
|
6
7
|
function isStringLiteral(node) {
|
|
7
8
|
return node.type === 'Literal' && typeof node.value === 'string';
|
|
8
9
|
}
|
|
@@ -22,7 +23,7 @@ exports.default = (0, utils_1.createRule)('prefer-style-directive', {
|
|
|
22
23
|
type: 'suggestion'
|
|
23
24
|
},
|
|
24
25
|
create(context) {
|
|
25
|
-
const sourceCode =
|
|
26
|
+
const sourceCode = (0, compat_1.getSourceCode)(context);
|
|
26
27
|
function processStyleValue(node, root) {
|
|
27
28
|
for (const child of root.nodes) {
|
|
28
29
|
if (child.type === 'decl') {
|
|
@@ -4,8 +4,9 @@ exports.createStoreChecker = exports.extractStoreReferences = void 0;
|
|
|
4
4
|
const eslint_utils_1 = require("@eslint-community/eslint-utils");
|
|
5
5
|
const ts_utils_1 = require("../../utils/ts-utils");
|
|
6
6
|
const ast_utils_1 = require("../../utils/ast-utils");
|
|
7
|
+
const compat_1 = require("../../utils/compat");
|
|
7
8
|
function* extractStoreReferences(context, storeNames = ['writable', 'readable', 'derived']) {
|
|
8
|
-
const referenceTracker = new eslint_utils_1.ReferenceTracker(
|
|
9
|
+
const referenceTracker = new eslint_utils_1.ReferenceTracker((0, compat_1.getSourceCode)(context).scopeManager.globalScope);
|
|
9
10
|
for (const { node, path } of referenceTracker.iterateEsmReferences({
|
|
10
11
|
'svelte/store': {
|
|
11
12
|
[eslint_utils_1.ReferenceTracker.ESM]: true,
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const eslint_utils_1 = require("@eslint-community/eslint-utils");
|
|
4
4
|
const utils_1 = require("../utils");
|
|
5
5
|
const ast_utils_1 = require("../utils/ast-utils");
|
|
6
|
+
const compat_1 = require("../utils/compat");
|
|
6
7
|
exports.default = (0, utils_1.createRule)('require-event-dispatcher-types', {
|
|
7
8
|
meta: {
|
|
8
9
|
docs: {
|
|
@@ -29,7 +30,7 @@ exports.default = (0, utils_1.createRule)('require-event-dispatcher-types', {
|
|
|
29
30
|
if (!isTs) {
|
|
30
31
|
return;
|
|
31
32
|
}
|
|
32
|
-
const referenceTracker = new eslint_utils_1.ReferenceTracker(
|
|
33
|
+
const referenceTracker = new eslint_utils_1.ReferenceTracker((0, compat_1.getSourceCode)(context).scopeManager.globalScope);
|
|
33
34
|
for (const { node: n } of referenceTracker.iterateEsmReferences({
|
|
34
35
|
svelte: {
|
|
35
36
|
[eslint_utils_1.ReferenceTracker.ESM]: true,
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const utils_1 = require("../utils");
|
|
4
4
|
const svelte_store_1 = require("./reference-helpers/svelte-store");
|
|
5
|
+
const compat_1 = require("../utils/compat");
|
|
5
6
|
exports.default = (0, utils_1.createRule)('require-store-reactive-access', {
|
|
6
7
|
meta: {
|
|
7
8
|
docs: {
|
|
@@ -17,7 +18,7 @@ exports.default = (0, utils_1.createRule)('require-store-reactive-access', {
|
|
|
17
18
|
type: 'problem'
|
|
18
19
|
},
|
|
19
20
|
create(context) {
|
|
20
|
-
if (!context.parserServices.isSvelte) {
|
|
21
|
+
if (!(0, compat_1.getSourceCode)(context).parserServices.isSvelte) {
|
|
21
22
|
return {};
|
|
22
23
|
}
|
|
23
24
|
const isStore = (0, svelte_store_1.createStoreChecker)(context);
|