Skip to content

Commit 609b119

Browse files
authored
Merge pull request #118 from ony3000/angular-control-flow
Support angular control flow blocks
2 parents c842f5c + 44279bf commit 609b119

6 files changed

Lines changed: 397 additions & 4 deletions

File tree

src/core-parts/finder.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2082,14 +2082,15 @@ export function findTargetClassNameNodesForAngular(
20822082
let recursiveProps: string[] = [];
20832083

20842084
switch (node.type) {
2085-
case 'element': {
2086-
recursiveProps = ['attrs', 'children'];
2087-
break;
2088-
}
2085+
case 'angularControlFlowBlock':
20892086
case 'root': {
20902087
recursiveProps = ['children'];
20912088
break;
20922089
}
2090+
case 'element': {
2091+
recursiveProps = ['attrs', 'children'];
2092+
break;
2093+
}
20932094
default: {
20942095
break;
20952096
}
Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2+
3+
exports[`'(1) @defer block' > expectation 1`] = `
4+
"<!-- ------------------------------------------------------| printWidth=60 (in snapshot) -->
5+
@defer {
6+
<div
7+
class="lorem ipsum dolor sit amet consectetur adipiscing
8+
elit proin ex massa hendrerit eu posuere"
9+
></div>
10+
} @placeholder {
11+
<div
12+
class="lorem ipsum dolor sit amet consectetur adipiscing
13+
elit proin ex massa hendrerit eu posuere"
14+
></div>
15+
} @loading {
16+
<div
17+
class="lorem ipsum dolor sit amet consectetur adipiscing
18+
elit proin ex massa hendrerit eu posuere"
19+
></div>
20+
} @error {
21+
<div
22+
class="lorem ipsum dolor sit amet consectetur adipiscing
23+
elit proin ex massa hendrerit eu posuere"
24+
></div>
25+
}
26+
"
27+
`;
28+
29+
exports[`'(2) @defer block with triggers and pa…' > expectation 1`] = `
30+
"<!-- ------------------------------------------------------| printWidth=60 (in snapshot) -->
31+
@defer (on timer(500ms); prefetch on idle) {
32+
<div
33+
[class]="
34+
'lorem ipsum dolor sit amet consectetur adipiscing
35+
elit proin ex massa hendrerit eu posuere'
36+
"
37+
></div>
38+
} @placeholder (minimum 500ms) {
39+
<div
40+
[class]="
41+
'lorem ipsum dolor sit amet consectetur adipiscing
42+
elit proin ex massa hendrerit eu posuere'
43+
"
44+
></div>
45+
} @loading (after 100ms; minimum 1s) {
46+
<div
47+
[class]="
48+
'lorem ipsum dolor sit amet consectetur adipiscing
49+
elit proin ex massa hendrerit eu posuere'
50+
"
51+
></div>
52+
} @error {
53+
<div
54+
[class]="
55+
'lorem ipsum dolor sit amet consectetur adipiscing
56+
elit proin ex massa hendrerit eu posuere'
57+
"
58+
></div>
59+
}
60+
"
61+
`;
62+
63+
exports[`'(3) @for block' > expectation 1`] = `
64+
"<!-- ------------------------------------------------------| printWidth=60 (in snapshot) -->
65+
@for (item of items; track item.name) {
66+
<div
67+
[className]="
68+
'lorem ipsum dolor sit amet consectetur adipiscing
69+
elit proin ex massa hendrerit eu posuere'
70+
"
71+
></div>
72+
} @empty {
73+
<div
74+
[className]="
75+
'lorem ipsum dolor sit amet consectetur adipiscing
76+
elit proin ex massa hendrerit eu posuere'
77+
"
78+
></div>
79+
}
80+
"
81+
`;
82+
83+
exports[`'(4) @if block' > expectation 1`] = `
84+
"<!-- ------------------------------------------------------| printWidth=60 (in snapshot) -->
85+
@if (a > b) {
86+
<div
87+
[attr.class]="
88+
'lorem ipsum dolor sit amet consectetur adipiscing
89+
elit proin ex massa hendrerit eu posuere'
90+
"
91+
></div>
92+
} @else if (b > a) {
93+
<div
94+
[attr.class]="
95+
'lorem ipsum dolor sit amet consectetur adipiscing
96+
elit proin ex massa hendrerit eu posuere'
97+
"
98+
></div>
99+
} @else {
100+
<div
101+
[attr.class]="
102+
'lorem ipsum dolor sit amet consectetur adipiscing
103+
elit proin ex massa hendrerit eu posuere'
104+
"
105+
></div>
106+
}
107+
"
108+
`;
109+
110+
exports[`'(5) @switch block' > expectation 1`] = `
111+
"<!-- ------------------------------------------------------| printWidth=60 (in snapshot) -->
112+
@switch (condition) {
113+
@case (caseA) {
114+
<div
115+
[ngClass]="
116+
'lorem ipsum dolor sit amet consectetur adipiscing
117+
elit proin ex massa hendrerit eu posuere'
118+
"
119+
></div>
120+
}
121+
@case (caseB) {
122+
<div
123+
[ngClass]="
124+
'lorem ipsum dolor sit amet consectetur adipiscing
125+
elit proin ex massa hendrerit eu posuere'
126+
"
127+
></div>
128+
}
129+
@default {
130+
<div
131+
[ngClass]="
132+
'lorem ipsum dolor sit amet consectetur adipiscing
133+
elit proin ex massa hendrerit eu posuere'
134+
"
135+
></div>
136+
}
137+
}
138+
"
139+
`;
Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2+
3+
exports[`'(1) @defer block' > expectation 1`] = `
4+
"<!-- ------------------------------------------------------| printWidth=60 (in snapshot) -->
5+
@defer {
6+
<div
7+
class="lorem ipsum dolor sit amet consectetur adipiscing elit proin
8+
ex massa hendrerit eu posuere"
9+
></div>
10+
} @placeholder {
11+
<div
12+
class="lorem ipsum dolor sit amet consectetur adipiscing elit proin
13+
ex massa hendrerit eu posuere"
14+
></div>
15+
} @loading {
16+
<div
17+
class="lorem ipsum dolor sit amet consectetur adipiscing elit proin
18+
ex massa hendrerit eu posuere"
19+
></div>
20+
} @error {
21+
<div
22+
class="lorem ipsum dolor sit amet consectetur adipiscing elit proin
23+
ex massa hendrerit eu posuere"
24+
></div>
25+
}
26+
"
27+
`;
28+
29+
exports[`'(2) @defer block with triggers and pa…' > expectation 1`] = `
30+
"<!-- ------------------------------------------------------| printWidth=60 (in snapshot) -->
31+
@defer (on timer(500ms); prefetch on idle) {
32+
<div
33+
[class]="
34+
'lorem ipsum dolor sit amet consectetur adipiscing elit proin
35+
ex massa hendrerit eu posuere'
36+
"
37+
></div>
38+
} @placeholder (minimum 500ms) {
39+
<div
40+
[class]="
41+
'lorem ipsum dolor sit amet consectetur adipiscing elit proin
42+
ex massa hendrerit eu posuere'
43+
"
44+
></div>
45+
} @loading (after 100ms; minimum 1s) {
46+
<div
47+
[class]="
48+
'lorem ipsum dolor sit amet consectetur adipiscing elit proin
49+
ex massa hendrerit eu posuere'
50+
"
51+
></div>
52+
} @error {
53+
<div
54+
[class]="
55+
'lorem ipsum dolor sit amet consectetur adipiscing elit proin
56+
ex massa hendrerit eu posuere'
57+
"
58+
></div>
59+
}
60+
"
61+
`;
62+
63+
exports[`'(3) @for block' > expectation 1`] = `
64+
"<!-- ------------------------------------------------------| printWidth=60 (in snapshot) -->
65+
@for (item of items; track item.name) {
66+
<div
67+
[className]="
68+
'lorem ipsum dolor sit amet consectetur adipiscing elit proin
69+
ex massa hendrerit eu posuere'
70+
"
71+
></div>
72+
} @empty {
73+
<div
74+
[className]="
75+
'lorem ipsum dolor sit amet consectetur adipiscing elit proin
76+
ex massa hendrerit eu posuere'
77+
"
78+
></div>
79+
}
80+
"
81+
`;
82+
83+
exports[`'(4) @if block' > expectation 1`] = `
84+
"<!-- ------------------------------------------------------| printWidth=60 (in snapshot) -->
85+
@if (a > b) {
86+
<div
87+
[attr.class]="
88+
'lorem ipsum dolor sit amet consectetur adipiscing elit proin
89+
ex massa hendrerit eu posuere'
90+
"
91+
></div>
92+
} @else if (b > a) {
93+
<div
94+
[attr.class]="
95+
'lorem ipsum dolor sit amet consectetur adipiscing elit proin
96+
ex massa hendrerit eu posuere'
97+
"
98+
></div>
99+
} @else {
100+
<div
101+
[attr.class]="
102+
'lorem ipsum dolor sit amet consectetur adipiscing elit proin
103+
ex massa hendrerit eu posuere'
104+
"
105+
></div>
106+
}
107+
"
108+
`;
109+
110+
exports[`'(5) @switch block' > expectation 1`] = `
111+
"<!-- ------------------------------------------------------| printWidth=60 (in snapshot) -->
112+
@switch (condition) {
113+
@case (caseA) {
114+
<div
115+
[ngClass]="
116+
'lorem ipsum dolor sit amet consectetur adipiscing elit proin
117+
ex massa hendrerit eu posuere'
118+
"
119+
></div>
120+
}
121+
@case (caseB) {
122+
<div
123+
[ngClass]="
124+
'lorem ipsum dolor sit amet consectetur adipiscing elit proin
125+
ex massa hendrerit eu posuere'
126+
"
127+
></div>
128+
}
129+
@default {
130+
<div
131+
[ngClass]="
132+
'lorem ipsum dolor sit amet consectetur adipiscing elit proin
133+
ex massa hendrerit eu posuere'
134+
"
135+
></div>
136+
}
137+
}
138+
"
139+
`;
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { thisPlugin, testSnapshotEach } from '../../adaptor';
2+
import { baseOptions } from '../../settings';
3+
import { fixtures } from './fixtures';
4+
5+
const options = {
6+
...baseOptions,
7+
plugins: [thisPlugin],
8+
parser: 'angular',
9+
endingPosition: 'absolute',
10+
};
11+
12+
testSnapshotEach(fixtures, options);

0 commit comments

Comments
 (0)