@angular-eslint/eslint-plugin-template 19.3.1-alpha.1 → 19.3.1-alpha.10
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/dist/configs/accessibility.json +15 -15
- package/dist/configs/all.json +35 -35
- package/dist/configs/process-inline-templates.json +7 -7
- package/dist/configs/recommended.json +7 -7
- package/dist/index.js +17 -7
- package/dist/processors.d.ts.map +1 -1
- package/dist/processors.js +15 -3
- package/dist/rules/no-any.d.ts.map +1 -1
- package/dist/rules/no-any.js +53 -25
- package/package.json +5 -5
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
2
|
+
"parser": "@angular-eslint/template-parser",
|
|
3
|
+
"plugins": ["@angular-eslint/template"],
|
|
4
|
+
"rules": {
|
|
5
|
+
"@angular-eslint/template/alt-text": "error",
|
|
6
|
+
"@angular-eslint/template/click-events-have-key-events": "error",
|
|
7
|
+
"@angular-eslint/template/elements-content": "error",
|
|
8
|
+
"@angular-eslint/template/interactive-supports-focus": "error",
|
|
9
|
+
"@angular-eslint/template/label-has-associated-control": "error",
|
|
10
|
+
"@angular-eslint/template/mouse-events-have-key-events": "error",
|
|
11
|
+
"@angular-eslint/template/no-autofocus": "error",
|
|
12
|
+
"@angular-eslint/template/no-distracting-elements": "error",
|
|
13
|
+
"@angular-eslint/template/role-has-required-aria": "error",
|
|
14
|
+
"@angular-eslint/template/table-scope": "error",
|
|
15
|
+
"@angular-eslint/template/valid-aria": "error"
|
|
16
|
+
}
|
|
17
17
|
}
|
package/dist/configs/all.json
CHANGED
|
@@ -1,37 +1,37 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
2
|
+
"parser": "@angular-eslint/template-parser",
|
|
3
|
+
"plugins": ["@angular-eslint/template"],
|
|
4
|
+
"rules": {
|
|
5
|
+
"@angular-eslint/template/alt-text": "error",
|
|
6
|
+
"@angular-eslint/template/attributes-order": "error",
|
|
7
|
+
"@angular-eslint/template/banana-in-box": "error",
|
|
8
|
+
"@angular-eslint/template/button-has-type": "error",
|
|
9
|
+
"@angular-eslint/template/click-events-have-key-events": "error",
|
|
10
|
+
"@angular-eslint/template/conditional-complexity": "error",
|
|
11
|
+
"@angular-eslint/template/cyclomatic-complexity": "error",
|
|
12
|
+
"@angular-eslint/template/elements-content": "error",
|
|
13
|
+
"@angular-eslint/template/eqeqeq": "error",
|
|
14
|
+
"@angular-eslint/template/i18n": "error",
|
|
15
|
+
"@angular-eslint/template/interactive-supports-focus": "error",
|
|
16
|
+
"@angular-eslint/template/label-has-associated-control": "error",
|
|
17
|
+
"@angular-eslint/template/mouse-events-have-key-events": "error",
|
|
18
|
+
"@angular-eslint/template/no-any": "error",
|
|
19
|
+
"@angular-eslint/template/no-autofocus": "error",
|
|
20
|
+
"@angular-eslint/template/no-call-expression": "error",
|
|
21
|
+
"@angular-eslint/template/no-distracting-elements": "error",
|
|
22
|
+
"@angular-eslint/template/no-duplicate-attributes": "error",
|
|
23
|
+
"@angular-eslint/template/no-inline-styles": "error",
|
|
24
|
+
"@angular-eslint/template/no-interpolation-in-attributes": "error",
|
|
25
|
+
"@angular-eslint/template/no-negated-async": "error",
|
|
26
|
+
"@angular-eslint/template/no-positive-tabindex": "error",
|
|
27
|
+
"@angular-eslint/template/prefer-contextual-for-variables": "error",
|
|
28
|
+
"@angular-eslint/template/prefer-control-flow": "error",
|
|
29
|
+
"@angular-eslint/template/prefer-ngsrc": "error",
|
|
30
|
+
"@angular-eslint/template/prefer-self-closing-tags": "error",
|
|
31
|
+
"@angular-eslint/template/prefer-static-string-properties": "error",
|
|
32
|
+
"@angular-eslint/template/role-has-required-aria": "error",
|
|
33
|
+
"@angular-eslint/template/table-scope": "error",
|
|
34
|
+
"@angular-eslint/template/use-track-by-function": "error",
|
|
35
|
+
"@angular-eslint/template/valid-aria": "error"
|
|
36
|
+
}
|
|
37
37
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
2
|
+
"parser": "@typescript-eslint/parser",
|
|
3
|
+
"parserOptions": {
|
|
4
|
+
"ecmaVersion": 2020,
|
|
5
|
+
"sourceType": "module"
|
|
6
|
+
},
|
|
7
|
+
"plugins": ["@angular-eslint/template"],
|
|
8
|
+
"processor": "@angular-eslint/template/extract-inline-html"
|
|
9
9
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
2
|
+
"parser": "@angular-eslint/template-parser",
|
|
3
|
+
"plugins": ["@angular-eslint/template"],
|
|
4
|
+
"rules": {
|
|
5
|
+
"@angular-eslint/template/banana-in-box": "error",
|
|
6
|
+
"@angular-eslint/template/eqeqeq": "error",
|
|
7
|
+
"@angular-eslint/template/no-negated-async": "error"
|
|
8
|
+
}
|
|
9
9
|
}
|
package/dist/index.js
CHANGED
|
@@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
15
15
|
}) : function(o, v) {
|
|
16
16
|
o["default"] = v;
|
|
17
17
|
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
};
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
25
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
37
|
};
|
package/dist/processors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processors.d.ts","sourceRoot":"","sources":["../src/processors.ts"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AACH,wBAAgB,0CAA0C,CACxD,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,OAAO,CA2BT;AAED,KAAK,gBAAgB,GAAG,CAAC,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,CAAC;AAExE,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,gBAAgB,CAmJlB;AAyDD,wBAAgB,wBAAwB,CACtC,wBAAwB,EAAE;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE;QACJ,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH,EAAE,EAAE,EACL,QAAQ,EAAE,MAAM,GACf,SAAS,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"processors.d.ts","sourceRoot":"","sources":["../src/processors.ts"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AACH,wBAAgB,0CAA0C,CACxD,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,OAAO,CA2BT;AAED,KAAK,gBAAgB,GAAG,CAAC,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,CAAC;AAExE,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,gBAAgB,CAmJlB;AAyDD,wBAAgB,wBAAwB,CACtC,wBAAwB,EAAE;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE;QACJ,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH,EAAE,EAAE,EACL,QAAQ,EAAE,MAAM,GACf,SAAS,OAAO,EAAE,CAgEpB;;;;;;;;;;;AAED,wBASE"}
|
package/dist/processors.js
CHANGED
|
@@ -222,9 +222,21 @@ function postprocessComponentFile(multiDimensionalMessages, filename) {
|
|
|
222
222
|
return [];
|
|
223
223
|
}
|
|
224
224
|
return messagesFromInlineTemplateHTML.map((message) => {
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
225
|
+
// The first line of the inline template starts at the column after
|
|
226
|
+
// the opening quote in the TypeScript file, so we need to adjust
|
|
227
|
+
// the message's column by that amount when the message starts on
|
|
228
|
+
// the first line. The character we recorded was the quote's column,
|
|
229
|
+
// so add one to get the column where the actual string starts.
|
|
230
|
+
if (message.line === 1) {
|
|
231
|
+
message.column += rangeData.lineAndCharacter.start.character + 1;
|
|
232
|
+
}
|
|
233
|
+
// The same thing applies to the end column
|
|
234
|
+
// if it also ends on the first line.
|
|
235
|
+
if (message.endLine === 1) {
|
|
236
|
+
message.endColumn += rangeData.lineAndCharacter.start.character + 1;
|
|
237
|
+
}
|
|
238
|
+
message.line += rangeData.lineAndCharacter.start.line;
|
|
239
|
+
message.endLine += rangeData.lineAndCharacter.start.line;
|
|
228
240
|
if (message.fix) {
|
|
229
241
|
const startOffset = rangeData.range[0] + 1;
|
|
230
242
|
message.fix.range = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-any.d.ts","sourceRoot":"","sources":["../../src/rules/no-any.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"no-any.d.ts","sourceRoot":"","sources":["../../src/rules/no-any.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,OAAO,GAAG,EAAE,CAAC;AACzB,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,kBAAkB,CAAC;AACtD,eAAO,MAAM,SAAS,WAAW,CAAC;;AAGlC,wBA0FG"}
|
package/dist/rules/no-any.js
CHANGED
|
@@ -24,34 +24,62 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
24
24
|
create(context) {
|
|
25
25
|
(0, utils_1.ensureTemplateParser)(context);
|
|
26
26
|
const sourceCode = context.sourceCode;
|
|
27
|
+
const isAnyCall = (node) => {
|
|
28
|
+
if (!(node.receiver instanceof bundled_angular_compiler_1.PropertyRead)) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
if (node.receiver.name !== ANY_TYPE_CAST_FUNCTION_NAME) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
if (!(
|
|
35
|
+
// this.$any() is also valid usage of the native Angular $any()
|
|
36
|
+
(node.receiver.receiver instanceof bundled_angular_compiler_1.ThisReceiver ||
|
|
37
|
+
node.receiver.receiver instanceof bundled_angular_compiler_1.ImplicitReceiver))) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
return true;
|
|
41
|
+
};
|
|
42
|
+
const reportAnyCall = (node) => {
|
|
43
|
+
const { start, end } = node.sourceSpan;
|
|
44
|
+
const nameSpan = node.receiver.nameSpan;
|
|
45
|
+
context.report({
|
|
46
|
+
messageId: 'noAny',
|
|
47
|
+
loc: {
|
|
48
|
+
start: sourceCode.getLocFromIndex(start),
|
|
49
|
+
end: sourceCode.getLocFromIndex(end),
|
|
50
|
+
},
|
|
51
|
+
suggest: [
|
|
52
|
+
{
|
|
53
|
+
messageId: 'suggestRemoveAny',
|
|
54
|
+
fix: (fixer) => [
|
|
55
|
+
fixer.removeRange([nameSpan.start, nameSpan.end + 1]),
|
|
56
|
+
fixer.removeRange([end - 1, end]),
|
|
57
|
+
],
|
|
58
|
+
},
|
|
59
|
+
],
|
|
60
|
+
});
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Handles KeyedRead.KeyedRead cases like
|
|
64
|
+
* $any(attributeList)['NPSScore']['another']
|
|
65
|
+
*/
|
|
66
|
+
const findAndReportAnyCalls = (node) => {
|
|
67
|
+
if (node instanceof bundled_angular_compiler_1.Call && isAnyCall(node)) {
|
|
68
|
+
reportAnyCall(node);
|
|
69
|
+
}
|
|
70
|
+
else if (node instanceof bundled_angular_compiler_1.KeyedRead) {
|
|
71
|
+
findAndReportAnyCalls(node.receiver);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
27
74
|
return {
|
|
28
|
-
[`Call[receiver.name="${ANY_TYPE_CAST_FUNCTION_NAME}"]`](
|
|
29
|
-
if (!(
|
|
75
|
+
[`Call[receiver.name="${ANY_TYPE_CAST_FUNCTION_NAME}"]`](node) {
|
|
76
|
+
if (!isAnyCall(node)) {
|
|
30
77
|
return;
|
|
31
78
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
const nameSpan = receiver.nameSpan;
|
|
39
|
-
context.report({
|
|
40
|
-
messageId: 'noAny',
|
|
41
|
-
loc: {
|
|
42
|
-
start: sourceCode.getLocFromIndex(start),
|
|
43
|
-
end: sourceCode.getLocFromIndex(end),
|
|
44
|
-
},
|
|
45
|
-
suggest: [
|
|
46
|
-
{
|
|
47
|
-
messageId: 'suggestRemoveAny',
|
|
48
|
-
fix: (fixer) => [
|
|
49
|
-
fixer.removeRange([nameSpan.start, nameSpan.end + 1]),
|
|
50
|
-
fixer.removeRange([end - 1, end]),
|
|
51
|
-
],
|
|
52
|
-
},
|
|
53
|
-
],
|
|
54
|
-
});
|
|
79
|
+
reportAnyCall(node);
|
|
80
|
+
},
|
|
81
|
+
KeyedRead(node) {
|
|
82
|
+
findAndReportAnyCalls(node);
|
|
55
83
|
},
|
|
56
84
|
};
|
|
57
85
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@angular-eslint/eslint-plugin-template",
|
|
3
|
-
"version": "19.3.1-alpha.
|
|
3
|
+
"version": "19.3.1-alpha.10",
|
|
4
4
|
"description": "ESLint plugin for Angular Templates",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -20,13 +20,13 @@
|
|
|
20
20
|
"dependencies": {
|
|
21
21
|
"aria-query": "5.3.2",
|
|
22
22
|
"axobject-query": "4.1.0",
|
|
23
|
-
"@angular-eslint/
|
|
24
|
-
"@angular-eslint/
|
|
23
|
+
"@angular-eslint/utils": "19.3.1-alpha.10",
|
|
24
|
+
"@angular-eslint/bundled-angular-compiler": "19.3.1-alpha.10"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@types/aria-query": "5.0.4",
|
|
28
|
-
"@angular-eslint/template-parser": "19.3.1-alpha.
|
|
29
|
-
"@angular-eslint/test-utils": "19.3.1-alpha.
|
|
28
|
+
"@angular-eslint/template-parser": "19.3.1-alpha.10",
|
|
29
|
+
"@angular-eslint/test-utils": "19.3.1-alpha.10"
|
|
30
30
|
},
|
|
31
31
|
"peerDependencies": {
|
|
32
32
|
"@typescript-eslint/types": "^7.11.0 || ^8.0.0",
|