Skip to content

Commit c3f3120

Browse files
authoredApr 14, 2022
fix(eslint-plugin-template): false positive conditional complexity in BoundAttribute > Interpolation (#986)
1 parent 870f466 commit c3f3120

File tree

6 files changed

+48
-18
lines changed

6 files changed

+48
-18
lines changed
 

‎packages/eslint-plugin-template/docs/rules/conditional-complexity.md

+26
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,32 @@ interface Options {
298298

299299
<br>
300300

301+
#### Default Config
302+
303+
```json
304+
{
305+
"rules": {
306+
"@angular-eslint/template/conditional-complexity": [
307+
"error"
308+
]
309+
}
310+
}
311+
```
312+
313+
<br>
314+
315+
#### ✅ Valid Code
316+
317+
```html
318+
<div class="col" id="one-two-three-four-five-six-seven-eight-{{9}}"></div>
319+
```
320+
321+
<br>
322+
323+
---
324+
325+
<br>
326+
301327
#### Custom Config
302328

303329
```json

‎packages/eslint-plugin-template/project.json

+1
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
},
6363
"update-rule-docs": {
6464
"executor": "@nrwl/workspace:run-commands",
65+
"outputs": ["packages/eslint-plugin-template/docs"],
6566
"options": {
6667
"parallel": false,
6768
"commands": [

‎packages/eslint-plugin-template/src/index.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ import bananaInBox, {
2727
import clickEventsHaveKeyEvents, {
2828
RULE_NAME as clickEventsHaveKeyEventsRuleName,
2929
} from './rules/click-events-have-key-events';
30-
import conditionalСomplexity, {
31-
RULE_NAME as conditionalСomplexityRuleName,
30+
import conditionalComplexity, {
31+
RULE_NAME as conditionalComplexityRuleName,
3232
} from './rules/conditional-complexity';
3333
import cyclomaticComplexity, {
3434
RULE_NAME as cyclomaticComplexityRuleName,
@@ -78,7 +78,7 @@ export default {
7878
[accessibilityTableScopeRuleName]: accessibilityTableScope,
7979
[accessibilityValidAriaRuleName]: accessibilityValidAria,
8080
[bananaInBoxRuleName]: bananaInBox,
81-
[conditionalСomplexityRuleName]: conditionalСomplexity,
81+
[conditionalComplexityRuleName]: conditionalComplexity,
8282
[clickEventsHaveKeyEventsRuleName]: clickEventsHaveKeyEvents,
8383
[cyclomaticComplexityRuleName]: cyclomaticComplexity,
8484
[eqeqeqRuleName]: eqeqeq,

‎packages/eslint-plugin-template/src/rules/conditional-complexity.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import type {
22
AST,
33
ASTWithSource,
4-
Interpolation,
54
TmplAstBoundAttribute,
65
} from '@angular-eslint/bundled-angular-compiler';
76
import {
87
Binary,
98
BindingPipe,
109
Conditional,
10+
Interpolation,
1111
Lexer,
1212
Parser,
1313
} from '@angular-eslint/bundled-angular-compiler';
@@ -17,7 +17,7 @@ import {
1717
} from '../utils/create-eslint-rule';
1818

1919
type Options = [{ maxComplexity: number }];
20-
export type MessageIds = 'conditionalСomplexity';
20+
export type MessageIds = 'conditionalComplexity';
2121
export const RULE_NAME = 'conditional-complexity';
2222

2323
const DEFAULT_MAX_COMPLEXITY = 5;
@@ -44,7 +44,7 @@ export default createESLintRule<Options, MessageIds>({
4444
},
4545
],
4646
messages: {
47-
conditionalСomplexity:
47+
conditionalComplexity:
4848
'The conditional complexity {{totalComplexity}} exceeds the defined limit {{maxComplexity}}',
4949
},
5050
},
@@ -55,7 +55,7 @@ export default createESLintRule<Options, MessageIds>({
5555

5656
return {
5757
BoundAttribute(node: TmplAstBoundAttribute & { value: ASTWithSource }) {
58-
if (!node.value.source) {
58+
if (!node.value.source || node.value.ast instanceof Interpolation) {
5959
return;
6060
}
6161

@@ -77,7 +77,7 @@ export default createESLintRule<Options, MessageIds>({
7777
start: sourceCode.getLocFromIndex(start),
7878
end: sourceCode.getLocFromIndex(end),
7979
},
80-
messageId: 'conditionalСomplexity',
80+
messageId: 'conditionalComplexity',
8181
data: { maxComplexity, totalComplexity },
8282
});
8383
},
@@ -98,7 +98,7 @@ export default createESLintRule<Options, MessageIds>({
9898
start: sourceCode.getLocFromIndex(start),
9999
end: sourceCode.getLocFromIndex(end),
100100
},
101-
messageId: 'conditionalСomplexity',
101+
messageId: 'conditionalComplexity',
102102
data: { maxComplexity, totalComplexity },
103103
});
104104
}

‎packages/eslint-plugin-template/tests/rules/conditional-complexity/cases.ts

+11-9
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
11
import { convertAnnotatedSourceToFailureCase } from '@angular-eslint/utils';
22
import type { MessageIds } from '../../../src/rules/conditional-complexity';
33

4-
const messageId: MessageIds = 'conditionalСomplexity';
4+
const messageId: MessageIds = 'conditionalComplexity';
55

66
export const valid = [
77
`
8-
<div *ngIf="a === '1' || b === '2' && c.d !== e">Content</div>
9-
<div *ngIf="isValid; then thenTemplateRef; else elseTemplateRef">Content</div>
10-
<ng-template #thenTemplateRef>thenTemplateRef</ng-template>
11-
<ng-template #elseTemplateRef>elseTemplateRef</ng-template>
12-
<div [class.mw-100]="test === 7"></div>
13-
<div [attr.aria-label]="testing === 'ab' ? 'bc' : 'de'"></div>
14-
<div [attr.custom-attr]="'test345' | appPipe"></div>
15-
`,
8+
<div *ngIf="a === '1' || b === '2' && c.d !== e">Content</div>
9+
<div *ngIf="isValid; then thenTemplateRef; else elseTemplateRef">Content</div>
10+
<ng-template #thenTemplateRef>thenTemplateRef</ng-template>
11+
<ng-template #elseTemplateRef>elseTemplateRef</ng-template>
12+
<div [class.mw-100]="test === 7"></div>
13+
<div [attr.aria-label]="testing === 'ab' ? 'bc' : 'de'"></div>
14+
<div [attr.custom-attr]="'test345' | appPipe"></div>
15+
`,
16+
// https://github.com/angular-eslint/angular-eslint/issues/863
17+
`<div class="col" id="one-two-three-four-five-six-seven-eight-{{9}}"></div>`,
1618
{
1719
code: `
1820
<div *ngIf="a === '3' || (b === '3' && c.d !== '1' && e.f !== '6' && q !== g)">

‎packages/eslint-plugin/project.json

+1
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
},
5757
"update-rule-docs": {
5858
"executor": "@nrwl/workspace:run-commands",
59+
"outputs": ["packages/eslint-plugin/docs"],
5960
"options": {
6061
"parallel": false,
6162
"commands": [

0 commit comments

Comments
 (0)
Please sign in to comment.