Skip to content

Commit 10e15a5

Browse files
Merge pull request #74 from kiendang/dollar-sign
Remove $ as possible character in simple interpolated variable name
2 parents 37c1f36 + 9a3fb4f commit 10e15a5

File tree

7 files changed

+105
-78
lines changed

7 files changed

+105
-78
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ node_modules
22

33
*.vsix
44
.metals
5+
.vscode

src/typescript/Scala.tmLanguage.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ const letter = `[${letterChars}]`
1010
const letterOrDigitChars = `${letterChars}0-9`
1111
const letterOrDigit = `[${letterOrDigitChars}]`
1212
const alphaId = `${letter}+`
13-
const simpleInterpolatedVariable = `${letter}${letterOrDigit}*` // see SIP-11 https://docs.scala-lang.org/sips/string-interpolation.html
13+
const letterOrDigitNoDollarSign = `[${letterOrDigit.replace("\\$", "")}]`
14+
const simpleInterpolatedVariable = `${letter}${letterOrDigitNoDollarSign}*` // see SIP-11 https://docs.scala-lang.org/sips/string-interpolation.html
1415
const opchar = `[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]`
1516
const idrest = `${letter}${letterOrDigit}*(?:(?<=_)${opchar}+)?`
1617
const idUpper = `${upperLetter}${letterOrDigit}*(?:(?<=_)${opchar}+)?`
@@ -326,6 +327,7 @@ export const scalaTmLanguage: TmLanguage = {
326327
match: "\\$\\$"
327328
},
328329
{
330+
name: "meta.template.expression.scala",
329331
match: `(\\$)(${simpleInterpolatedVariable})`,
330332
captures: {
331333
"1": {
@@ -334,7 +336,7 @@ export const scalaTmLanguage: TmLanguage = {
334336
}
335337
},
336338
{
337-
name: "punctuation.definition.template-expression.scala",
339+
name: "meta.template.expression.scala",
338340
begin: "\\$\\{",
339341
beginCaptures: { "0": { name: "punctuation.definition.template-expression.begin.scala" } },
340342
end: "\\}",
@@ -343,7 +345,8 @@ export const scalaTmLanguage: TmLanguage = {
343345
{
344346
include: "#code"
345347
}
346-
]
348+
],
349+
contentName: "meta.embedded.line.scala"
347350
}
348351
]
349352
},

syntaxes/Scala.tmLanguage.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

tests/snap/lexical.test.scala.snap

Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -279,90 +279,90 @@
279279
#^^ source.scala
280280
# ^ source.scala keyword.interpolation.scala
281281
# ^ source.scala string.quoted.double.interpolated.scala punctuation.definition.string.begin.scala
282-
# ^ source.scala punctuation.definition.template-expression.begin.scala
283-
# ^ source.scala
282+
# ^ source.scala meta.template.expression.scala punctuation.definition.template-expression.begin.scala
283+
# ^ source.scala meta.template.expression.scala
284284
# ^ source.scala string.quoted.double.interpolated.scala
285285
# ^ source.scala string.quoted.double.interpolated.scala
286286
# ^ source.scala string.quoted.double.interpolated.scala
287287
# ^ source.scala string.quoted.double.interpolated.scala
288288
# ^ source.scala string.quoted.double.interpolated.scala
289289
# ^ source.scala string.quoted.double.interpolated.scala
290290
# ^ source.scala string.quoted.double.interpolated.scala
291-
# ^^ source.scala punctuation.definition.template-expression.scala punctuation.definition.template-expression.begin.scala
292-
# ^^^ source.scala punctuation.definition.template-expression.scala keyword.declaration.stable.scala
293-
# ^ source.scala punctuation.definition.template-expression.scala
294-
# ^ source.scala punctuation.definition.template-expression.scala variable.other.declaration.scala
295-
# ^ source.scala punctuation.definition.template-expression.scala
296-
# ^ source.scala punctuation.definition.template-expression.scala keyword.operator.comparison.scala
297-
# ^^ source.scala punctuation.definition.template-expression.scala
298-
# ^ source.scala punctuation.definition.template-expression.scala punctuation.definition.template-expression.end.scala
291+
# ^^ source.scala meta.template.expression.scala punctuation.definition.template-expression.begin.scala
292+
# ^^^ source.scala meta.template.expression.scala meta.embedded.line.scala keyword.declaration.stable.scala
293+
# ^ source.scala meta.template.expression.scala meta.embedded.line.scala
294+
# ^ source.scala meta.template.expression.scala meta.embedded.line.scala variable.other.declaration.scala
295+
# ^ source.scala meta.template.expression.scala meta.embedded.line.scala
296+
# ^ source.scala meta.template.expression.scala meta.embedded.line.scala keyword.operator.comparison.scala
297+
# ^^ source.scala meta.template.expression.scala meta.embedded.line.scala
298+
# ^ source.scala meta.template.expression.scala punctuation.definition.template-expression.end.scala
299299
# ^ source.scala string.quoted.double.interpolated.scala punctuation.definition.string.end.scala
300300
> custom"$x plain ${val x = y}"
301301
#^^ source.scala
302302
# ^^^^^^ source.scala keyword.interpolation.scala
303303
# ^ source.scala string.quoted.double.interpolated.scala punctuation.definition.string.begin.scala
304-
# ^ source.scala punctuation.definition.template-expression.begin.scala
305-
# ^ source.scala
304+
# ^ source.scala meta.template.expression.scala punctuation.definition.template-expression.begin.scala
305+
# ^ source.scala meta.template.expression.scala
306306
# ^ source.scala string.quoted.double.interpolated.scala
307307
# ^ source.scala string.quoted.double.interpolated.scala
308308
# ^ source.scala string.quoted.double.interpolated.scala
309309
# ^ source.scala string.quoted.double.interpolated.scala
310310
# ^ source.scala string.quoted.double.interpolated.scala
311311
# ^ source.scala string.quoted.double.interpolated.scala
312312
# ^ source.scala string.quoted.double.interpolated.scala
313-
# ^^ source.scala punctuation.definition.template-expression.scala punctuation.definition.template-expression.begin.scala
314-
# ^^^ source.scala punctuation.definition.template-expression.scala keyword.declaration.stable.scala
315-
# ^ source.scala punctuation.definition.template-expression.scala
316-
# ^ source.scala punctuation.definition.template-expression.scala variable.other.declaration.scala
317-
# ^ source.scala punctuation.definition.template-expression.scala
318-
# ^ source.scala punctuation.definition.template-expression.scala keyword.operator.comparison.scala
319-
# ^^ source.scala punctuation.definition.template-expression.scala
320-
# ^ source.scala punctuation.definition.template-expression.scala punctuation.definition.template-expression.end.scala
313+
# ^^ source.scala meta.template.expression.scala punctuation.definition.template-expression.begin.scala
314+
# ^^^ source.scala meta.template.expression.scala meta.embedded.line.scala keyword.declaration.stable.scala
315+
# ^ source.scala meta.template.expression.scala meta.embedded.line.scala
316+
# ^ source.scala meta.template.expression.scala meta.embedded.line.scala variable.other.declaration.scala
317+
# ^ source.scala meta.template.expression.scala meta.embedded.line.scala
318+
# ^ source.scala meta.template.expression.scala meta.embedded.line.scala keyword.operator.comparison.scala
319+
# ^^ source.scala meta.template.expression.scala meta.embedded.line.scala
320+
# ^ source.scala meta.template.expression.scala punctuation.definition.template-expression.end.scala
321321
# ^ source.scala string.quoted.double.interpolated.scala punctuation.definition.string.end.scala
322322
>
323323
> s"""$x plain ${val x = y}"""
324324
#^^ source.scala
325325
# ^ source.scala keyword.interpolation.scala
326326
# ^^^ source.scala string.quoted.triple.interpolated.scala punctuation.definition.string.begin.scala
327-
# ^ source.scala punctuation.definition.template-expression.begin.scala
328-
# ^ source.scala
327+
# ^ source.scala meta.template.expression.scala punctuation.definition.template-expression.begin.scala
328+
# ^ source.scala meta.template.expression.scala
329329
# ^ source.scala string.quoted.triple.interpolated.scala
330330
# ^ source.scala string.quoted.triple.interpolated.scala
331331
# ^ source.scala string.quoted.triple.interpolated.scala
332332
# ^ source.scala string.quoted.triple.interpolated.scala
333333
# ^ source.scala string.quoted.triple.interpolated.scala
334334
# ^ source.scala string.quoted.triple.interpolated.scala
335335
# ^ source.scala string.quoted.triple.interpolated.scala
336-
# ^^ source.scala punctuation.definition.template-expression.scala punctuation.definition.template-expression.begin.scala
337-
# ^^^ source.scala punctuation.definition.template-expression.scala keyword.declaration.stable.scala
338-
# ^ source.scala punctuation.definition.template-expression.scala
339-
# ^ source.scala punctuation.definition.template-expression.scala variable.other.declaration.scala
340-
# ^ source.scala punctuation.definition.template-expression.scala
341-
# ^ source.scala punctuation.definition.template-expression.scala keyword.operator.comparison.scala
342-
# ^^ source.scala punctuation.definition.template-expression.scala
343-
# ^ source.scala punctuation.definition.template-expression.scala punctuation.definition.template-expression.end.scala
336+
# ^^ source.scala meta.template.expression.scala punctuation.definition.template-expression.begin.scala
337+
# ^^^ source.scala meta.template.expression.scala meta.embedded.line.scala keyword.declaration.stable.scala
338+
# ^ source.scala meta.template.expression.scala meta.embedded.line.scala
339+
# ^ source.scala meta.template.expression.scala meta.embedded.line.scala variable.other.declaration.scala
340+
# ^ source.scala meta.template.expression.scala meta.embedded.line.scala
341+
# ^ source.scala meta.template.expression.scala meta.embedded.line.scala keyword.operator.comparison.scala
342+
# ^^ source.scala meta.template.expression.scala meta.embedded.line.scala
343+
# ^ source.scala meta.template.expression.scala punctuation.definition.template-expression.end.scala
344344
# ^^^ source.scala string.quoted.triple.interpolated.scala punctuation.definition.string.end.scala
345345
> custom"""$x plain ${val x = y}"""
346346
#^^ source.scala
347347
# ^^^^^^ source.scala keyword.interpolation.scala
348348
# ^^^ source.scala string.quoted.triple.interpolated.scala punctuation.definition.string.begin.scala
349-
# ^ source.scala punctuation.definition.template-expression.begin.scala
350-
# ^ source.scala
349+
# ^ source.scala meta.template.expression.scala punctuation.definition.template-expression.begin.scala
350+
# ^ source.scala meta.template.expression.scala
351351
# ^ source.scala string.quoted.triple.interpolated.scala
352352
# ^ source.scala string.quoted.triple.interpolated.scala
353353
# ^ source.scala string.quoted.triple.interpolated.scala
354354
# ^ source.scala string.quoted.triple.interpolated.scala
355355
# ^ source.scala string.quoted.triple.interpolated.scala
356356
# ^ source.scala string.quoted.triple.interpolated.scala
357357
# ^ source.scala string.quoted.triple.interpolated.scala
358-
# ^^ source.scala punctuation.definition.template-expression.scala punctuation.definition.template-expression.begin.scala
359-
# ^^^ source.scala punctuation.definition.template-expression.scala keyword.declaration.stable.scala
360-
# ^ source.scala punctuation.definition.template-expression.scala
361-
# ^ source.scala punctuation.definition.template-expression.scala variable.other.declaration.scala
362-
# ^ source.scala punctuation.definition.template-expression.scala
363-
# ^ source.scala punctuation.definition.template-expression.scala keyword.operator.comparison.scala
364-
# ^^ source.scala punctuation.definition.template-expression.scala
365-
# ^ source.scala punctuation.definition.template-expression.scala punctuation.definition.template-expression.end.scala
358+
# ^^ source.scala meta.template.expression.scala punctuation.definition.template-expression.begin.scala
359+
# ^^^ source.scala meta.template.expression.scala meta.embedded.line.scala keyword.declaration.stable.scala
360+
# ^ source.scala meta.template.expression.scala meta.embedded.line.scala
361+
# ^ source.scala meta.template.expression.scala meta.embedded.line.scala variable.other.declaration.scala
362+
# ^ source.scala meta.template.expression.scala meta.embedded.line.scala
363+
# ^ source.scala meta.template.expression.scala meta.embedded.line.scala keyword.operator.comparison.scala
364+
# ^^ source.scala meta.template.expression.scala meta.embedded.line.scala
365+
# ^ source.scala meta.template.expression.scala punctuation.definition.template-expression.end.scala
366366
# ^^^ source.scala string.quoted.triple.interpolated.scala punctuation.definition.string.end.scala
367367
>}
368368
#^ source.scala punctuation.section.block.end.scala

tests/unit/#71.test.scala

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@
22

33
s"1 + 2 = ${ 1 + { val x = 2; x } }."
44
// ^ keyword.interpolation.scala
5+
// ^^^^^^^^^^^^^^^^^^^^^^^^^ meta.template.expression.scala
56
// ^ punctuation.definition.string.begin.scala
67
// ^^^^^^^^ string.quoted.double.interpolated.scala
78
// ^^ punctuation.definition.template-expression.begin.scala
89
// ^ punctuation.section.block.begin.scala
910
// ^ punctuation.section.block.end.scala
10-
// ^^^^^^^^^^^^^^^^^^^^^^ punctuation.definition.template-expression.scala
11+
// ^^^^^^^^^^^^^^^^^^^^^^ meta.embedded.line.scala
1112
// ^ punctuation.definition.template-expression.end.scala
1213
// ^ string.quoted.double.interpolated.scala
1314
// ^ punctuation.definition.string.end.scala
@@ -16,18 +17,17 @@
1617
// ^ keyword.interpolation.scala
1718
// ^^^ punctuation.definition.string.begin.scala
1819
// ^^^^^^^^ string.quoted.triple.interpolated.scala
19-
// ^^ punctuation.definition.template-expression.begin.scala
20+
// ^^ meta.template.expression.scala punctuation.definition.template-expression.begin.scala
2021
def add(x: Int, y: Int) = {
21-
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^ punctuation.definition.template-expression.scala
22+
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.template.expression.scala meta.embedded.line.scala
2223
// ^ punctuation.section.block.begin.scala
2324
x + y
24-
// ^^^^^ punctuation.definition.template-expression.scala
25+
// ^^^^^ meta.template.expression.scala meta.embedded.line.scala
2526
}
26-
// ^ punctuation.section.block.end.scala
27-
// ^ punctuation.definition.template-expression.scala
27+
// ^ meta.template.expression.scala meta.embedded.line.scala punctuation.section.block.end.scala
2828
add(1, 2)
29-
// ^^^^^^^^^ punctuation.definition.template-expression.scala
29+
// ^^^^^^^^^ meta.template.expression.scala meta.embedded.line.scala
3030
}."""
31-
// ^ punctuation.definition.template-expression.end.scala
31+
// ^ meta.template.expression.scala punctuation.definition.template-expression.end.scala
3232
// ^ string.quoted.triple.interpolated.scala
3333
// ^^^ punctuation.definition.string.end.scala

tests/unit/#72.test.scala

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// SYNTAX TEST "source.scala"
2+
3+
s"$first$second"
4+
// ^ keyword.interpolation.scala
5+
// ^^^^^^^^^^^^^ meta.template.expression.scala
6+
// ^ punctuation.definition.string.begin.scala
7+
// ^ punctuation.definition.template-expression.begin.scala
8+
// ^ punctuation.definition.template-expression.begin.scala
9+
// ^ punctuation.definition.string.end.scala
10+
11+
s"$safeTagMarker${mtch.matched}$safeTagMarker"
12+
// ^ keyword.interpolation.scala
13+
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.template.expression.scala
14+
// ^ punctuation.definition.string.begin.scala
15+
// ^ punctuation.definition.template-expression.begin.scala
16+
// ^^ punctuation.definition.template-expression.begin.scala
17+
// ^^^^^^^^^^^^ meta.embedded.line.scala
18+
// ^ punctuation.definition.template-expression.end.scala
19+
// ^ punctuation.definition.template-expression.begin.scala
20+
// ^ punctuation.definition.string.end.scala
21+
22+
s"${x$}"
23+
// ^ keyword.interpolation.scala
24+
// ^^^^^ meta.template.expression.scala
25+
// ^ punctuation.definition.string.begin.scala
26+
// ^^ punctuation.definition.template-expression.begin.scala
27+
// ^^ meta.embedded.line.scala
28+
// ^ punctuation.definition.template-expression.end.scala
29+
// ^ punctuation.definition.string.end.scala
30+
31+
val a = 4; foo(a)
32+
// ^^^ keyword.declaration.stable.scala
33+
// ^ variable.other.declaration.scala
34+
// ^ keyword.operator.comparison.scala
35+
// ^ constant.numeric.scala
36+
s"$safeTagMarker${val a = 4; foo(a)}$safeTagMarker"
37+
// ^^^^^^^^^^^^^^^^^^^^ meta.template.expression.scala
38+
// ^^^^^^^^^^^^^^^^^ meta.embedded.line.scala
39+
// ^^^^^^^^^^^^^^^^^ - punctuation.definition.template-expression
40+
// ^^^ keyword.declaration.stable.scala
41+
// ^ variable.other.declaration.scala
42+
// ^ keyword.operator.comparison.scala
43+
// ^ constant.numeric.scala

0 commit comments

Comments
 (0)