@angular-eslint/eslint-plugin-template 22.2.1-alpha.7 → 22.2.1-alpha.9
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/rules/alt-text.js +1 -1
- package/dist/rules/attributes-order.js +1 -1
- package/dist/rules/banana-in-box.js +1 -1
- package/dist/rules/button-has-type.js +1 -1
- package/dist/rules/click-events-have-key-events.js +1 -1
- package/dist/rules/conditional-complexity.js +1 -1
- package/dist/rules/cyclomatic-complexity.js +6 -6
- package/dist/rules/elements-content.js +1 -1
- package/dist/rules/eqeqeq.js +1 -1
- package/dist/rules/i18n.js +1 -1
- package/dist/rules/interactive-supports-focus.js +1 -1
- package/dist/rules/label-has-associated-control.js +1 -1
- package/dist/rules/mouse-events-have-key-events.js +1 -1
- package/dist/rules/no-any.js +1 -1
- package/dist/rules/no-autofocus.js +1 -1
- package/dist/rules/no-call-expression.js +3 -3
- package/dist/rules/no-distracting-elements.js +1 -1
- package/dist/rules/no-duplicate-attributes.js +1 -1
- package/dist/rules/no-empty-control-flow.js +1 -1
- package/dist/rules/no-inline-styles.js +1 -1
- package/dist/rules/no-interpolation-in-attributes.js +1 -1
- package/dist/rules/no-negated-async.js +1 -1
- package/dist/rules/no-nested-tags.js +1 -1
- package/dist/rules/no-non-null-assertion.js +1 -1
- package/dist/rules/no-outerhtml.js +1 -1
- package/dist/rules/no-positive-tabindex.js +1 -1
- package/dist/rules/prefer-at-else.js +1 -1
- package/dist/rules/prefer-at-empty.js +1 -1
- package/dist/rules/prefer-built-in-pipes.js +6 -6
- package/dist/rules/prefer-class-binding.js +1 -1
- package/dist/rules/prefer-contextual-for-variables.js +1 -1
- package/dist/rules/prefer-control-flow.js +1 -1
- package/dist/rules/prefer-ngsrc.js +1 -1
- package/dist/rules/prefer-self-closing-tags.js +1 -1
- package/dist/rules/prefer-static-string-properties.js +1 -1
- package/dist/rules/prefer-template-literal.js +1 -1
- package/dist/rules/require-switch-default.js +1 -1
- package/dist/rules/role-has-required-aria.js +1 -1
- package/dist/rules/table-scope.js +1 -1
- package/dist/rules/use-track-by-function.js +1 -1
- package/dist/rules/valid-aria.js +1 -1
- package/dist/utils/create-eslint-rule.d.ts.map +1 -1
- package/dist/utils/create-eslint-rule.js +1 -24
- package/package.json +5 -5
package/dist/rules/alt-text.js
CHANGED
|
@@ -16,8 +16,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
16
16
|
messages: {
|
|
17
17
|
altText: '<{{element}}/> element must have a text alternative.',
|
|
18
18
|
},
|
|
19
|
+
defaultOptions: [],
|
|
19
20
|
},
|
|
20
|
-
defaultOptions: [],
|
|
21
21
|
create(context) {
|
|
22
22
|
const parserServices = (0, utils_1.getTemplateParserServices)(context);
|
|
23
23
|
return {
|
|
@@ -59,8 +59,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
59
59
|
messages: {
|
|
60
60
|
attributesOrder: `The element's attributes/bindings did not match the expected order: expected {{expected}} instead of {{actual}}`,
|
|
61
61
|
},
|
|
62
|
+
defaultOptions: [DEFAULT_OPTIONS],
|
|
62
63
|
},
|
|
63
|
-
defaultOptions: [DEFAULT_OPTIONS],
|
|
64
64
|
create(context, [{ alphabetical, order }]) {
|
|
65
65
|
const parserServices = (0, utils_1.getTemplateParserServices)(context);
|
|
66
66
|
function getLocation(attr) {
|
|
@@ -20,8 +20,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
20
20
|
messages: {
|
|
21
21
|
bananaInBox: 'Invalid binding syntax. Use [(expr)] instead',
|
|
22
22
|
},
|
|
23
|
+
defaultOptions: [],
|
|
23
24
|
},
|
|
24
|
-
defaultOptions: [],
|
|
25
25
|
create(context) {
|
|
26
26
|
const parserServices = (0, utils_1.getTemplateParserServices)(context);
|
|
27
27
|
const sourceCode = context.sourceCode;
|
|
@@ -37,8 +37,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
37
37
|
missingType: 'Type for <button> is missing',
|
|
38
38
|
invalidType: `"{{${exports.INVALID_TYPE_DATA_KEY}}}" can not be used as a type for <button>`,
|
|
39
39
|
},
|
|
40
|
+
defaultOptions: [{}],
|
|
40
41
|
},
|
|
41
|
-
defaultOptions: [{}],
|
|
42
42
|
create(context, [{ ignoreWithDirectives }]) {
|
|
43
43
|
const parserServices = (0, utils_1.getTemplateParserServices)(context);
|
|
44
44
|
return {
|
|
@@ -36,8 +36,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
36
36
|
messages: {
|
|
37
37
|
clickEventsHaveKeyEvents: 'click must be accompanied by either keyup, keydown or keypress event for accessibility.',
|
|
38
38
|
},
|
|
39
|
+
defaultOptions: [DEFAULT_OPTIONS],
|
|
39
40
|
},
|
|
40
|
-
defaultOptions: [DEFAULT_OPTIONS],
|
|
41
41
|
create(context, [{ ignoreWithDirectives }]) {
|
|
42
42
|
return {
|
|
43
43
|
Element(node) {
|
|
@@ -29,8 +29,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
29
29
|
messages: {
|
|
30
30
|
conditionalComplexity: 'The conditional complexity {{totalComplexity}} exceeds the defined limit {{maxComplexity}}',
|
|
31
31
|
},
|
|
32
|
+
defaultOptions: [{ maxComplexity: DEFAULT_MAX_COMPLEXITY }],
|
|
32
33
|
},
|
|
33
|
-
defaultOptions: [{ maxComplexity: DEFAULT_MAX_COMPLEXITY }],
|
|
34
34
|
create(context, [{ maxComplexity }]) {
|
|
35
35
|
(0, utils_1.ensureTemplateParser)(context);
|
|
36
36
|
const sourceCode = context.sourceCode;
|
|
@@ -35,13 +35,13 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
35
35
|
messages: {
|
|
36
36
|
cyclomaticComplexity: 'The cyclomatic complexity {{totalComplexity}} exceeds the defined limit {{maxComplexity}}',
|
|
37
37
|
},
|
|
38
|
+
defaultOptions: [
|
|
39
|
+
{
|
|
40
|
+
maxComplexity: DEFAULT_OPTIONS.maxComplexity,
|
|
41
|
+
variant: DEFAULT_OPTIONS.variant,
|
|
42
|
+
},
|
|
43
|
+
],
|
|
38
44
|
},
|
|
39
|
-
defaultOptions: [
|
|
40
|
-
{
|
|
41
|
-
maxComplexity: DEFAULT_OPTIONS.maxComplexity,
|
|
42
|
-
variant: DEFAULT_OPTIONS.variant,
|
|
43
|
-
},
|
|
44
|
-
],
|
|
45
45
|
create(context, [{ maxComplexity = DEFAULT_OPTIONS.maxComplexity, variant = DEFAULT_OPTIONS.variant, },]) {
|
|
46
46
|
let totalComplexity = 0;
|
|
47
47
|
const parserServices = (0, utils_1.getTemplateParserServices)(context);
|
|
@@ -40,8 +40,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
40
40
|
messages: {
|
|
41
41
|
elementsContent: '<{{element}}> should have content',
|
|
42
42
|
},
|
|
43
|
+
defaultOptions: [DEFAULT_OPTIONS],
|
|
43
44
|
},
|
|
44
|
-
defaultOptions: [DEFAULT_OPTIONS],
|
|
45
45
|
create(context, [{ allowList }]) {
|
|
46
46
|
const parserServices = (0, utils_1.getTemplateParserServices)(context);
|
|
47
47
|
return {
|
package/dist/rules/eqeqeq.js
CHANGED
|
@@ -34,8 +34,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
34
34
|
eqeqeq: 'Expected `{{expectedOperation}}` but received `{{actualOperation}}`',
|
|
35
35
|
suggestStrictEquality: 'Replace `{{actualOperation}}` with `{{expectedOperation}}`',
|
|
36
36
|
},
|
|
37
|
+
defaultOptions: [DEFAULT_OPTIONS],
|
|
37
38
|
},
|
|
38
|
-
defaultOptions: [DEFAULT_OPTIONS],
|
|
39
39
|
create(context, [{ allowNullOrUndefined }]) {
|
|
40
40
|
(0, utils_1.ensureTemplateParser)(context);
|
|
41
41
|
const sourceCode = context.sourceCode;
|
package/dist/rules/i18n.js
CHANGED
|
@@ -137,8 +137,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
137
137
|
i18nMissingMeaning: `Missing i18n meaning on element. See more at ${STYLE_GUIDE_LINK_METADATA_FOR_TRANSLATION}`,
|
|
138
138
|
i18nMarkupInContent: 'Avoid HTML markup in an element with an i18n attribute.',
|
|
139
139
|
},
|
|
140
|
+
defaultOptions: [DEFAULT_OPTIONS],
|
|
140
141
|
},
|
|
141
|
-
defaultOptions: [DEFAULT_OPTIONS],
|
|
142
142
|
create(context, [{ allowMarkupInContent, boundTextAllowedPattern, checkAttributes, checkId, checkDuplicateId, checkText, ignoreAttributes, ignoreTags, requireDescription, requireMeaning, },]) {
|
|
143
143
|
const parserServices = (0, utils_1.getTemplateParserServices)(context);
|
|
144
144
|
const sourceCode = context.sourceCode;
|
|
@@ -34,8 +34,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
34
34
|
messages: {
|
|
35
35
|
interactiveSupportsFocus: 'Elements with interaction handlers must be focusable.',
|
|
36
36
|
},
|
|
37
|
+
defaultOptions: [{ allowList: DEFAULT_ALLOW_LIST }],
|
|
37
38
|
},
|
|
38
|
-
defaultOptions: [{ allowList: DEFAULT_ALLOW_LIST }],
|
|
39
39
|
create(context, [{ allowList }]) {
|
|
40
40
|
return {
|
|
41
41
|
Element(node) {
|
|
@@ -62,8 +62,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
62
62
|
messages: {
|
|
63
63
|
labelHasAssociatedControl: 'A label component must be associated with a form element',
|
|
64
64
|
},
|
|
65
|
+
defaultOptions: [DEFAULT_OPTIONS],
|
|
65
66
|
},
|
|
66
|
-
defaultOptions: [DEFAULT_OPTIONS],
|
|
67
67
|
create(context, [{ checkIds, controlComponents, labelComponents }]) {
|
|
68
68
|
const parserServices = (0, utils_1.getTemplateParserServices)(context);
|
|
69
69
|
const allControlComponents = new Set([
|
|
@@ -28,8 +28,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
28
28
|
messages: {
|
|
29
29
|
mouseEventsHaveKeyEvents: `\`{{mouseEvent}}\` must be accompanied by \`{{keyEvent}}\` for accessibility (${STYLE_GUIDE_LINK})`,
|
|
30
30
|
},
|
|
31
|
+
defaultOptions: [],
|
|
31
32
|
},
|
|
32
|
-
defaultOptions: [],
|
|
33
33
|
create(context) {
|
|
34
34
|
const parserServices = (0, utils_1.getTemplateParserServices)(context);
|
|
35
35
|
const domElementsPattern = (0, to_pattern_1.toPattern)([...(0, get_dom_elements_1.getDomElements)()]);
|
package/dist/rules/no-any.js
CHANGED
|
@@ -19,8 +19,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
19
19
|
noAny: `Avoid using "${ANY_TYPE_CAST_FUNCTION_NAME}" in templates`,
|
|
20
20
|
suggestRemoveAny: `Remove ${ANY_TYPE_CAST_FUNCTION_NAME}`,
|
|
21
21
|
},
|
|
22
|
+
defaultOptions: [],
|
|
22
23
|
},
|
|
23
|
-
defaultOptions: [],
|
|
24
24
|
create(context) {
|
|
25
25
|
(0, utils_1.ensureTemplateParser)(context);
|
|
26
26
|
const sourceCode = context.sourceCode;
|
|
@@ -18,8 +18,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
18
18
|
messages: {
|
|
19
19
|
noAutofocus: 'The `autofocus` attribute should not be used, as it reduces usability and accessibility for users',
|
|
20
20
|
},
|
|
21
|
+
defaultOptions: [],
|
|
21
22
|
},
|
|
22
|
-
defaultOptions: [],
|
|
23
23
|
create(context) {
|
|
24
24
|
const parserServices = (0, utils_1.getTemplateParserServices)(context);
|
|
25
25
|
const elementNamePattern = (0, to_pattern_1.toPattern)([...(0, get_dom_elements_1.getDomElements)()]);
|
|
@@ -32,10 +32,10 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
32
32
|
messages: {
|
|
33
33
|
noCallExpression: 'Avoid calling expressions in templates',
|
|
34
34
|
},
|
|
35
|
+
defaultOptions: [
|
|
36
|
+
{ allowList: [], allowPrefix: undefined, allowSuffix: undefined },
|
|
37
|
+
],
|
|
35
38
|
},
|
|
36
|
-
defaultOptions: [
|
|
37
|
-
{ allowList: [], allowPrefix: undefined, allowSuffix: undefined },
|
|
38
|
-
],
|
|
39
39
|
create(context, [{ allowList, allowPrefix, allowSuffix }]) {
|
|
40
40
|
(0, utils_1.ensureTemplateParser)(context);
|
|
41
41
|
const sourceCode = context.sourceCode;
|
|
@@ -16,8 +16,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
16
16
|
messages: {
|
|
17
17
|
noDistractingElements: 'Do not use <{{element}}> elements as they can create visual accessibility issues and are deprecated',
|
|
18
18
|
},
|
|
19
|
+
defaultOptions: [],
|
|
19
20
|
},
|
|
20
|
-
defaultOptions: [],
|
|
21
21
|
create(context) {
|
|
22
22
|
const parserServices = (0, utils_1.getTemplateParserServices)(context);
|
|
23
23
|
return {
|
|
@@ -47,8 +47,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
47
47
|
noDuplicateAttributes: 'Duplicate attribute `{{attributeName}}`',
|
|
48
48
|
suggestRemoveAttribute: 'Remove attribute `{{attributeName}}`',
|
|
49
49
|
},
|
|
50
|
+
defaultOptions: [DEFAULT_OPTIONS],
|
|
50
51
|
},
|
|
51
|
-
defaultOptions: [DEFAULT_OPTIONS],
|
|
52
52
|
create(context, [{ allowTwoWayDataBinding, allowStylePrecedenceDuplicates, ignore }]) {
|
|
53
53
|
const parserServices = (0, utils_1.getTemplateParserServices)(context);
|
|
54
54
|
return {
|
|
@@ -15,8 +15,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
15
15
|
messages: {
|
|
16
16
|
noEmptyControlFlow: 'Unexpected empty control flow block.',
|
|
17
17
|
},
|
|
18
|
+
defaultOptions: [],
|
|
18
19
|
},
|
|
19
|
-
defaultOptions: [],
|
|
20
20
|
create(context) {
|
|
21
21
|
const parserServices = (0, utils_1.getTemplateParserServices)(context);
|
|
22
22
|
return {
|
|
@@ -34,8 +34,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
34
34
|
messages: {
|
|
35
35
|
noInlineStyles: '<{{element}}/> element should not have inline styles via style attribute. Please use classes instead.',
|
|
36
36
|
},
|
|
37
|
+
defaultOptions: [DEFAULT_OPTIONS],
|
|
37
38
|
},
|
|
38
|
-
defaultOptions: [DEFAULT_OPTIONS],
|
|
39
39
|
create(context, [{ allowNgStyle, allowBindToStyle }]) {
|
|
40
40
|
const parserServices = (0, utils_1.getTemplateParserServices)(context);
|
|
41
41
|
return {
|
|
@@ -35,8 +35,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
35
35
|
noInterpolationInAttributes: 'Use property binding [attribute]="value" instead of interpolation {{ value }} for an attribute.',
|
|
36
36
|
},
|
|
37
37
|
fixable: 'code',
|
|
38
|
+
defaultOptions: [{ allowSubstringInterpolation: false }],
|
|
38
39
|
},
|
|
39
|
-
defaultOptions: [{ allowSubstringInterpolation: false }],
|
|
40
40
|
create(context, [{ allowSubstringInterpolation }]) {
|
|
41
41
|
const sourceCode = context.sourceCode;
|
|
42
42
|
return {
|
|
@@ -23,8 +23,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
23
23
|
suggestUndefinedComparison: 'Compare with `undefined`',
|
|
24
24
|
suggestUsingNonNegatedValue: 'Use non-negated value',
|
|
25
25
|
},
|
|
26
|
+
defaultOptions: [],
|
|
26
27
|
},
|
|
27
|
-
defaultOptions: [],
|
|
28
28
|
create(context) {
|
|
29
29
|
(0, utils_1.ensureTemplateParser)(context);
|
|
30
30
|
const sourceCode = context.sourceCode;
|
|
@@ -16,8 +16,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
16
16
|
messages: {
|
|
17
17
|
noNestedTags: '<{{tag}}> elements must not be nested! This breaks angular incremental hydration as all browsers will convert "<{{tag}}>1<{{tag}}>2</{{tag}}>3</{{tag}}>" into "<{{tag}}>1</{{tag}}><{{tag}}>2</{{tag}}>3", creating a DOM mismatch between SSR and Angular',
|
|
18
18
|
},
|
|
19
|
+
defaultOptions: [],
|
|
19
20
|
},
|
|
20
|
-
defaultOptions: [],
|
|
21
21
|
create(context) {
|
|
22
22
|
const parserServices = (0, utils_1.getTemplateParserServices)(context);
|
|
23
23
|
return {
|
|
@@ -15,8 +15,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
15
15
|
messages: {
|
|
16
16
|
noNonNullAssertion: 'Avoid using the non-null assertion operator (!) in templates. This bypasses type safety and can lead to runtime errors.',
|
|
17
17
|
},
|
|
18
|
+
defaultOptions: [],
|
|
18
19
|
},
|
|
19
|
-
defaultOptions: [],
|
|
20
20
|
create(context) {
|
|
21
21
|
(0, utils_1.ensureTemplateParser)(context);
|
|
22
22
|
const { sourceCode } = context;
|
|
@@ -17,8 +17,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
17
17
|
messages: {
|
|
18
18
|
noOuterHtml: 'Do not use `outerHTML`. Binding to `[outerHTML]` throws on update because setting `outerHTML` replaces the host element itself, so Angular loses its reference to the node ("This element has no parent node"); a static `outerHTML` attribute is not a real DOM attribute and has no effect. Use `[innerHTML]` (being mindful of sanitization) or restructure the template instead.',
|
|
19
19
|
},
|
|
20
|
+
defaultOptions: [],
|
|
20
21
|
},
|
|
21
|
-
defaultOptions: [],
|
|
22
22
|
create(context) {
|
|
23
23
|
const parserServices = (0, utils_1.getTemplateParserServices)(context);
|
|
24
24
|
const elementNamePattern = (0, to_pattern_1.toPattern)([...(0, get_dom_elements_1.getDomElements)()]);
|
|
@@ -19,8 +19,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
19
19
|
noPositiveTabindex: 'The `tabindex` attribute should not be positive',
|
|
20
20
|
suggestNonNegativeTabindex: 'Use `tabindex="{{tabindex}}"`',
|
|
21
21
|
},
|
|
22
|
+
defaultOptions: [],
|
|
22
23
|
},
|
|
23
|
-
defaultOptions: [],
|
|
24
24
|
create(context) {
|
|
25
25
|
const parserServices = (0, utils_1.getTemplateParserServices)(context);
|
|
26
26
|
const domElements = [...(0, get_dom_elements_1.getDomElements)()];
|
|
@@ -32,8 +32,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
32
32
|
messages: {
|
|
33
33
|
preferAtElse: 'Prefer using `@else` instead of a second `@if` clause.',
|
|
34
34
|
},
|
|
35
|
+
defaultOptions: [],
|
|
35
36
|
},
|
|
36
|
-
defaultOptions: [],
|
|
37
37
|
create(context) {
|
|
38
38
|
const parserServices = (0, utils_1.getTemplateParserServices)(context);
|
|
39
39
|
const previousNodeStack = [undefined];
|
|
@@ -20,8 +20,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
20
20
|
messages: {
|
|
21
21
|
preferAtEmpty: 'Prefer using `@for (...) {...} @empty {...}`.',
|
|
22
22
|
},
|
|
23
|
+
defaultOptions: [],
|
|
23
24
|
},
|
|
24
|
-
defaultOptions: [],
|
|
25
25
|
create(context) {
|
|
26
26
|
const parserServices = (0, utils_1.getTemplateParserServices)(context);
|
|
27
27
|
const previousNodeStack = [undefined];
|
|
@@ -42,13 +42,13 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
42
42
|
messages: {
|
|
43
43
|
preferBuiltInPipes: 'Avoid using method "{{ methodName }}" in templates. Prefer the Angular built-in pipes instead (e.g. lowercase, uppercase, titlecase).',
|
|
44
44
|
},
|
|
45
|
+
defaultOptions: [
|
|
46
|
+
{
|
|
47
|
+
disallowList: [...DEFAULT_DISALLOW_LIST],
|
|
48
|
+
allowInOutputHandlers: true,
|
|
49
|
+
},
|
|
50
|
+
],
|
|
45
51
|
},
|
|
46
|
-
defaultOptions: [
|
|
47
|
-
{
|
|
48
|
-
disallowList: [...DEFAULT_DISALLOW_LIST],
|
|
49
|
-
allowInOutputHandlers: true,
|
|
50
|
-
},
|
|
51
|
-
],
|
|
52
52
|
create(context, [{ disallowList, allowInOutputHandlers }]) {
|
|
53
53
|
(0, utils_1.ensureTemplateParser)(context);
|
|
54
54
|
const sourceCode = context.sourceCode;
|
|
@@ -16,8 +16,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
16
16
|
messages: {
|
|
17
17
|
preferClassBinding: 'Consider using [class] bindings instead of [ngClass] where applicable.',
|
|
18
18
|
},
|
|
19
|
+
defaultOptions: [],
|
|
19
20
|
},
|
|
20
|
-
defaultOptions: [],
|
|
21
21
|
create(context) {
|
|
22
22
|
const parserServices = (0, utils_1.getTemplateParserServices)(context);
|
|
23
23
|
return {
|
|
@@ -80,8 +80,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
80
80
|
preferEven: "Use '$even' instead of '{{ expression }}'.",
|
|
81
81
|
preferOdd: "Use '$odd' instead of '{{ expression }}'.",
|
|
82
82
|
},
|
|
83
|
+
defaultOptions: [DEFAULT_OPTIONS],
|
|
83
84
|
},
|
|
84
|
-
defaultOptions: [DEFAULT_OPTIONS],
|
|
85
85
|
create(context, [{ allowedAliases }]) {
|
|
86
86
|
const parserServices = (0, utils_1.getTemplateParserServices)(context);
|
|
87
87
|
const forLoops = [];
|
|
@@ -16,8 +16,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
16
16
|
messages: {
|
|
17
17
|
preferControlFlow: 'Use built-in control flow instead of directive {{name}}.',
|
|
18
18
|
},
|
|
19
|
+
defaultOptions: [],
|
|
19
20
|
},
|
|
20
|
-
defaultOptions: [],
|
|
21
21
|
create(context) {
|
|
22
22
|
const parserServices = (0, utils_1.getTemplateParserServices)(context);
|
|
23
23
|
return {
|
|
@@ -20,8 +20,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
20
20
|
suggestReplaceWithNgSrc: 'Replace [src] with [ngSrc]',
|
|
21
21
|
suggestRemoveSrc: 'Remove the [src] attribute',
|
|
22
22
|
},
|
|
23
|
+
defaultOptions: [],
|
|
23
24
|
},
|
|
24
|
-
defaultOptions: [],
|
|
25
25
|
create(context) {
|
|
26
26
|
const parserServices = (0, utils_1.getTemplateParserServices)(context);
|
|
27
27
|
const sourceCode = context.sourceCode;
|
|
@@ -18,8 +18,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
18
18
|
messages: {
|
|
19
19
|
preferSelfClosingTags: 'Use self-closing tags for elements with a closing tag but no content.',
|
|
20
20
|
},
|
|
21
|
+
defaultOptions: [],
|
|
21
22
|
},
|
|
22
|
-
defaultOptions: [],
|
|
23
23
|
create(context) {
|
|
24
24
|
const parserServices = (0, utils_1.getTemplateParserServices)(context);
|
|
25
25
|
// angular 18 doesn't support self closing tags in index.html
|
|
@@ -40,8 +40,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
40
40
|
messages: {
|
|
41
41
|
preferStaticStringProperties: 'Using a property is more efficient than binding a static string.',
|
|
42
42
|
},
|
|
43
|
+
defaultOptions: [{}],
|
|
43
44
|
},
|
|
44
|
-
defaultOptions: [{}],
|
|
45
45
|
create(context, [{ ignore = [] }]) {
|
|
46
46
|
const parserServices = (0, utils_1.getTemplateParserServices)(context);
|
|
47
47
|
const ignoredProperties = new Set([...PROPERTY_ONLY_DOM_APIS, ...ignore]);
|
|
@@ -87,8 +87,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
87
87
|
messages: {
|
|
88
88
|
preferTemplateLiteral: 'Prefer using template literal instead of concatenating strings or expressions',
|
|
89
89
|
},
|
|
90
|
+
defaultOptions: [],
|
|
90
91
|
},
|
|
91
|
-
defaultOptions: [],
|
|
92
92
|
create(context) {
|
|
93
93
|
// When the template is defined inline in a component, the template will
|
|
94
94
|
// usually be defined as a template string, which means if template
|
|
@@ -15,8 +15,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
15
15
|
messages: {
|
|
16
16
|
requireSwitchDefault: 'Switch should have a default block. Add `@default { ... }`, or `@default never` to enforce a compile-time exhaustive switch.',
|
|
17
17
|
},
|
|
18
|
+
defaultOptions: [],
|
|
18
19
|
},
|
|
19
|
-
defaultOptions: [],
|
|
20
20
|
create(context) {
|
|
21
21
|
const parserServices = (0, utils_1.getTemplateParserServices)(context);
|
|
22
22
|
return {
|
|
@@ -21,8 +21,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
21
21
|
roleHasRequiredAria: 'The {{element}} with role="{{role}}" does not have required ARIA properties: {{missingProps}}',
|
|
22
22
|
suggestRemoveRole: 'Remove role `{{role}}`',
|
|
23
23
|
},
|
|
24
|
+
defaultOptions: [],
|
|
24
25
|
},
|
|
25
|
-
defaultOptions: [],
|
|
26
26
|
create(context) {
|
|
27
27
|
const parserServices = (0, utils_1.getTemplateParserServices)(context);
|
|
28
28
|
const domElements = [...(0, get_dom_elements_1.getDomElements)()];
|
|
@@ -18,8 +18,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
18
18
|
messages: {
|
|
19
19
|
tableScope: 'The `scope` attribute should only be on the `<th>` element',
|
|
20
20
|
},
|
|
21
|
+
defaultOptions: [],
|
|
21
22
|
},
|
|
22
|
-
defaultOptions: [],
|
|
23
23
|
create(context) {
|
|
24
24
|
const parserServices = (0, utils_1.getTemplateParserServices)(context);
|
|
25
25
|
const domElements = [...(0, get_dom_elements_1.getDomElements)()].filter((domElement) => domElement !== 'th');
|
|
@@ -29,8 +29,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
29
29
|
messages: {
|
|
30
30
|
useTrackByFunction: 'Missing trackBy function in ngFor directive',
|
|
31
31
|
},
|
|
32
|
+
defaultOptions: [{ alias: DEFAULT_ALIAS }],
|
|
32
33
|
},
|
|
33
|
-
defaultOptions: [{ alias: DEFAULT_ALIAS }],
|
|
34
34
|
create(context, [{ alias }]) {
|
|
35
35
|
const isNgForTrackBy = isNgForTrackByFactory(alias);
|
|
36
36
|
const parserServices = (0, utils_1.getTemplateParserServices)(context);
|
package/dist/rules/valid-aria.js
CHANGED
|
@@ -22,8 +22,8 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
22
22
|
validAriaValue: 'The `{{attribute}}` has an invalid value. Check the valid values at https://raw.githack.com/w3c/aria/stable/#roles',
|
|
23
23
|
suggestRemoveInvalidAria: 'Remove attribute `{{attribute}}`',
|
|
24
24
|
},
|
|
25
|
+
defaultOptions: [],
|
|
25
26
|
},
|
|
26
|
-
defaultOptions: [],
|
|
27
27
|
create(context) {
|
|
28
28
|
const parserServices = (0, utils_1.getTemplateParserServices)(context);
|
|
29
29
|
const domElements = [...(0, get_dom_elements_1.getDomElements)()];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-eslint-rule.d.ts","sourceRoot":"","sources":["../../src/utils/create-eslint-rule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,WAAW,QAAQ;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;
|
|
1
|
+
{"version":3,"file":"create-eslint-rule.d.ts","sourceRoot":"","sources":["../../src/utils/create-eslint-rule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,WAAW,QAAQ;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,gBAAgB;;CAG5B,CAAC"}
|
|
@@ -2,27 +2,4 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createESLintRule = void 0;
|
|
4
4
|
const utils_1 = require("@typescript-eslint/utils");
|
|
5
|
-
|
|
6
|
-
* We need to patch the RuleCreator in order to preserve the defaultOptions
|
|
7
|
-
* to use as part of documentation generation.
|
|
8
|
-
*/
|
|
9
|
-
const patchedRuleCreator = (urlCreator) => {
|
|
10
|
-
return function createRule({ name, meta, defaultOptions, create }) {
|
|
11
|
-
const resolvedDefaultOptions = (defaultOptions ?? []);
|
|
12
|
-
return {
|
|
13
|
-
name,
|
|
14
|
-
meta: Object.assign(Object.assign({}, meta), {
|
|
15
|
-
docs: Object.assign(Object.assign({}, meta.docs), {
|
|
16
|
-
url: urlCreator(name),
|
|
17
|
-
}),
|
|
18
|
-
}),
|
|
19
|
-
defaultOptions: resolvedDefaultOptions,
|
|
20
|
-
create(context) {
|
|
21
|
-
const optionsWithDefault = utils_1.ESLintUtils.applyDefault(resolvedDefaultOptions, context.options);
|
|
22
|
-
return create(context, optionsWithDefault);
|
|
23
|
-
},
|
|
24
|
-
};
|
|
25
|
-
};
|
|
26
|
-
};
|
|
27
|
-
patchedRuleCreator.withoutDocs = utils_1.ESLintUtils.RuleCreator.withoutDocs;
|
|
28
|
-
exports.createESLintRule = patchedRuleCreator((ruleName) => `https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin-template/docs/rules/${ruleName}.md`);
|
|
5
|
+
exports.createESLintRule = utils_1.ESLintUtils.RuleCreator((ruleName) => `https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin-template/docs/rules/${ruleName}.md`);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@angular-eslint/eslint-plugin-template",
|
|
3
|
-
"version": "22.2.1-alpha.
|
|
3
|
+
"version": "22.2.1-alpha.9",
|
|
4
4
|
"description": "ESLint plugin for Angular Templates",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -19,17 +19,17 @@
|
|
|
19
19
|
"LICENSE"
|
|
20
20
|
],
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@angular-eslint/bundled-angular-compiler": "22.2.1-alpha.
|
|
23
|
-
"@angular-eslint/utils": "22.2.1-alpha.
|
|
22
|
+
"@angular-eslint/bundled-angular-compiler": "22.2.1-alpha.9",
|
|
23
|
+
"@angular-eslint/utils": "22.2.1-alpha.9",
|
|
24
24
|
"aria-query": "5.3.2",
|
|
25
25
|
"axobject-query": "4.1.0"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
|
-
"@angular-eslint/test-utils": "22.2.1-alpha.
|
|
28
|
+
"@angular-eslint/test-utils": "22.2.1-alpha.9",
|
|
29
29
|
"@types/aria-query": "5.0.4"
|
|
30
30
|
},
|
|
31
31
|
"peerDependencies": {
|
|
32
|
-
"@angular-eslint/template-parser": "22.2.1-alpha.
|
|
32
|
+
"@angular-eslint/template-parser": "22.2.1-alpha.9",
|
|
33
33
|
"@typescript-eslint/types": "^8.0.0",
|
|
34
34
|
"@typescript-eslint/utils": "^8.0.0",
|
|
35
35
|
"eslint": "^9.0.0 || ^10.0.0",
|