Skip to content

Commit

Permalink
Properly highlight escape characters in raw interpolator
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolasstucki committed Jan 15, 2021
1 parent 8ab092c commit e9a6ed5
Show file tree
Hide file tree
Showing 2 changed files with 136 additions and 0 deletions.
60 changes: 60 additions & 0 deletions src/typescript/Scala.tmLanguage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -331,6 +331,36 @@ export const scalaTmLanguage: TmLanguage = {
},
name: 'string.quoted.triple.scala'
},
{
begin: `\\b(raw)(""")`,
end: '"""(?!")',
beginCaptures: {
'1': {
name: 'keyword.interpolation.scala'
},
'2': {
name: 'string.quoted.triple.interpolated.scala punctuation.definition.string.begin.scala'
}
},
patterns: [
{
match: "\\$[\\$\"]",
name: 'constant.character.escape.scala'
},
{
"include": "#string-interpolation"
},
{
match: '.',
name: 'string.quoted.triple.interpolated.scala'
}
],
endCaptures: {
'0': {
name: 'string.quoted.triple.interpolated.scala punctuation.definition.string.end.scala'
}
}
},
{
begin: `\\b(${alphaId})(""")`,
end: '"""(?!")',
Expand Down Expand Up @@ -386,6 +416,36 @@ export const scalaTmLanguage: TmLanguage = {
},
name: 'string.quoted.double.scala'
},
{
begin: `\\b(raw)(")`,
end: '"',
beginCaptures: {
'1': {
name: 'keyword.interpolation.scala'
},
'2': {
name: 'string.quoted.double.interpolated.scala punctuation.definition.string.begin.scala'
}
},
patterns: [
{
match: "\\$[\\$\"]",
name: 'constant.character.escape.scala'
},
{
include: "#string-interpolation"
},
{
match: '.',
name: 'string.quoted.double.interpolated.scala'
}
],
endCaptures: {
'0': {
name: 'string.quoted.double.interpolated.scala punctuation.definition.string.end.scala'
}
}
},
{
begin: `\\b(${alphaId})(")`,
end: '"',
Expand Down
76 changes: 76 additions & 0 deletions tests/unit/#183.test.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
// SYNTAX TEST "source.scala"


s"\\"
// ^ source.scala keyword.interpolation.scala
// ^ string.quoted.double.interpolated.scala punctuation.definition.string.begin.scala
// ^^ constant.character.escape.scala
// ^ punctuation.definition.string.end.scala

raw"\\"
// ^^^ source.scala keyword.interpolation.scala
// ^ string.quoted.double.interpolated.scala punctuation.definition.string.begin.scala
// ^^ string.quoted.double.interpolated.scala
// ^^ - constant.character.escape.scala
// ^ punctuation.definition.string.end.scala

raw"$$ " // `$"` is an escaped `"` in raw interpolators
// ^^^ source.scala keyword.interpolation.scala
// ^ string.quoted.double.interpolated.scala punctuation.definition.string.begin.scala
// ^^ constant.character.escape.scala
// ^ string.quoted.double.interpolated.scala
// ^ punctuation.definition.string.end.scala

raw"$" " // `$$` is an escaped `$` in raw interpolators
// ^^^ source.scala keyword.interpolation.scala
// ^ string.quoted.double.interpolated.scala punctuation.definition.string.begin.scala
// ^^ constant.character.escape.scala
// ^ string.quoted.double.interpolated.scala
// ^ punctuation.definition.string.end.scala

raw"${4} "
// ^^^ source.scala keyword.interpolation.scala
// ^ string.quoted.double.interpolated.scala punctuation.definition.string.begin.scala
// ^^ meta.template.expression.scala punctuation.definition.template-expression.begin.scala
// ^ meta.template.expression.scala meta.embedded.line.scala constant.numeric.scala
// ^ meta.template.expression.scala punctuation.definition.template-expression.end.scala
// ^ string.quoted.double.interpolated.scala
// ^ punctuation.definition.string.end.scala


s"""\\"""
// ^ source.scala keyword.interpolation.scala
// ^^^ string.quoted.triple.interpolated.scala punctuation.definition.string.begin.scala
// ^^ constant.character.escape.scala
// ^^^ punctuation.definition.string.end.scala

raw"""\\"""
// ^^^ source.scala keyword.interpolation.scala
// ^^^ string.quoted.triple.interpolated.scala punctuation.definition.string.begin.scala
// ^^ string.quoted.triple.interpolated.scala
// ^^ - constant.character.escape.scala
// ^^^ punctuation.definition.string.end.scala

raw"""$$ """
// ^^^ source.scala keyword.interpolation.scala
// ^^^ string.quoted.triple.interpolated.scala punctuation.definition.string.begin.scala
// ^^ constant.character.escape.scala
// ^ string.quoted.triple.interpolated.scala
// ^^^ punctuation.definition.string.end.scala

raw"""$" """
// ^^^ source.scala keyword.interpolation.scala
// ^^^ string.quoted.triple.interpolated.scala punctuation.definition.string.begin.scala
// ^^ constant.character.escape.scala
// ^ string.quoted.triple.interpolated.scala
// ^^^ punctuation.definition.string.end.scala


raw"""${4} """
// ^^^ source.scala keyword.interpolation.scala
// ^^^ string.quoted.triple.interpolated.scala punctuation.definition.string.begin.scala
// ^^ meta.template.expression.scala punctuation.definition.template-expression.begin.scala
// ^ meta.template.expression.scala meta.embedded.line.scala constant.numeric.scala
// ^ meta.template.expression.scala punctuation.definition.template-expression.end.scala
// ^ string.quoted.triple.interpolated.scala
// ^^^ punctuation.definition.string.end.scala

0 comments on commit e9a6ed5

Please sign in to comment.