eslint-plugin-svelte 2.21.0 → 2.23.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 CHANGED
@@ -89,6 +89,7 @@ This plugin provides configs:
89
89
  - `plugin:svelte/base` ... Configuration to enable correct Svelte parsing.
90
90
  - `plugin:svelte/recommended` ... Above, plus rules to prevent errors or unintended behavior.
91
91
  - `plugin:svelte/prettier` ... Turns off rules that may conflict with [Prettier](https://prettier.io/) (You still need to configure prettier to work with svelte yourself, for example by using [prettier-plugin-svelte](https://github.com/sveltejs/prettier-plugin-svelte).).
92
+ - `plugin:svelte/all` ... All rules. This configuration is not recommended for production use because it changes with every minor and major version of `eslint-plugin-svelte`. Use it at your own risk.
92
93
 
93
94
  See [the rule list](https://ota-meshi.github.io/eslint-plugin-svelte/rules/) to get the `rules` that this plugin provides.
94
95
 
@@ -0,0 +1,7 @@
1
+ declare const _default: {
2
+ extends: string[];
3
+ rules: {
4
+ [k: string]: string;
5
+ };
6
+ };
7
+ export = _default;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ const path_1 = __importDefault(require("path"));
6
+ const rules_1 = require("../utils/rules");
7
+ const base = require.resolve("./base");
8
+ const baseExtend = path_1.default.extname(`${base}`) === ".ts" ? "plugin:svelte/base" : base;
9
+ module.exports = {
10
+ extends: [baseExtend],
11
+ rules: Object.fromEntries(rules_1.rules.map((rule) => [`svelte/${rule.meta.docs.ruleName}`, "error"])),
12
+ };
package/lib/index.d.ts CHANGED
@@ -49,6 +49,12 @@ declare const _default: {
49
49
  "svelte/shorthand-directive": string;
50
50
  };
51
51
  };
52
+ all: {
53
+ extends: string[];
54
+ rules: {
55
+ [k: string]: string;
56
+ };
57
+ };
52
58
  };
53
59
  rules: {
54
60
  [key: string]: RuleModule;
package/lib/index.js CHANGED
@@ -29,11 +29,13 @@ const rules_1 = require("./utils/rules");
29
29
  const base_1 = __importDefault(require("./configs/base"));
30
30
  const recommended_1 = __importDefault(require("./configs/recommended"));
31
31
  const prettier_1 = __importDefault(require("./configs/prettier"));
32
+ const all_1 = __importDefault(require("./configs/all"));
32
33
  const processor = __importStar(require("./processor"));
33
34
  const configs = {
34
35
  base: base_1.default,
35
36
  recommended: recommended_1.default,
36
37
  prettier: prettier_1.default,
38
+ all: all_1.default,
37
39
  };
38
40
  const rules = rules_1.rules.reduce((obj, r) => {
39
41
  obj[r.meta.docs.ruleName] = r;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.isBeginningOfElement = exports.isBeginningOfLine = exports.getFirstAndLastTokens = void 0;
4
- const eslint_utils_1 = require("eslint-utils");
4
+ const eslint_utils_1 = require("@eslint-community/eslint-utils");
5
5
  const ast_1 = require("./ast");
6
6
  function getFirstAndLastTokens(sourceCode, node, borderOffset = 0) {
7
7
  let firstToken = sourceCode.getFirstToken(node);
@@ -47,8 +47,7 @@ function isBeginningOfElement(node) {
47
47
  if (node.parent.type === "Program") {
48
48
  return node.parent.body[0] === node;
49
49
  }
50
- assertNever(node.parent);
51
- return false;
50
+ return assertNever(node.parent);
52
51
  }
53
52
  exports.isBeginningOfElement = isBeginningOfElement;
54
53
  function assertNever(value) {
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.defineVisitor = void 0;
4
4
  const commons_1 = require("./commons");
5
- const eslint_utils_1 = require("eslint-utils");
5
+ const eslint_utils_1 = require("@eslint-community/eslint-utils");
6
6
  const ast_utils_1 = require("../../utils/ast-utils");
7
7
  function defineVisitor(context) {
8
8
  const { sourceCode, offsets, options } = context;
@@ -28,7 +28,7 @@ const SV = __importStar(require("./svelte"));
28
28
  const ES = __importStar(require("./es"));
29
29
  const TS = __importStar(require("./ts"));
30
30
  const ast_1 = require("./ast");
31
- const eslint_utils_1 = require("eslint-utils");
31
+ const eslint_utils_1 = require("@eslint-community/eslint-utils");
32
32
  const offset_context_1 = require("./offset-context");
33
33
  function parseOptions(options, defaultOptions) {
34
34
  const ret = {
@@ -16,17 +16,21 @@ function defineVisitor(context) {
16
16
  node.children.forEach((n) => offsets.ignore(n));
17
17
  },
18
18
  SvelteElement(node) {
19
- if ((node.name.type !== "Identifier" && node.name.type !== "SvelteName") ||
20
- !PREFORMATTED_ELEMENT_NAMES.includes(node.name.name)) {
21
- if (node.endTag) {
22
- offsets.setOffsetElementList(node.children.filter(isNotEmptyTextNode), node.startTag, node.endTag, 1);
19
+ if (node.name.type === "Identifier" || node.name.type === "SvelteName") {
20
+ if (PREFORMATTED_ELEMENT_NAMES.includes(node.name.name)) {
21
+ const startTagToken = sourceCode.getFirstToken(node);
22
+ const endTagToken = node.endTag && sourceCode.getFirstToken(node.endTag);
23
+ offsets.setOffsetToken(endTagToken, 0, startTagToken);
24
+ node.children.forEach((n) => offsets.ignore(n));
25
+ return;
26
+ }
27
+ if (node.name.name === "style") {
28
+ node.children.forEach((n) => offsets.ignore(n));
29
+ return;
23
30
  }
24
31
  }
25
- else {
26
- const startTagToken = sourceCode.getFirstToken(node);
27
- const endTagToken = node.endTag && sourceCode.getFirstToken(node.endTag);
28
- offsets.setOffsetToken(endTagToken, 0, startTagToken);
29
- node.children.forEach((n) => offsets.ignore(n));
32
+ if (node.endTag) {
33
+ offsets.setOffsetElementList(node.children.filter(isNotEmptyTextNode), node.startTag, node.endTag, 1);
30
34
  }
31
35
  },
32
36
  SvelteStartTag(node) {
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.defineVisitor = void 0;
4
- const eslint_utils_1 = require("eslint-utils");
4
+ const eslint_utils_1 = require("@eslint-community/eslint-utils");
5
5
  const commons_1 = require("./commons");
6
6
  const commons_2 = require("./commons");
7
7
  function defineVisitor(context) {
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const eslint_utils_1 = require("eslint-utils");
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
6
  const svelte_eslint_parser_1 = require("svelte-eslint-parser");
@@ -166,73 +166,81 @@ function isInsideOfFunction(node) {
166
166
  return false;
167
167
  }
168
168
  function doLint(context, ast, callFuncIdentifiers, tickCallExpressions, taskReferences, reactiveVariableNames, reactiveVariableReferences, pIsSameTask) {
169
- let isSameMicroTask = pIsSameTask;
170
- const differentMicroTaskEnterNodes = [];
171
- (0, svelte_eslint_parser_1.traverseNodes)(ast, {
172
- enterNode(node) {
173
- if (isPromiseThenOrCatchBody(node)) {
174
- differentMicroTaskEnterNodes.push(node);
175
- isSameMicroTask = false;
176
- }
177
- for (const { node: callExpression } of [
178
- ...tickCallExpressions,
179
- ...taskReferences,
180
- ]) {
181
- if (isChildNode(callExpression, node)) {
169
+ const processed = new Set();
170
+ verifyInternal(ast, callFuncIdentifiers, pIsSameTask);
171
+ function verifyInternal(ast, callFuncIdentifiers, pIsSameTask) {
172
+ if (processed.has(ast)) {
173
+ return;
174
+ }
175
+ processed.add(ast);
176
+ let isSameMicroTask = pIsSameTask;
177
+ const differentMicroTaskEnterNodes = [];
178
+ (0, svelte_eslint_parser_1.traverseNodes)(ast, {
179
+ enterNode(node) {
180
+ if (isPromiseThenOrCatchBody(node)) {
182
181
  differentMicroTaskEnterNodes.push(node);
183
182
  isSameMicroTask = false;
184
183
  }
185
- }
186
- if (node.parent?.type === "AssignmentExpression" &&
187
- node.parent?.right.type === "AwaitExpression" &&
188
- node.parent?.left === node) {
189
- differentMicroTaskEnterNodes.push(node);
190
- isSameMicroTask = false;
191
- }
192
- if (node.type === "Identifier" && isFunctionCall(node)) {
193
- const functionDeclarationNode = getFunctionDeclarationNode(context, node);
194
- if (functionDeclarationNode) {
195
- doLint(context, functionDeclarationNode, [...callFuncIdentifiers, node], tickCallExpressions, taskReferences, reactiveVariableNames, reactiveVariableReferences, isSameMicroTask);
184
+ for (const { node: callExpression } of [
185
+ ...tickCallExpressions,
186
+ ...taskReferences,
187
+ ]) {
188
+ if (isChildNode(callExpression, node)) {
189
+ differentMicroTaskEnterNodes.push(node);
190
+ isSameMicroTask = false;
191
+ }
196
192
  }
197
- }
198
- if (!isSameMicroTask) {
199
- if (isReactiveVariableNode(reactiveVariableReferences, node) &&
200
- reactiveVariableNames.includes(node.name) &&
201
- isNodeForAssign(node)) {
202
- context.report({
203
- node,
204
- loc: node.loc,
205
- messageId: "unexpected",
206
- });
207
- callFuncIdentifiers.forEach((callFuncIdentifier) => {
193
+ if (node.parent?.type === "AssignmentExpression" &&
194
+ node.parent?.right.type === "AwaitExpression" &&
195
+ node.parent?.left === node) {
196
+ differentMicroTaskEnterNodes.push(node);
197
+ isSameMicroTask = false;
198
+ }
199
+ if (node.type === "Identifier" && isFunctionCall(node)) {
200
+ const functionDeclarationNode = getFunctionDeclarationNode(context, node);
201
+ if (functionDeclarationNode) {
202
+ verifyInternal(functionDeclarationNode, [...callFuncIdentifiers, node], isSameMicroTask);
203
+ }
204
+ }
205
+ if (!isSameMicroTask) {
206
+ if (isReactiveVariableNode(reactiveVariableReferences, node) &&
207
+ reactiveVariableNames.includes(node.name) &&
208
+ isNodeForAssign(node)) {
208
209
  context.report({
209
- node: callFuncIdentifier,
210
- loc: callFuncIdentifier.loc,
211
- messageId: "unexpectedCall",
212
- data: {
213
- variableName: node.name,
214
- },
210
+ node,
211
+ loc: node.loc,
212
+ messageId: "unexpected",
213
+ });
214
+ callFuncIdentifiers.forEach((callFuncIdentifier) => {
215
+ context.report({
216
+ node: callFuncIdentifier,
217
+ loc: callFuncIdentifier.loc,
218
+ messageId: "unexpectedCall",
219
+ data: {
220
+ variableName: node.name,
221
+ },
222
+ });
215
223
  });
216
- });
224
+ }
217
225
  }
218
- }
219
- },
220
- leaveNode(node) {
221
- if (node.type === "AwaitExpression") {
222
- if (ast.parent?.type === "SvelteReactiveStatement") {
223
- if (!isInsideOfFunction(node)) {
226
+ },
227
+ leaveNode(node) {
228
+ if (node.type === "AwaitExpression") {
229
+ if (ast.parent?.type === "SvelteReactiveStatement") {
230
+ if (!isInsideOfFunction(node)) {
231
+ isSameMicroTask = false;
232
+ }
233
+ }
234
+ else {
224
235
  isSameMicroTask = false;
225
236
  }
226
237
  }
227
- else {
228
- isSameMicroTask = false;
238
+ if (differentMicroTaskEnterNodes.includes(node)) {
239
+ isSameMicroTask = true;
229
240
  }
230
- }
231
- if (differentMicroTaskEnterNodes.includes(node)) {
232
- isSameMicroTask = true;
233
- }
234
- },
235
- });
241
+ },
242
+ });
243
+ }
236
244
  }
237
245
  exports.default = (0, utils_1.createRule)("infinite-reactive-loop", {
238
246
  meta: {
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const eslint_utils_1 = require("eslint-utils");
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
6
  const VALUE_SCHEMA = { enum: ["never", "always"] };
@@ -2,7 +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 eslint_utils_1 = require("eslint-utils");
5
+ const eslint_utils_1 = require("@eslint-community/eslint-utils");
6
6
  const DOM_MANIPULATING_METHODS = new Set([
7
7
  "appendChild",
8
8
  "insertBefore",
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const eslint_utils_1 = require("eslint-utils");
3
+ 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");
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createStoreChecker = exports.extractStoreReferences = void 0;
4
- const eslint_utils_1 = require("eslint-utils");
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
7
  function* extractStoreReferences(context, storeNames = ["writable", "readable", "derived"]) {
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const eslint_utils_1 = require("eslint-utils");
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
6
  exports.default = (0, utils_1.createRule)("require-event-dispatcher-types", {
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.extractLeadingComments = void 0;
4
- const eslint_utils_1 = require("eslint-utils");
4
+ const eslint_utils_1 = require("@eslint-community/eslint-utils");
5
5
  function extractLeadingComments(context, node) {
6
6
  const sourceCode = context.getSourceCode();
7
7
  const beforeToken = sourceCode.getTokenBefore(node, {
@@ -27,7 +27,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.isExpressionIdentifier = exports.isVoidHtmlElement = exports.getNodeName = exports.getDirectiveName = exports.getAttributeKeyText = exports.getMustacheTokens = exports.getAttributeValueQuoteAndRange = exports.getParent = exports.getScope = exports.findVariable = exports.getLangValue = exports.getStaticAttributeValue = exports.findBindDirective = exports.findShorthandAttribute = exports.findAttribute = exports.isHTMLElementLike = exports.needParentheses = exports.getStringIfConstant = exports.equalTokens = void 0;
30
- const eslintUtils = __importStar(require("eslint-utils"));
30
+ const eslintUtils = __importStar(require("@eslint-community/eslint-utils"));
31
31
  const void_elements_1 = __importDefault(require("./void-elements"));
32
32
  function equalTokens(left, right, sourceCode) {
33
33
  const tokensL = sourceCode.getTokens(left);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eslint-plugin-svelte",
3
- "version": "2.21.0",
3
+ "version": "2.23.0",
4
4
  "description": "ESLint plugin for Svelte using AST",
5
5
  "repository": "git+https://github.com/ota-meshi/eslint-plugin-svelte.git",
6
6
  "homepage": "https://ota-meshi.github.io/eslint-plugin-svelte",
@@ -65,9 +65,9 @@
65
65
  }
66
66
  },
67
67
  "dependencies": {
68
+ "@eslint-community/eslint-utils": "^4.2.0",
68
69
  "@jridgewell/sourcemap-codec": "^1.4.14",
69
70
  "debug": "^4.3.1",
70
- "eslint-utils": "^3.0.0",
71
71
  "esutils": "^2.0.3",
72
72
  "known-css-properties": "^0.27.0",
73
73
  "postcss": "^8.4.5",
@@ -158,13 +158,13 @@
158
158
  "semver": "^7.3.5",
159
159
  "simple-git-hooks": "^2.8.0",
160
160
  "stylelint": "^15.0.0",
161
- "stylelint-config-standard": "^30.0.0",
161
+ "stylelint-config-standard": "^31.0.0",
162
162
  "stylus": "^0.59.0",
163
163
  "svelte": "^3.46.1",
164
164
  "svelte-adapter-ghpages": "0.1.0",
165
165
  "svelte-i18n": "^3.4.0",
166
166
  "type-coverage": "^2.22.0",
167
- "typescript": "^4.9.3",
167
+ "typescript": "^5.0.0",
168
168
  "vite": "^4.0.0",
169
169
  "vite-plugin-svelte-md": "^0.1.5",
170
170
  "yaml": "^2.1.1",