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.
Files changed (58) hide show
  1. package/README.md +1 -0
  2. package/lib/meta.d.ts +1 -1
  3. package/lib/meta.js +1 -1
  4. package/lib/rules/@typescript-eslint/no-unnecessary-condition.js +2 -1
  5. package/lib/rules/block-lang.js +2 -1
  6. package/lib/rules/comment-directive.js +3 -2
  7. package/lib/rules/first-attribute-linebreak.js +2 -1
  8. package/lib/rules/html-quotes.js +2 -1
  9. package/lib/rules/html-self-closing.js +2 -3
  10. package/lib/rules/indent-helpers/es.js +9 -7
  11. package/lib/rules/indent-helpers/index.js +3 -2
  12. package/lib/rules/indent-helpers/ts.js +12 -8
  13. package/lib/rules/infinite-reactive-loop.js +4 -3
  14. package/lib/rules/max-attributes-per-line.js +2 -1
  15. package/lib/rules/mustache-spacing.js +2 -1
  16. package/lib/rules/no-dupe-else-if-blocks.js +2 -1
  17. package/lib/rules/no-dupe-on-directives.js +2 -1
  18. package/lib/rules/no-dupe-use-directives.js +2 -1
  19. package/lib/rules/no-dynamic-slot-name.js +2 -1
  20. package/lib/rules/no-extra-reactive-curlies.js +2 -1
  21. package/lib/rules/no-immutable-reactive-statements.js +2 -1
  22. package/lib/rules/no-inline-styles.d.ts +2 -0
  23. package/lib/rules/no-inline-styles.js +52 -0
  24. package/lib/rules/no-reactive-functions.js +2 -1
  25. package/lib/rules/no-reactive-literals.js +2 -1
  26. package/lib/rules/no-reactive-reassign.js +2 -1
  27. package/lib/rules/no-trailing-spaces.js +2 -1
  28. package/lib/rules/no-unused-class-name.js +4 -2
  29. package/lib/rules/no-unused-svelte-ignore.js +3 -2
  30. package/lib/rules/no-useless-mustaches.js +2 -1
  31. package/lib/rules/prefer-class-directive.js +2 -1
  32. package/lib/rules/prefer-destructured-store-props.js +3 -2
  33. package/lib/rules/prefer-style-directive.js +2 -1
  34. package/lib/rules/reference-helpers/svelte-store.js +2 -1
  35. package/lib/rules/require-event-dispatcher-types.js +3 -2
  36. package/lib/rules/require-store-reactive-access.js +2 -1
  37. package/lib/rules/shorthand-attribute.js +2 -1
  38. package/lib/rules/shorthand-directive.js +2 -1
  39. package/lib/rules/sort-attributes.js +2 -1
  40. package/lib/rules/system.js +2 -1
  41. package/lib/rules/valid-compile.js +2 -1
  42. package/lib/shared/svelte-compile-warns/extract-leading-comments.js +2 -1
  43. package/lib/shared/svelte-compile-warns/ignore-comment.js +2 -1
  44. package/lib/shared/svelte-compile-warns/index.js +12 -11
  45. package/lib/shared/svelte-compile-warns/transform/babel.js +2 -1
  46. package/lib/shared/svelte-compile-warns/transform/less.js +2 -1
  47. package/lib/shared/svelte-compile-warns/transform/postcss.js +3 -2
  48. package/lib/shared/svelte-compile-warns/transform/stylus.js +2 -1
  49. package/lib/shared/svelte-compile-warns/transform/typescript.js +3 -1
  50. package/lib/utils/ast-utils.js +3 -2
  51. package/lib/utils/compat.d.ts +5 -0
  52. package/lib/utils/compat.js +20 -0
  53. package/lib/utils/css-utils/style-attribute.js +5 -4
  54. package/lib/utils/load-module.js +5 -4
  55. package/lib/utils/rules.js +2 -0
  56. package/lib/utils/svelte-kit.js +4 -3
  57. package/lib/utils/ts-utils/index.js +4 -2
  58. 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.34.1";
2
+ export declare const version: "2.35.1";
package/lib/meta.js CHANGED
@@ -2,4 +2,4 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.version = exports.name = void 0;
4
4
  exports.name = 'eslint-plugin-svelte';
5
- exports.version = '2.34.1';
5
+ exports.version = '2.35.1';
@@ -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 = context.getSourceCode();
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
@@ -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)(context.getFilename());
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 = context.getSourceCode();
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 = context.getSourceCode();
33
+ const sourceCode = (0, compat_1.getSourceCode)(context);
33
34
  function report(firstAttribute, location) {
34
35
  context.report({
35
36
  node: firstAttribute,
@@ -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 = context.getSourceCode();
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(node.typeParameters || node.callee, {
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 (node.typeParameters) {
120
- offsets.setOffsetToken(sourceCode.getFirstToken(node.typeParameters), 1, firstToken);
120
+ if (typeArguments) {
121
+ offsets.setOffsetToken(sourceCode.getFirstToken(typeArguments), 1, firstToken);
121
122
  }
122
- for (const optionalToken of sourceCode.getTokensBetween(sourceCode.getLastToken(node.typeParameters || node.callee), leftParenToken, { filter: isOptionalToken, includeComments: false })) {
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 (node.typeParameters) {
539
- offsets.setOffsetToken(sourceCode.getFirstToken(node.typeParameters), 1, calleeTokens.firstToken);
540
+ if (typeArguments) {
541
+ offsets.setOffsetToken(sourceCode.getFirstToken(typeArguments), 1, calleeTokens.firstToken);
540
542
  }
541
- const leftParenBefore = node.typeParameters || calleeTokens.lastToken;
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 (!context.getFilename().endsWith('.svelte'))
69
+ if (!(0, compat_1.getFilename)(context).endsWith('.svelte'))
69
70
  return {};
70
71
  const options = parseOptions(context.options[0] || {}, defaultOptions);
71
- const sourceCode = context.getSourceCode();
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
- if (node.typeParameters) {
31
+ const typeArguments = node.typeArguments ?? node.typeParameters;
32
+ if (typeArguments) {
32
33
  const firstToken = sourceCode.getFirstToken(node);
33
- offsets.setOffsetToken(sourceCode.getFirstToken(node.typeParameters), 1, firstToken);
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
- if (node.typeParameters) {
255
- offsets.setOffsetToken(sourceCode.getFirstToken(node.typeParameters), 1, sourceCode.getFirstToken(node));
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 (node.typeParameters) {
456
- offsets.setOffsetToken(sourceCode.getFirstToken(node.typeParameters), 1, firstToken);
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
- if (node.superTypeParameters != null && node.superClass != null) {
714
- offsets.setOffsetToken(sourceCode.getFirstToken(node.superTypeParameters), 1, sourceCode.getFirstToken(node.superClass));
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(context.getSourceCode().scopeManager.globalScope);
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(context.getSourceCode().scopeManager.globalScope);
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 = context.getSourceCode().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 = context.getSourceCode();
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 = context.getSourceCode();
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 = context.getSourceCode();
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 = context.getSourceCode();
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 = context.getSourceCode();
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 = context.getSourceCode();
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 = context.getSourceCode();
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 = context.getSourceCode().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,2 @@
1
+ declare const _default: import("../types").RuleModule;
2
+ export default _default;
@@ -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 = context.getSourceCode();
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 = context.getSourceCode();
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 = context.getSourceCode();
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 = context.getSourceCode();
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
- if (!context.parserServices.isSvelte) {
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 = context.parserServices.getStyleContext();
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
- if (!context.parserServices.isSvelte) {
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 = context.getSourceCode();
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 = context.getSourceCode();
22
+ const sourceCode = (0, compat_1.getSourceCode)(context);
22
23
  function parseConditionalExpression(node) {
23
24
  const result = new Map();
24
25
  if (!processItems({