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..faa0a91 --- /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