Skip to content

Commit e72b4c9

Browse files
committed
Improve highlighting strategy for illegal $
Also fix missing rules for `"""` and `raw`
1 parent b28000b commit e72b4c9

File tree

3 files changed

+63
-16
lines changed

3 files changed

+63
-16
lines changed

src/typescript/Scala.tmLanguage.ts

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ export const scalaTmLanguage: TmLanguage = {
333333
},
334334
{
335335
begin: `\\b(raw)(""")`,
336-
end: '"""(?!")',
336+
end: `(""")(?!")|\\$\n|(\\$[^\\$"_{${letterChars}])`,
337337
beginCaptures: {
338338
'1': {
339339
name: 'keyword.interpolation.scala'
@@ -356,14 +356,17 @@ export const scalaTmLanguage: TmLanguage = {
356356
}
357357
],
358358
endCaptures: {
359-
'0': {
359+
'1': {
360360
name: 'string.quoted.triple.interpolated.scala punctuation.definition.string.end.scala'
361+
},
362+
'2': {
363+
name: 'invalid.illegal.unrecognized-string-escape.scala'
361364
}
362365
}
363366
},
364367
{
365368
begin: `\\b(${alphaId})(""")`,
366-
end: '"""(?!")',
369+
end: `(""")(?!")|\\$\n|(\\$[^\\$"_{${letterChars}])`,
367370
beginCaptures: {
368371
'1': {
369372
name: 'keyword.interpolation.scala'
@@ -386,8 +389,11 @@ export const scalaTmLanguage: TmLanguage = {
386389
}
387390
],
388391
endCaptures: {
389-
'0': {
392+
'1': {
390393
name: 'string.quoted.triple.interpolated.scala punctuation.definition.string.end.scala'
394+
},
395+
'2': {
396+
name: 'invalid.illegal.unrecognized-string-escape.scala'
391397
}
392398
}
393399
},
@@ -418,7 +424,7 @@ export const scalaTmLanguage: TmLanguage = {
418424
},
419425
{
420426
begin: `\\b(raw)(")`,
421-
end: `"|\\$(?=[^\\$"_{${letterChars}])`,
427+
end: `(")|\\$\n|(\\$[^\\$"_{${letterChars}])`,
422428
beginCaptures: {
423429
'1': {
424430
name: 'keyword.interpolation.scala'
@@ -441,14 +447,17 @@ export const scalaTmLanguage: TmLanguage = {
441447
}
442448
],
443449
endCaptures: {
444-
'0': {
450+
'1': {
445451
name: 'string.quoted.double.interpolated.scala punctuation.definition.string.end.scala'
452+
},
453+
'2': {
454+
name: 'invalid.illegal.unrecognized-string-escape.scala'
446455
}
447456
}
448457
},
449458
{
450459
begin: `\\b(${alphaId})(")`,
451-
end: `"|\\$(?=[^\\$"_{${letterChars}])`,
460+
end: `(")|\\$\n|(\\$[^\\$"_{${letterChars}])`,
452461
beginCaptures: {
453462
'1': {
454463
name: 'keyword.interpolation.scala'
@@ -479,8 +488,11 @@ export const scalaTmLanguage: TmLanguage = {
479488
}
480489
],
481490
endCaptures: {
482-
'0': {
491+
'1': {
483492
name: 'string.quoted.double.interpolated.scala punctuation.definition.string.end.scala'
493+
},
494+
'2': {
495+
name: 'invalid.illegal.unrecognized-string-escape.scala'
484496
}
485497
}
486498
}

tests/unit/#183.test.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,4 +78,4 @@
7878
raw"$
7979
// ^^^ source.scala keyword.interpolation.scala
8080
// ^ string.quoted.double.interpolated.scala punctuation.definition.string.begin.scala
81-
// ^ string.quoted.double.interpolated.scala punctuation.definition.string.end.scala
81+
// ^ - string.quoted.double.interpolated.scala punctuation.definition.string.end.scala

tests/unit/#195.test.scala

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,18 +30,53 @@
3030
// ^ string.quoted.double.interpolated.scala punctuation.definition.string.end.scala
3131

3232

33+
s"$
34+
// ^ string.quoted.double.interpolated.scala punctuation.definition.string.begin.scala
35+
// ^ - string.quoted.double.interpolated.scala punctuation.definition.string.end.scala
36+
// ^ - constant.character.escape.scala
37+
38+
3339
s"$ //
3440
// ^ string.quoted.double.interpolated.scala punctuation.definition.string.begin.scala
35-
// ^ string.quoted.double.interpolated.scala punctuation.definition.string.end.scala
36-
// ^^ comment.line.double-slash.scala punctuation.definition.comment.scala
41+
// ^^ invalid.illegal.unrecognized-string-escape.scala
3742

38-
s"$+
43+
s"$++
3944
// ^ string.quoted.double.interpolated.scala punctuation.definition.string.begin.scala
40-
// ^ string.quoted.double.interpolated.scala punctuation.definition.string.end.scala
41-
// ^ keyword.operator.arithmetic.scala
45+
// ^^ invalid.illegal.unrecognized-string-escape.scala
46+
// ^ keyword.operator.arithmetic.scala
4247

4348
s"$; val a =
4449
// ^ string.quoted.double.interpolated.scala punctuation.definition.string.begin.scala
45-
// ^ string.quoted.double.interpolated.scala punctuation.definition.string.end.scala
46-
// ^^^^^^^^^^ -string.quoted.double.interpolated.scala
50+
// ^^ invalid.illegal.unrecognized-string-escape.scala
51+
// ^^^^^^^^ -string.quoted.double.interpolated.scala
4752
// ^^^ keyword.declaration.stable.scala
53+
54+
raw"$
55+
// ^^^ source.scala keyword.interpolation.scala
56+
// ^ string.quoted.double.interpolated.scala punctuation.definition.string.begin.scala
57+
// ^ - string.quoted.double.interpolated.scala invalid.illegal.unrecognized-string-escape.scala
58+
59+
raw"$4
60+
// ^^^ source.scala keyword.interpolation.scala
61+
// ^ string.quoted.double.interpolated.scala punctuation.definition.string.begin.scala
62+
// ^^ invalid.illegal.unrecognized-string-escape.scala
63+
64+
raw"""$
65+
// ^^^ source.scala keyword.interpolation.scala
66+
// ^^^ string.quoted.triple.interpolated.scala punctuation.definition.string.begin.scala
67+
// ^ - string.quoted.triple.interpolated.scala invalid.illegal.unrecognized-string-escape.scala
68+
69+
raw"""$8
70+
// ^^^ source.scala keyword.interpolation.scala
71+
// ^^^ string.quoted.triple.interpolated.scala punctuation.definition.string.begin.scala
72+
// ^^ invalid.illegal.unrecognized-string-escape.scala
73+
74+
s"""$
75+
// ^ source.scala keyword.interpolation.scala
76+
// ^^^ string.quoted.triple.interpolated.scala punctuation.definition.string.begin.scala
77+
// ^ - string.quoted.triple.interpolated.scala invalid.illegal.unrecognized-string-escape.scala
78+
79+
s"""$8
80+
// ^ source.scala keyword.interpolation.scala
81+
// ^^^ string.quoted.triple.interpolated.scala punctuation.definition.string.begin.scala
82+
// ^^ invalid.illegal.unrecognized-string-escape.scala

0 commit comments

Comments
 (0)