eslint-plugin-svelte 2.34.1 → 2.35.1
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/es.js +9 -7
- package/lib/rules/indent-helpers/index.js +3 -2
- package/lib/rules/indent-helpers/ts.js +12 -8
- 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 +3 -2
- 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 +12 -11
- 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 +4 -3
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.1";
|
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',
|
|
@@ -110,16 +110,17 @@ function defineVisitor(context) {
|
|
|
110
110
|
visitor.BreakStatement(node);
|
|
111
111
|
},
|
|
112
112
|
CallExpression(node) {
|
|
113
|
+
const typeArguments = node.typeArguments ?? node.typeParameters;
|
|
113
114
|
const firstToken = sourceCode.getFirstToken(node);
|
|
114
|
-
const leftParenToken = sourceCode.getTokenAfter(
|
|
115
|
+
const leftParenToken = sourceCode.getTokenAfter(typeArguments || node.callee, {
|
|
115
116
|
filter: eslint_utils_1.isOpeningParenToken,
|
|
116
117
|
includeComments: false
|
|
117
118
|
});
|
|
118
119
|
const rightParenToken = sourceCode.getLastToken(node);
|
|
119
|
-
if (
|
|
120
|
-
offsets.setOffsetToken(sourceCode.getFirstToken(
|
|
120
|
+
if (typeArguments) {
|
|
121
|
+
offsets.setOffsetToken(sourceCode.getFirstToken(typeArguments), 1, firstToken);
|
|
121
122
|
}
|
|
122
|
-
for (const optionalToken of sourceCode.getTokensBetween(sourceCode.getLastToken(
|
|
123
|
+
for (const optionalToken of sourceCode.getTokensBetween(sourceCode.getLastToken(typeArguments || node.callee), leftParenToken, { filter: isOptionalToken, includeComments: false })) {
|
|
123
124
|
offsets.setOffsetToken(optionalToken, 1, firstToken);
|
|
124
125
|
}
|
|
125
126
|
offsets.setOffsetToken(leftParenToken, 1, firstToken);
|
|
@@ -532,13 +533,14 @@ function defineVisitor(context) {
|
|
|
532
533
|
visitor.MethodDefinition(node);
|
|
533
534
|
},
|
|
534
535
|
NewExpression(node) {
|
|
536
|
+
const typeArguments = node.typeArguments ?? node.typeParameters;
|
|
535
537
|
const newToken = sourceCode.getFirstToken(node);
|
|
536
538
|
const calleeTokens = (0, commons_1.getFirstAndLastTokens)(sourceCode, node.callee);
|
|
537
539
|
offsets.setOffsetToken(calleeTokens.firstToken, 1, newToken);
|
|
538
|
-
if (
|
|
539
|
-
offsets.setOffsetToken(sourceCode.getFirstToken(
|
|
540
|
+
if (typeArguments) {
|
|
541
|
+
offsets.setOffsetToken(sourceCode.getFirstToken(typeArguments), 1, calleeTokens.firstToken);
|
|
540
542
|
}
|
|
541
|
-
const leftParenBefore =
|
|
543
|
+
const leftParenBefore = typeArguments || calleeTokens.lastToken;
|
|
542
544
|
if (node.arguments.length || leftParenBefore.range[1] < node.range[1]) {
|
|
543
545
|
const rightParenToken = sourceCode.getLastToken(node);
|
|
544
546
|
const leftParenToken = sourceCode.getTokenAfter(leftParenBefore);
|
|
@@ -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);
|
|
@@ -28,9 +28,10 @@ function defineVisitor(context) {
|
|
|
28
28
|
visitor.TSAsExpression(node);
|
|
29
29
|
},
|
|
30
30
|
TSTypeReference(node) {
|
|
31
|
-
|
|
31
|
+
const typeArguments = node.typeArguments ?? node.typeParameters;
|
|
32
|
+
if (typeArguments) {
|
|
32
33
|
const firstToken = sourceCode.getFirstToken(node);
|
|
33
|
-
offsets.setOffsetToken(sourceCode.getFirstToken(
|
|
34
|
+
offsets.setOffsetToken(sourceCode.getFirstToken(typeArguments), 1, firstToken);
|
|
34
35
|
}
|
|
35
36
|
},
|
|
36
37
|
TSInstantiationExpression(node) {
|
|
@@ -251,8 +252,9 @@ function defineVisitor(context) {
|
|
|
251
252
|
offsets.setOffsetElementList(node.body, sourceCode.getFirstToken(node), sourceCode.getLastToken(node), 1);
|
|
252
253
|
},
|
|
253
254
|
TSClassImplements(node) {
|
|
254
|
-
|
|
255
|
-
|
|
255
|
+
const typeArguments = node.typeArguments ?? node.typeParameters;
|
|
256
|
+
if (typeArguments) {
|
|
257
|
+
offsets.setOffsetToken(sourceCode.getFirstToken(typeArguments), 1, sourceCode.getFirstToken(node));
|
|
256
258
|
}
|
|
257
259
|
},
|
|
258
260
|
TSInterfaceHeritage(node) {
|
|
@@ -434,6 +436,7 @@ function defineVisitor(context) {
|
|
|
434
436
|
offsets.setOffsetToken(expressionToken, 1, firstToken);
|
|
435
437
|
},
|
|
436
438
|
TSImportType(node) {
|
|
439
|
+
const typeArguments = node.typeArguments ?? node.typeParameters;
|
|
437
440
|
const firstToken = sourceCode.getFirstToken(node);
|
|
438
441
|
const leftParenToken = sourceCode.getTokenAfter(firstToken, {
|
|
439
442
|
filter: eslint_utils_1.isOpeningParenToken,
|
|
@@ -452,8 +455,8 @@ function defineVisitor(context) {
|
|
|
452
455
|
const propertyToken = sourceCode.getTokenAfter(dotToken);
|
|
453
456
|
offsets.setOffsetToken([dotToken, propertyToken], 1, firstToken);
|
|
454
457
|
}
|
|
455
|
-
if (
|
|
456
|
-
offsets.setOffsetToken(sourceCode.getFirstToken(
|
|
458
|
+
if (typeArguments) {
|
|
459
|
+
offsets.setOffsetToken(sourceCode.getFirstToken(typeArguments), 1, firstToken);
|
|
457
460
|
}
|
|
458
461
|
},
|
|
459
462
|
TSParameterProperty(node) {
|
|
@@ -710,8 +713,9 @@ function defineVisitor(context) {
|
|
|
710
713
|
if (node.typeParameters != null) {
|
|
711
714
|
offsets.setOffsetToken(sourceCode.getFirstToken(node.typeParameters), 1, sourceCode.getFirstToken(node.id || node));
|
|
712
715
|
}
|
|
713
|
-
|
|
714
|
-
|
|
716
|
+
const superTypeArguments = node.superTypeArguments ?? node.superTypeParameters;
|
|
717
|
+
if (superTypeArguments != null && node.superClass != null) {
|
|
718
|
+
offsets.setOffsetToken(sourceCode.getFirstToken(superTypeArguments), 1, sourceCode.getFirstToken(node.superClass));
|
|
715
719
|
}
|
|
716
720
|
if (node.implements != null && node.implements.length) {
|
|
717
721
|
const classToken = sourceCode.getFirstToken(node);
|
|
@@ -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({
|