From e72b4c95debc2c38e509a7e9ee360de69245e8dd Mon Sep 17 00:00:00 2001 From: Nicolas Stucki <nicolas.stucki@gmail.com> Date: Fri, 5 Feb 2021 15:47:57 +0100 Subject: [PATCH] Improve highlighting strategy for illegal $ Also fix missing rules for `"""` and `raw` --- src/typescript/Scala.tmLanguage.ts | 28 ++++++++++++----- tests/unit/#183.test.scala | 2 +- tests/unit/#195.test.scala | 49 +++++++++++++++++++++++++----- 3 files changed, 63 insertions(+), 16 deletions(-) diff --git a/src/typescript/Scala.tmLanguage.ts b/src/typescript/Scala.tmLanguage.ts index c22b96c..7300246 100644 --- a/src/typescript/Scala.tmLanguage.ts +++ b/src/typescript/Scala.tmLanguage.ts @@ -333,7 +333,7 @@ export const scalaTmLanguage: TmLanguage = { }, { begin: `\\b(raw)(""")`, - end: '"""(?!")', + end: `(""")(?!")|\\$\n|(\\$[^\\$"_{${letterChars}])`, beginCaptures: { '1': { name: 'keyword.interpolation.scala' @@ -356,14 +356,17 @@ export const scalaTmLanguage: TmLanguage = { } ], endCaptures: { - '0': { + '1': { name: 'string.quoted.triple.interpolated.scala punctuation.definition.string.end.scala' + }, + '2': { + name: 'invalid.illegal.unrecognized-string-escape.scala' } } }, { begin: `\\b(${alphaId})(""")`, - end: '"""(?!")', + end: `(""")(?!")|\\$\n|(\\$[^\\$"_{${letterChars}])`, beginCaptures: { '1': { name: 'keyword.interpolation.scala' @@ -386,8 +389,11 @@ export const scalaTmLanguage: TmLanguage = { } ], endCaptures: { - '0': { + '1': { name: 'string.quoted.triple.interpolated.scala punctuation.definition.string.end.scala' + }, + '2': { + name: 'invalid.illegal.unrecognized-string-escape.scala' } } }, @@ -418,7 +424,7 @@ export const scalaTmLanguage: TmLanguage = { }, { begin: `\\b(raw)(")`, - end: `"|\\$(?=[^\\$"_{${letterChars}])`, + end: `(")|\\$\n|(\\$[^\\$"_{${letterChars}])`, beginCaptures: { '1': { name: 'keyword.interpolation.scala' @@ -441,14 +447,17 @@ export const scalaTmLanguage: TmLanguage = { } ], endCaptures: { - '0': { + '1': { name: 'string.quoted.double.interpolated.scala punctuation.definition.string.end.scala' + }, + '2': { + name: 'invalid.illegal.unrecognized-string-escape.scala' } } }, { begin: `\\b(${alphaId})(")`, - end: `"|\\$(?=[^\\$"_{${letterChars}])`, + end: `(")|\\$\n|(\\$[^\\$"_{${letterChars}])`, beginCaptures: { '1': { name: 'keyword.interpolation.scala' @@ -479,8 +488,11 @@ export const scalaTmLanguage: TmLanguage = { } ], endCaptures: { - '0': { + '1': { name: 'string.quoted.double.interpolated.scala punctuation.definition.string.end.scala' + }, + '2': { + name: 'invalid.illegal.unrecognized-string-escape.scala' } } } diff --git a/tests/unit/#183.test.scala b/tests/unit/#183.test.scala index 2952e57..9592cc8 100644 --- a/tests/unit/#183.test.scala +++ b/tests/unit/#183.test.scala @@ -78,4 +78,4 @@ raw"$ // ^^^ source.scala keyword.interpolation.scala // ^ string.quoted.double.interpolated.scala punctuation.definition.string.begin.scala -// ^ string.quoted.double.interpolated.scala punctuation.definition.string.end.scala +// ^ - string.quoted.double.interpolated.scala punctuation.definition.string.end.scala diff --git a/tests/unit/#195.test.scala b/tests/unit/#195.test.scala index 56d302f..b8200c0 100644 --- a/tests/unit/#195.test.scala +++ b/tests/unit/#195.test.scala @@ -30,18 +30,53 @@ // ^ string.quoted.double.interpolated.scala punctuation.definition.string.end.scala + s"$ +// ^ string.quoted.double.interpolated.scala punctuation.definition.string.begin.scala +// ^ - string.quoted.double.interpolated.scala punctuation.definition.string.end.scala +// ^ - constant.character.escape.scala + + s"$ // // ^ string.quoted.double.interpolated.scala punctuation.definition.string.begin.scala -// ^ string.quoted.double.interpolated.scala punctuation.definition.string.end.scala -// ^^ comment.line.double-slash.scala punctuation.definition.comment.scala +// ^^ invalid.illegal.unrecognized-string-escape.scala - s"$+ + s"$++ // ^ string.quoted.double.interpolated.scala punctuation.definition.string.begin.scala -// ^ string.quoted.double.interpolated.scala punctuation.definition.string.end.scala -// ^ keyword.operator.arithmetic.scala +// ^^ invalid.illegal.unrecognized-string-escape.scala +// ^ keyword.operator.arithmetic.scala s"$; val a = // ^ string.quoted.double.interpolated.scala punctuation.definition.string.begin.scala -// ^ string.quoted.double.interpolated.scala punctuation.definition.string.end.scala -// ^^^^^^^^^^ -string.quoted.double.interpolated.scala +// ^^ invalid.illegal.unrecognized-string-escape.scala +// ^^^^^^^^ -string.quoted.double.interpolated.scala // ^^^ keyword.declaration.stable.scala + + raw"$ +// ^^^ source.scala keyword.interpolation.scala +// ^ string.quoted.double.interpolated.scala punctuation.definition.string.begin.scala +// ^ - string.quoted.double.interpolated.scala invalid.illegal.unrecognized-string-escape.scala + + raw"$4 +// ^^^ source.scala keyword.interpolation.scala +// ^ string.quoted.double.interpolated.scala punctuation.definition.string.begin.scala +// ^^ invalid.illegal.unrecognized-string-escape.scala + + raw"""$ +// ^^^ source.scala keyword.interpolation.scala +// ^^^ string.quoted.triple.interpolated.scala punctuation.definition.string.begin.scala +// ^ - string.quoted.triple.interpolated.scala invalid.illegal.unrecognized-string-escape.scala + + raw"""$8 +// ^^^ source.scala keyword.interpolation.scala +// ^^^ string.quoted.triple.interpolated.scala punctuation.definition.string.begin.scala +// ^^ invalid.illegal.unrecognized-string-escape.scala + + s"""$ +// ^ source.scala keyword.interpolation.scala +// ^^^ string.quoted.triple.interpolated.scala punctuation.definition.string.begin.scala +// ^ - string.quoted.triple.interpolated.scala invalid.illegal.unrecognized-string-escape.scala + + s"""$8 +// ^ source.scala keyword.interpolation.scala +// ^^^ string.quoted.triple.interpolated.scala punctuation.definition.string.begin.scala +// ^^ invalid.illegal.unrecognized-string-escape.scala