From e9a6ed5760fc2e0b2061189ab2f63fb69de413fd Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Fri, 15 Jan 2021 17:20:29 +0100 Subject: [PATCH 1/2] Properly highlight escape characters in `raw` interpolator --- src/typescript/Scala.tmLanguage.ts | 60 +++++++++++++++++++++++ tests/unit/#183.test.scala | 76 ++++++++++++++++++++++++++++++ 2 files changed, 136 insertions(+) create mode 100644 tests/unit/#183.test.scala diff --git a/src/typescript/Scala.tmLanguage.ts b/src/typescript/Scala.tmLanguage.ts index a819529..3a63334 100644 --- a/src/typescript/Scala.tmLanguage.ts +++ b/src/typescript/Scala.tmLanguage.ts @@ -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: '"""(?!")', @@ -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: '"', diff --git a/tests/unit/#183.test.scala b/tests/unit/#183.test.scala new file mode 100644 index 0000000..a1114e4 --- /dev/null +++ b/tests/unit/#183.test.scala @@ -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 From 3bbb8bd2a684902ee5f19cacd8da97b9d2080062 Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Sun, 17 Jan 2021 13:53:55 +0100 Subject: [PATCH 2/2] Fix comments --- tests/unit/#183.test.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/unit/#183.test.scala b/tests/unit/#183.test.scala index a1114e4..faa0a91 100644 --- a/tests/unit/#183.test.scala +++ b/tests/unit/#183.test.scala @@ -14,14 +14,14 @@ // ^^ - constant.character.escape.scala // ^ punctuation.definition.string.end.scala - raw"$$ " // `$"` is an escaped `"` in raw interpolators + 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 + 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