Skip to content

Commit ded2bf1

Browse files
Merge pull request #184 from nicolasstucki/fix-#183
Properly highlight escape characters in `raw` interpolator
2 parents 8ab092c + 3bbb8bd commit ded2bf1

File tree

2 files changed

+136
-0
lines changed

2 files changed

+136
-0
lines changed

src/typescript/Scala.tmLanguage.ts

+60
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,36 @@ export const scalaTmLanguage: TmLanguage = {
331331
},
332332
name: 'string.quoted.triple.scala'
333333
},
334+
{
335+
begin: `\\b(raw)(""")`,
336+
end: '"""(?!")',
337+
beginCaptures: {
338+
'1': {
339+
name: 'keyword.interpolation.scala'
340+
},
341+
'2': {
342+
name: 'string.quoted.triple.interpolated.scala punctuation.definition.string.begin.scala'
343+
}
344+
},
345+
patterns: [
346+
{
347+
match: "\\$[\\$\"]",
348+
name: 'constant.character.escape.scala'
349+
},
350+
{
351+
"include": "#string-interpolation"
352+
},
353+
{
354+
match: '.',
355+
name: 'string.quoted.triple.interpolated.scala'
356+
}
357+
],
358+
endCaptures: {
359+
'0': {
360+
name: 'string.quoted.triple.interpolated.scala punctuation.definition.string.end.scala'
361+
}
362+
}
363+
},
334364
{
335365
begin: `\\b(${alphaId})(""")`,
336366
end: '"""(?!")',
@@ -386,6 +416,36 @@ export const scalaTmLanguage: TmLanguage = {
386416
},
387417
name: 'string.quoted.double.scala'
388418
},
419+
{
420+
begin: `\\b(raw)(")`,
421+
end: '"',
422+
beginCaptures: {
423+
'1': {
424+
name: 'keyword.interpolation.scala'
425+
},
426+
'2': {
427+
name: 'string.quoted.double.interpolated.scala punctuation.definition.string.begin.scala'
428+
}
429+
},
430+
patterns: [
431+
{
432+
match: "\\$[\\$\"]",
433+
name: 'constant.character.escape.scala'
434+
},
435+
{
436+
include: "#string-interpolation"
437+
},
438+
{
439+
match: '.',
440+
name: 'string.quoted.double.interpolated.scala'
441+
}
442+
],
443+
endCaptures: {
444+
'0': {
445+
name: 'string.quoted.double.interpolated.scala punctuation.definition.string.end.scala'
446+
}
447+
}
448+
},
389449
{
390450
begin: `\\b(${alphaId})(")`,
391451
end: '"',

tests/unit/#183.test.scala

+76
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
// SYNTAX TEST "source.scala"
2+
3+
4+
s"\\"
5+
// ^ source.scala keyword.interpolation.scala
6+
// ^ string.quoted.double.interpolated.scala punctuation.definition.string.begin.scala
7+
// ^^ constant.character.escape.scala
8+
// ^ punctuation.definition.string.end.scala
9+
10+
raw"\\"
11+
// ^^^ source.scala keyword.interpolation.scala
12+
// ^ string.quoted.double.interpolated.scala punctuation.definition.string.begin.scala
13+
// ^^ string.quoted.double.interpolated.scala
14+
// ^^ - constant.character.escape.scala
15+
// ^ punctuation.definition.string.end.scala
16+
17+
raw"$$ " // `$$` is an escaped `$` in raw interpolators
18+
// ^^^ source.scala keyword.interpolation.scala
19+
// ^ string.quoted.double.interpolated.scala punctuation.definition.string.begin.scala
20+
// ^^ constant.character.escape.scala
21+
// ^ string.quoted.double.interpolated.scala
22+
// ^ punctuation.definition.string.end.scala
23+
24+
raw"$" " // `$"` is an escaped `"` in raw interpolators
25+
// ^^^ source.scala keyword.interpolation.scala
26+
// ^ string.quoted.double.interpolated.scala punctuation.definition.string.begin.scala
27+
// ^^ constant.character.escape.scala
28+
// ^ string.quoted.double.interpolated.scala
29+
// ^ punctuation.definition.string.end.scala
30+
31+
raw"${4} "
32+
// ^^^ source.scala keyword.interpolation.scala
33+
// ^ string.quoted.double.interpolated.scala punctuation.definition.string.begin.scala
34+
// ^^ meta.template.expression.scala punctuation.definition.template-expression.begin.scala
35+
// ^ meta.template.expression.scala meta.embedded.line.scala constant.numeric.scala
36+
// ^ meta.template.expression.scala punctuation.definition.template-expression.end.scala
37+
// ^ string.quoted.double.interpolated.scala
38+
// ^ punctuation.definition.string.end.scala
39+
40+
41+
s"""\\"""
42+
// ^ source.scala keyword.interpolation.scala
43+
// ^^^ string.quoted.triple.interpolated.scala punctuation.definition.string.begin.scala
44+
// ^^ constant.character.escape.scala
45+
// ^^^ punctuation.definition.string.end.scala
46+
47+
raw"""\\"""
48+
// ^^^ source.scala keyword.interpolation.scala
49+
// ^^^ string.quoted.triple.interpolated.scala punctuation.definition.string.begin.scala
50+
// ^^ string.quoted.triple.interpolated.scala
51+
// ^^ - constant.character.escape.scala
52+
// ^^^ punctuation.definition.string.end.scala
53+
54+
raw"""$$ """
55+
// ^^^ source.scala keyword.interpolation.scala
56+
// ^^^ string.quoted.triple.interpolated.scala punctuation.definition.string.begin.scala
57+
// ^^ constant.character.escape.scala
58+
// ^ string.quoted.triple.interpolated.scala
59+
// ^^^ punctuation.definition.string.end.scala
60+
61+
raw"""$" """
62+
// ^^^ source.scala keyword.interpolation.scala
63+
// ^^^ string.quoted.triple.interpolated.scala punctuation.definition.string.begin.scala
64+
// ^^ constant.character.escape.scala
65+
// ^ string.quoted.triple.interpolated.scala
66+
// ^^^ punctuation.definition.string.end.scala
67+
68+
69+
raw"""${4} """
70+
// ^^^ source.scala keyword.interpolation.scala
71+
// ^^^ string.quoted.triple.interpolated.scala punctuation.definition.string.begin.scala
72+
// ^^ meta.template.expression.scala punctuation.definition.template-expression.begin.scala
73+
// ^ meta.template.expression.scala meta.embedded.line.scala constant.numeric.scala
74+
// ^ meta.template.expression.scala punctuation.definition.template-expression.end.scala
75+
// ^ string.quoted.triple.interpolated.scala
76+
// ^^^ punctuation.definition.string.end.scala

0 commit comments

Comments
 (0)