eslint-plugin-svelte 2.6.0 → 2.7.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 +3 -37
- package/lib/configs/prettier.d.ts +1 -0
- package/lib/configs/prettier.js +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/rules/no-store-async.d.ts +2 -0
- package/lib/rules/no-store-async.js +46 -0
- package/lib/rules/no-trailing-spaces.d.ts +2 -0
- package/lib/rules/no-trailing-spaces.js +91 -0
- package/lib/rules/reference-helpers/svelte-store.d.ts +6 -0
- package/lib/rules/reference-helpers/svelte-store.js +27 -0
- package/lib/rules/require-stores-init.js +2 -24
- package/lib/utils/rules.js +4 -0
- package/package.json +8 -9
package/README.md
CHANGED
|
@@ -269,6 +269,7 @@ These rules relate to possible syntax or logic errors in Svelte code:
|
|
|
269
269
|
| [svelte/no-not-function-handler](https://ota-meshi.github.io/eslint-plugin-svelte/rules/no-not-function-handler/) | disallow use of not function in event handler | :star: |
|
|
270
270
|
| [svelte/no-object-in-text-mustaches](https://ota-meshi.github.io/eslint-plugin-svelte/rules/no-object-in-text-mustaches/) | disallow objects in text mustache interpolation | :star: |
|
|
271
271
|
| [svelte/no-shorthand-style-property-overrides](https://ota-meshi.github.io/eslint-plugin-svelte/rules/no-shorthand-style-property-overrides/) | disallow shorthand style properties that override related longhand properties | :star: |
|
|
272
|
+
| [svelte/no-store-async](https://ota-meshi.github.io/eslint-plugin-svelte/rules/no-store-async/) | disallow using async/await inside svelte stores because it causes issues with the auto-unsubscribing features | |
|
|
272
273
|
| [svelte/no-unknown-style-directive-property](https://ota-meshi.github.io/eslint-plugin-svelte/rules/no-unknown-style-directive-property/) | disallow unknown `style:property` | :star: |
|
|
273
274
|
| [svelte/valid-compile](https://ota-meshi.github.io/eslint-plugin-svelte/rules/valid-compile/) | disallow warnings when compiling. | :star: |
|
|
274
275
|
|
|
@@ -325,6 +326,7 @@ These rules extend the rules provided by ESLint itself to work well in Svelte:
|
|
|
325
326
|
| Rule ID | Description | |
|
|
326
327
|
|:--------|:------------|:---|
|
|
327
328
|
| [svelte/no-inner-declarations](https://ota-meshi.github.io/eslint-plugin-svelte/rules/no-inner-declarations/) | disallow variable or `function` declarations in nested blocks | :star: |
|
|
329
|
+
| [svelte/no-trailing-spaces](https://ota-meshi.github.io/eslint-plugin-svelte/rules/no-trailing-spaces/) | disallow trailing whitespace at the end of lines | :wrench: |
|
|
328
330
|
|
|
329
331
|
## System
|
|
330
332
|
|
|
@@ -347,43 +349,7 @@ Welcome contributing!
|
|
|
347
349
|
|
|
348
350
|
Please use GitHub's Issues/PRs.
|
|
349
351
|
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
- `yarn test` runs tests.
|
|
353
|
-
- `yarn cover` runs tests and measures coverage.
|
|
354
|
-
- `yarn new [new-rule-name]` generate the files needed to implement the new rule.
|
|
355
|
-
- `yarn update` runs in order to update readme and recommended configuration.
|
|
356
|
-
- `yarn docs:watch` launch the document site in development mode.
|
|
357
|
-
|
|
358
|
-
### Test the Rule
|
|
359
|
-
|
|
360
|
-
Rule testing almost always uses fixtures.
|
|
361
|
-
For example, for an `indent` rule, the `.ts` file that runs the test is `tests/src/rules/indent.ts` and the fixture is in `tests/fixtures/rules/indent`.
|
|
362
|
-
The fixture directory has an `invalid` directory and a `valid` directory.
|
|
363
|
-
|
|
364
|
-
- The `invalid` directory contains test cases where the rule reports problems.
|
|
365
|
-
- The `valid` directory contains test cases where the rule does not report a problem.
|
|
366
|
-
|
|
367
|
-
The fixture input file should be named `*-input.svelte`. It is automatically collected and tested.
|
|
368
|
-
If your test requires configuration, you need to add a json file with the configuration.
|
|
369
|
-
|
|
370
|
-
- If you want to apply a configuration to `my-test-input.svelte`, add `my-test-config.json`.
|
|
371
|
-
- If you want to apply the same configuration to all the fixtures in that directory, add `_config.json`.
|
|
372
|
-
|
|
373
|
-
To verify the output of invalid test cases requires `*-errors.json`, and `*-output.svelte` (for auto-fix). However, you don't have to add them yourself. If they do not exist, they will be automatically generated when you run the test. In other words, delete them manually when you want to recreate them.
|
|
374
|
-
|
|
375
|
-
**Tips**:
|
|
376
|
-
|
|
377
|
-
If you want to test only one rule, run the following command (for `indent` rule):
|
|
378
|
-
|
|
379
|
-
```sh
|
|
380
|
-
yarn test -g indent
|
|
381
|
-
```
|
|
382
|
-
|
|
383
|
-
Take <https://stackoverflow.com/questions/10832031/how-to-run-a-single-test-with-mocha> as reference for details.
|
|
384
|
-
|
|
385
|
-
If you want to test only `my-test-input.svelte`, add `my-test-config.json` and save `{"only": true}`.
|
|
386
|
-
(Note that `{"only": true}` must be removed before making a pull request.)
|
|
352
|
+
See also [CONTRIBUTING.md](./CONTRIBUTING.md)
|
|
387
353
|
|
|
388
354
|
### Working With Rules
|
|
389
355
|
|
|
@@ -9,6 +9,7 @@ declare const _default: {
|
|
|
9
9
|
"svelte/max-attributes-per-line": string;
|
|
10
10
|
"svelte/mustache-spacing": string;
|
|
11
11
|
"svelte/no-spaces-around-equal-signs-in-attribute": string;
|
|
12
|
+
"svelte/no-trailing-spaces": string;
|
|
12
13
|
"svelte/shorthand-attribute": string;
|
|
13
14
|
"svelte/shorthand-directive": string;
|
|
14
15
|
};
|
package/lib/configs/prettier.js
CHANGED
|
@@ -16,6 +16,7 @@ module.exports = {
|
|
|
16
16
|
"svelte/max-attributes-per-line": "off",
|
|
17
17
|
"svelte/mustache-spacing": "off",
|
|
18
18
|
"svelte/no-spaces-around-equal-signs-in-attribute": "off",
|
|
19
|
+
"svelte/no-trailing-spaces": "off",
|
|
19
20
|
"svelte/shorthand-attribute": "off",
|
|
20
21
|
"svelte/shorthand-directive": "off",
|
|
21
22
|
},
|
package/lib/index.d.ts
CHANGED
|
@@ -44,6 +44,7 @@ declare const _default: {
|
|
|
44
44
|
"svelte/max-attributes-per-line": string;
|
|
45
45
|
"svelte/mustache-spacing": string;
|
|
46
46
|
"svelte/no-spaces-around-equal-signs-in-attribute": string;
|
|
47
|
+
"svelte/no-trailing-spaces": string;
|
|
47
48
|
"svelte/shorthand-attribute": string;
|
|
48
49
|
"svelte/shorthand-directive": string;
|
|
49
50
|
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const utils_1 = require("../utils");
|
|
4
|
+
const svelte_store_1 = require("./reference-helpers/svelte-store");
|
|
5
|
+
exports.default = (0, utils_1.createRule)("no-store-async", {
|
|
6
|
+
meta: {
|
|
7
|
+
docs: {
|
|
8
|
+
description: "disallow using async/await inside svelte stores because it causes issues with the auto-unsubscribing features",
|
|
9
|
+
category: "Possible Errors",
|
|
10
|
+
recommended: false,
|
|
11
|
+
default: "error",
|
|
12
|
+
},
|
|
13
|
+
schema: [],
|
|
14
|
+
messages: {
|
|
15
|
+
unexpected: "Do not pass async functions to svelte stores.",
|
|
16
|
+
},
|
|
17
|
+
type: "problem",
|
|
18
|
+
},
|
|
19
|
+
create(context) {
|
|
20
|
+
return {
|
|
21
|
+
Program() {
|
|
22
|
+
for (const { node } of (0, svelte_store_1.extractStoreReferences)(context)) {
|
|
23
|
+
const [, fn] = node.arguments;
|
|
24
|
+
if (!fn ||
|
|
25
|
+
(fn.type !== "ArrowFunctionExpression" &&
|
|
26
|
+
fn.type !== "FunctionExpression") ||
|
|
27
|
+
!fn.async) {
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
const start = fn.loc?.start ?? { line: 1, column: 0 };
|
|
31
|
+
context.report({
|
|
32
|
+
node: fn,
|
|
33
|
+
loc: {
|
|
34
|
+
start,
|
|
35
|
+
end: {
|
|
36
|
+
line: start.line,
|
|
37
|
+
column: start.column + 5,
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
messageId: "unexpected",
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
},
|
|
46
|
+
});
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const utils_1 = require("../utils");
|
|
4
|
+
exports.default = (0, utils_1.createRule)("no-trailing-spaces", {
|
|
5
|
+
meta: {
|
|
6
|
+
type: "layout",
|
|
7
|
+
docs: {
|
|
8
|
+
description: "disallow trailing whitespace at the end of lines",
|
|
9
|
+
category: "Extension Rules",
|
|
10
|
+
recommended: false,
|
|
11
|
+
extensionRule: "no-trailing-spaces",
|
|
12
|
+
conflictWithPrettier: true,
|
|
13
|
+
},
|
|
14
|
+
fixable: "whitespace",
|
|
15
|
+
schema: [
|
|
16
|
+
{
|
|
17
|
+
type: "object",
|
|
18
|
+
properties: {
|
|
19
|
+
skipBlankLines: { type: "boolean" },
|
|
20
|
+
ignoreComments: { type: "boolean" },
|
|
21
|
+
},
|
|
22
|
+
additionalProperties: false,
|
|
23
|
+
},
|
|
24
|
+
],
|
|
25
|
+
messages: {
|
|
26
|
+
trailingSpace: "Trailing spaces not allowed.",
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
create(context) {
|
|
30
|
+
const options = context.options[0];
|
|
31
|
+
const skipBlankLines = options?.skipBlankLines || false;
|
|
32
|
+
const ignoreComments = options?.ignoreComments || false;
|
|
33
|
+
const sourceCode = context.getSourceCode();
|
|
34
|
+
const ignoreLineNumbers = new Set();
|
|
35
|
+
if (ignoreComments) {
|
|
36
|
+
for (const { type, loc } of sourceCode.getAllComments()) {
|
|
37
|
+
const endLine = type === "Block" ? loc.end.line - 1 : loc.end.line;
|
|
38
|
+
for (let i = loc.start.line; i <= endLine; i++) {
|
|
39
|
+
ignoreLineNumbers.add(i);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function report(loc) {
|
|
44
|
+
context.report({
|
|
45
|
+
loc,
|
|
46
|
+
messageId: "trailingSpace",
|
|
47
|
+
fix(fixer) {
|
|
48
|
+
return fixer.removeRange([
|
|
49
|
+
sourceCode.getIndexFromLoc(loc.start),
|
|
50
|
+
sourceCode.getIndexFromLoc(loc.end),
|
|
51
|
+
]);
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
function collectIgnoreLineNumbers({ loc }) {
|
|
56
|
+
const endLine = loc.end.line - 1;
|
|
57
|
+
for (let i = loc.start.line; i <= endLine; i++) {
|
|
58
|
+
ignoreLineNumbers.add(i);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
TemplateElement: collectIgnoreLineNumbers,
|
|
63
|
+
...(ignoreComments
|
|
64
|
+
? {
|
|
65
|
+
SvelteHTMLComment: collectIgnoreLineNumbers,
|
|
66
|
+
}
|
|
67
|
+
: {}),
|
|
68
|
+
"Program:exit"() {
|
|
69
|
+
const lines = sourceCode.lines;
|
|
70
|
+
for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {
|
|
71
|
+
const line = lines[lineIndex];
|
|
72
|
+
if (skipBlankLines && !line.trim()) {
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
const lineNumber = lineIndex + 1;
|
|
76
|
+
if (ignoreLineNumbers.has(lineNumber)) {
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
const trimmed = line.trimEnd();
|
|
80
|
+
if (trimmed === line) {
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
report({
|
|
84
|
+
start: { line: lineNumber, column: trimmed.length },
|
|
85
|
+
end: { line: lineNumber, column: line.length },
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
},
|
|
91
|
+
});
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.extractStoreReferences = void 0;
|
|
4
|
+
const eslint_utils_1 = require("eslint-utils");
|
|
5
|
+
function* extractStoreReferences(context) {
|
|
6
|
+
const referenceTracker = new eslint_utils_1.ReferenceTracker(context.getScope());
|
|
7
|
+
for (const { node, path } of referenceTracker.iterateEsmReferences({
|
|
8
|
+
"svelte/store": {
|
|
9
|
+
[eslint_utils_1.ReferenceTracker.ESM]: true,
|
|
10
|
+
writable: {
|
|
11
|
+
[eslint_utils_1.ReferenceTracker.CALL]: true,
|
|
12
|
+
},
|
|
13
|
+
readable: {
|
|
14
|
+
[eslint_utils_1.ReferenceTracker.CALL]: true,
|
|
15
|
+
},
|
|
16
|
+
derived: {
|
|
17
|
+
[eslint_utils_1.ReferenceTracker.CALL]: true,
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
})) {
|
|
21
|
+
yield {
|
|
22
|
+
node: node,
|
|
23
|
+
name: path[path.length - 1],
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.extractStoreReferences = extractStoreReferences;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const utils_1 = require("../utils");
|
|
4
|
-
const
|
|
4
|
+
const svelte_store_1 = require("./reference-helpers/svelte-store");
|
|
5
5
|
exports.default = (0, utils_1.createRule)("require-stores-init", {
|
|
6
6
|
meta: {
|
|
7
7
|
docs: {
|
|
@@ -16,31 +16,9 @@ exports.default = (0, utils_1.createRule)("require-stores-init", {
|
|
|
16
16
|
type: "suggestion",
|
|
17
17
|
},
|
|
18
18
|
create(context) {
|
|
19
|
-
function* extractStoreReferences() {
|
|
20
|
-
const referenceTracker = new eslint_utils_1.ReferenceTracker(context.getScope());
|
|
21
|
-
for (const { node, path } of referenceTracker.iterateEsmReferences({
|
|
22
|
-
"svelte/store": {
|
|
23
|
-
[eslint_utils_1.ReferenceTracker.ESM]: true,
|
|
24
|
-
writable: {
|
|
25
|
-
[eslint_utils_1.ReferenceTracker.CALL]: true,
|
|
26
|
-
},
|
|
27
|
-
readable: {
|
|
28
|
-
[eslint_utils_1.ReferenceTracker.CALL]: true,
|
|
29
|
-
},
|
|
30
|
-
derived: {
|
|
31
|
-
[eslint_utils_1.ReferenceTracker.CALL]: true,
|
|
32
|
-
},
|
|
33
|
-
},
|
|
34
|
-
})) {
|
|
35
|
-
yield {
|
|
36
|
-
node: node,
|
|
37
|
-
name: path[path.length - 1],
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
19
|
return {
|
|
42
20
|
Program() {
|
|
43
|
-
for (const { node, name } of extractStoreReferences()) {
|
|
21
|
+
for (const { node, name } of (0, svelte_store_1.extractStoreReferences)(context)) {
|
|
44
22
|
const minArgs = name === "writable" || name === "readable"
|
|
45
23
|
? 1
|
|
46
24
|
: name === "derived"
|
package/lib/utils/rules.js
CHANGED
|
@@ -26,7 +26,9 @@ const no_reactive_functions_1 = __importDefault(require("../rules/no-reactive-fu
|
|
|
26
26
|
const no_reactive_literals_1 = __importDefault(require("../rules/no-reactive-literals"));
|
|
27
27
|
const no_shorthand_style_property_overrides_1 = __importDefault(require("../rules/no-shorthand-style-property-overrides"));
|
|
28
28
|
const no_spaces_around_equal_signs_in_attribute_1 = __importDefault(require("../rules/no-spaces-around-equal-signs-in-attribute"));
|
|
29
|
+
const no_store_async_1 = __importDefault(require("../rules/no-store-async"));
|
|
29
30
|
const no_target_blank_1 = __importDefault(require("../rules/no-target-blank"));
|
|
31
|
+
const no_trailing_spaces_1 = __importDefault(require("../rules/no-trailing-spaces"));
|
|
30
32
|
const no_unknown_style_directive_property_1 = __importDefault(require("../rules/no-unknown-style-directive-property"));
|
|
31
33
|
const no_unused_svelte_ignore_1 = __importDefault(require("../rules/no-unused-svelte-ignore"));
|
|
32
34
|
const no_useless_mustaches_1 = __importDefault(require("../rules/no-useless-mustaches"));
|
|
@@ -63,7 +65,9 @@ exports.rules = [
|
|
|
63
65
|
no_reactive_literals_1.default,
|
|
64
66
|
no_shorthand_style_property_overrides_1.default,
|
|
65
67
|
no_spaces_around_equal_signs_in_attribute_1.default,
|
|
68
|
+
no_store_async_1.default,
|
|
66
69
|
no_target_blank_1.default,
|
|
70
|
+
no_trailing_spaces_1.default,
|
|
67
71
|
no_unknown_style_directive_property_1.default,
|
|
68
72
|
no_unused_svelte_ignore_1.default,
|
|
69
73
|
no_useless_mustaches_1.default,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eslint-plugin-svelte",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.7.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",
|
|
@@ -44,15 +44,15 @@
|
|
|
44
44
|
"prebuild": "yarn clean",
|
|
45
45
|
"prepare": "simple-git-hooks && yarn-deduplicate --strategy fewer || exit 0",
|
|
46
46
|
"prerelease": "yarn clean && yarn build",
|
|
47
|
-
"pretest": "yarn build",
|
|
48
47
|
"release": "changeset publish",
|
|
49
48
|
"svelte-kit": "node --experimental-loader ./svelte-kit-import-hook.mjs node_modules/vite/bin/vite.js",
|
|
50
49
|
"test": "yarn mocha \"tests/src/**/*.ts\" --reporter dot --timeout 60000",
|
|
51
|
-
"test:debug": "
|
|
50
|
+
"test:debug": "env-cmd -e debug yarn test",
|
|
52
51
|
"ts": "node -r esbuild-register",
|
|
53
52
|
"typecov": "type-coverage",
|
|
54
53
|
"update": "yarn ts ./tools/update.ts && yarn format-for-gen-file",
|
|
55
|
-
"version": "env-cmd -e version yarn update
|
|
54
|
+
"version": "env-cmd -e version yarn update",
|
|
55
|
+
"version:ci": "env-cmd -e version-ci yarn update && changeset version"
|
|
56
56
|
},
|
|
57
57
|
"peerDependencies": {
|
|
58
58
|
"eslint": "^7.0.0 || ^8.0.0-0",
|
|
@@ -90,7 +90,7 @@
|
|
|
90
90
|
"@ota-meshi/eslint-plugin": "^0.11.3",
|
|
91
91
|
"@sindresorhus/slugify": "^2.1.0",
|
|
92
92
|
"@sveltejs/adapter-static": "^1.0.0-next.26",
|
|
93
|
-
"@sveltejs/kit": "^1.0.0-next.
|
|
93
|
+
"@sveltejs/kit": "^1.0.0-next.406",
|
|
94
94
|
"@types/babel__core": "^7.1.19",
|
|
95
95
|
"@types/cross-spawn": "^6.0.2",
|
|
96
96
|
"@types/escape-html": "^1.0.2",
|
|
@@ -113,7 +113,6 @@
|
|
|
113
113
|
"@typescript-eslint/parser-v4": "npm:@typescript-eslint/parser@4",
|
|
114
114
|
"assert": "^2.0.0",
|
|
115
115
|
"commitlint": "^17.0.3",
|
|
116
|
-
"cross-env": "^7.0.3",
|
|
117
116
|
"env-cmd": "^10.1.0",
|
|
118
117
|
"esbuild": "^0.15.0",
|
|
119
118
|
"esbuild-register": "^3.2.0",
|
|
@@ -148,7 +147,7 @@
|
|
|
148
147
|
"pako": "^2.0.3",
|
|
149
148
|
"postcss-nested": "^5.0.6",
|
|
150
149
|
"prettier": "^2.2.1",
|
|
151
|
-
"prettier-plugin-pkg": "^0.
|
|
150
|
+
"prettier-plugin-pkg": "^0.17.0",
|
|
152
151
|
"prettier-plugin-svelte": "^2.6.0",
|
|
153
152
|
"prism-svelte": "^0.5.0",
|
|
154
153
|
"prismjs": "^1.25.0",
|
|
@@ -156,7 +155,7 @@
|
|
|
156
155
|
"semver": "^7.3.5",
|
|
157
156
|
"simple-git-hooks": "^2.8.0",
|
|
158
157
|
"stylelint": "^14.0.0",
|
|
159
|
-
"stylelint-config-standard": "^
|
|
158
|
+
"stylelint-config-standard": "^28.0.0",
|
|
160
159
|
"stylus": "^0.59.0",
|
|
161
160
|
"svelte": "^3.46.1",
|
|
162
161
|
"svelte-adapter-ghpages": "0.0.2",
|
|
@@ -171,7 +170,7 @@
|
|
|
171
170
|
"access": "public"
|
|
172
171
|
},
|
|
173
172
|
"typeCoverage": {
|
|
174
|
-
"atLeast": 98.
|
|
173
|
+
"atLeast": 98.64,
|
|
175
174
|
"cache": true,
|
|
176
175
|
"detail": true,
|
|
177
176
|
"ignoreAsAssertion": true,
|