Skip to content

Commit 299dd90

Browse files
authored
fix: fix location for template literals (#327)
1 parent 72bfe63 commit 299dd90

File tree

4 files changed

+31
-39
lines changed

4 files changed

+31
-39
lines changed

package.json

+4-4
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@
2727
"release": "yarn build && standard-version"
2828
},
2929
"devDependencies": {
30-
"@angular/compiler": "19.2.1",
30+
"@angular/compiler": "19.2.2",
3131
"@babel/code-frame": "7.26.2",
32-
"@babel/parser": "7.26.9",
33-
"@babel/types": "7.26.9",
32+
"@babel/parser": "7.26.10",
33+
"@babel/types": "7.26.10",
3434
"@types/babel__code-frame": "7.0.6",
3535
"@types/node": "22.13.10",
3636
"@vitest/coverage-v8": "3.0.8",
@@ -50,7 +50,7 @@
5050
"vitest": "3.0.8"
5151
},
5252
"peerDependencies": {
53-
"@angular/compiler": "^19.0.0"
53+
"@angular/compiler": ">=19.2.2"
5454
},
5555
"engines": {
5656
"node": ">= 20"

src/transform-node.ts

+6-17
Original file line numberDiff line numberDiff line change
@@ -555,24 +555,13 @@ class Transformer extends Source {
555555
}
556556

557557
if (node instanceof angular.TemplateLiteralElement) {
558-
const templateLiteral = options!.parent! as angular.TemplateLiteral;
559-
const elementIndex = templateLiteral.elements.indexOf(node);
558+
const { elements } = options!.parent! as angular.TemplateLiteral;
559+
const elementIndex = elements.indexOf(node);
560560
const isFirst = elementIndex === 0;
561-
const isLast = elementIndex === templateLiteral.elements.length - 1;
562-
563-
// The `TemplateLiteralElement` don't have correct location information
564-
const start = isFirst
565-
? templateLiteral.sourceSpan.start + 1
566-
: node.sourceSpan.start;
567-
let end;
568-
if (isLast) {
569-
end = templateLiteral.sourceSpan.end - 1;
570-
} else {
571-
const nextExpression = templateLiteral.expressions[elementIndex];
572-
// TODO: Support search multiple characters in `getCharacterLastIndex()`
573-
// FIXME: Search `${` instead
574-
end = this.getCharacterLastIndex('$', nextExpression.sourceSpan.start);
575-
}
561+
const isLast = elementIndex === elements.length - 1;
562+
563+
const end = node.sourceSpan.end - (isLast ? 1 : 0);
564+
const start = node.sourceSpan.start + (isFirst ? 1 : 0);
576565
const raw = this.text.slice(start, end);
577566

578567
return this.#create<babel.TemplateElement>(

tests/transform.test.ts

+3
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,9 @@ describe.each`
9696
${'PrefixNot'} | ${'UnaryExpression'} | ${' ! ( typeof {} === "number" ) '} | ${true} | ${true} | ${true} | ${true}
9797
${'TemplateLiteral'} | ${'TemplateLiteral'} | ${' ` a ${ b } \u0063 ` '} | ${true} | ${true} | ${true} | ${true}
9898
${'TemplateLiteral'} | ${'TemplateLiteral'} | ${' ( ` a ${ b } \u0063 ` ) '} | ${true} | ${true} | ${true} | ${true}
99+
${'TemplateLiteral'} | ${'TemplateLiteral'} | ${' ` \u0063 ` '} | ${true} | ${true} | ${true} | ${true}
100+
${'TemplateLiteral'} | ${'TemplateLiteral'} | ${' ( ( ` ` ) ) '} | ${true} | ${true} | ${true} | ${true}
101+
${'TemplateLiteral'} | ${'TemplateLiteral'} | ${' `` '} | ${true} | ${true} | ${true} | ${true}
99102
`('($expectedAngularType -> $expectedEstreeType)', (fields) => {
100103
for (const method of PARSE_METHODS) {
101104
testSection(method, fields);

yarn.lock

+18-18
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,17 @@ __metadata:
1515
languageName: node
1616
linkType: hard
1717

18-
"@angular/compiler@npm:19.2.1":
19-
version: 19.2.1
20-
resolution: "@angular/compiler@npm:19.2.1"
18+
"@angular/compiler@npm:19.2.2":
19+
version: 19.2.2
20+
resolution: "@angular/compiler@npm:19.2.2"
2121
dependencies:
2222
tslib: "npm:^2.3.0"
2323
peerDependencies:
24-
"@angular/core": 19.2.1
24+
"@angular/core": 19.2.2
2525
peerDependenciesMeta:
2626
"@angular/core":
2727
optional: true
28-
checksum: 10/24d094e6f6653e20bd554a1b38488b6e6f752ec65491dd77135fc8b7ac03020f64ed967e21fd9ea38a5e644e7e90e84cf8da24d31ef905944cbafa34c05a31bb
28+
checksum: 10/2c427e4e4696f8ce357e432a517d12a0730f9cbdb1306b5be49f9d4f7bd54b76442cfaba8f82579152bc814402e5f666bb5092c994f43c3022bb9a93e8d64db6
2929
languageName: node
3030
linkType: hard
3131

@@ -54,24 +54,24 @@ __metadata:
5454
languageName: node
5555
linkType: hard
5656

57-
"@babel/parser@npm:7.26.9, @babel/parser@npm:^7.25.4":
58-
version: 7.26.9
59-
resolution: "@babel/parser@npm:7.26.9"
57+
"@babel/parser@npm:7.26.10, @babel/parser@npm:^7.25.4":
58+
version: 7.26.10
59+
resolution: "@babel/parser@npm:7.26.10"
6060
dependencies:
61-
"@babel/types": "npm:^7.26.9"
61+
"@babel/types": "npm:^7.26.10"
6262
bin:
6363
parser: ./bin/babel-parser.js
64-
checksum: 10/cb84fe3ba556d6a4360f3373cf7eb0901c46608c8d77330cc1ca021d60f5d6ebb4056a8e7f9dd0ef231923ef1fe69c87b11ce9e160d2252e089a20232a2b942b
64+
checksum: 10/3f87781f46795ba72448168061d9e99c394fdf9cd4aa3ddf053a06334247da4d25d0923ccc89195937d3360d384cee181e99711763c1e8fe81d4f17ee22541fc
6565
languageName: node
6666
linkType: hard
6767

68-
"@babel/types@npm:7.26.9, @babel/types@npm:^7.25.4, @babel/types@npm:^7.26.9":
69-
version: 7.26.9
70-
resolution: "@babel/types@npm:7.26.9"
68+
"@babel/types@npm:7.26.10, @babel/types@npm:^7.25.4, @babel/types@npm:^7.26.10":
69+
version: 7.26.10
70+
resolution: "@babel/types@npm:7.26.10"
7171
dependencies:
7272
"@babel/helper-string-parser": "npm:^7.25.9"
7373
"@babel/helper-validator-identifier": "npm:^7.25.9"
74-
checksum: 10/11b62ea7ed64ef7e39cc9b33852c1084064c3b970ae0eaa5db659241cfb776577d1e68cbff4de438bada885d3a827b52cc0f3746112d8e1bc672bb99a8eb5b56
74+
checksum: 10/6b4f24ee77af853c2126eaabb65328cd44a7d6f439685131cf929c30567e01b6ea2e5d5653b2c304a09c63a5a6199968f0e27228a007acf35032036d79a9dee6
7575
languageName: node
7676
linkType: hard
7777

@@ -989,10 +989,10 @@ __metadata:
989989
version: 0.0.0-use.local
990990
resolution: "angular-estree-parser@workspace:."
991991
dependencies:
992-
"@angular/compiler": "npm:19.2.1"
992+
"@angular/compiler": "npm:19.2.2"
993993
"@babel/code-frame": "npm:7.26.2"
994-
"@babel/parser": "npm:7.26.9"
995-
"@babel/types": "npm:7.26.9"
994+
"@babel/parser": "npm:7.26.10"
995+
"@babel/types": "npm:7.26.10"
996996
"@types/babel__code-frame": "npm:7.0.6"
997997
"@types/node": "npm:22.13.10"
998998
"@vitest/coverage-v8": "npm:3.0.8"
@@ -1011,7 +1011,7 @@ __metadata:
10111011
typescript-eslint: "npm:8.26.1"
10121012
vitest: "npm:3.0.8"
10131013
peerDependencies:
1014-
"@angular/compiler": ^19.0.0
1014+
"@angular/compiler": ">=19.2.2"
10151015
languageName: unknown
10161016
linkType: soft
10171017

0 commit comments

Comments
 (0)