diff --git a/src/typescript/Scala.tmLanguage.ts b/src/typescript/Scala.tmLanguage.ts index f354a10..de9ed48 100644 --- a/src/typescript/Scala.tmLanguage.ts +++ b/src/typescript/Scala.tmLanguage.ts @@ -18,6 +18,7 @@ const idUpper = `${upperLetter}${letterOrDigit}*(?:(?<=_)${opchar}+)?` const idLower = `${lowerLetter}${letterOrDigit}*(?:(?<=_)${opchar}+)?` const plainid = `(?:${idrest}|${opchar}+)` const backQuotedId = "`[^`]+`" +const anyId = `(?:${plainid}|${backQuotedId})` const endOfLineMaybeWithComment = "(?=\\s*(//.*|/\\*(?!.*\\*/\\s*\\S.*).*)?$)" export const scalaTmLanguage: TmLanguage = { @@ -661,8 +662,30 @@ export const scalaTmLanguage: TmLanguage = { } } }, + { // val (x1, x2) = tup // val Some(x) = opt + match: `\\b(?:(val)|(var))(?=\\s+(${anyId})?\\()`, + captures: { + '1': { + name: 'keyword.declaration.stable.scala' + }, + '2': { + name: 'keyword.declaration.volatile.scala' + } + } + }, + { // val x1, x2 = y + match: `\\b(?:(val)|(var))\\s+(?:${anyId})(?=\\s*,)`, + captures: { + '1': { + name: 'keyword.declaration.stable.scala' + }, + '2': { + name: 'keyword.declaration.volatile.scala' + } + } + }, { - match: `\\b(?:(val)|(var))\\s+(?:(${idUpper}(\\s*,\\s*${idUpper})*|${backQuotedId}|${plainid})|(?=\\())`, + match: `\\b(?:(val)|(var))\\s+(${anyId})`, captures: { '1': { name: 'keyword.declaration.stable.scala' diff --git a/tests/snap/scala_spec.test.scala.snap b/tests/snap/scala_spec.test.scala.snap index 3897eb5..0de06aa 100644 --- a/tests/snap/scala_spec.test.scala.snap +++ b/tests/snap/scala_spec.test.scala.snap @@ -949,7 +949,7 @@ #^^ source.scala # ^^^ source.scala keyword.declaration.stable.scala # ^ source.scala -# ^^^^ source.scala variable.other.declaration.scala +# ^^^^ source.scala entity.name.class # ^ source.scala meta.bracket.scala # ^ source.scala # ^ source.scala meta.bracket.scala diff --git a/tests/unit/#51.test.scala b/tests/unit/#51.test.scala index 14f4a27..32c5915 100644 --- a/tests/unit/#51.test.scala +++ b/tests/unit/#51.test.scala @@ -3,9 +3,47 @@ object Enum extends Enumeration { val Foo, Bar, Baz = Value // ^^^ keyword.declaration.stable.scala -// ^^^ variable.other.declaration.scala -// ^^^ variable.other.declaration.scala -// ^^^ variable.other.declaration.scala +// ^^^ - variable.other.declaration.scala +// ^^^ - variable.other.declaration.scala +// ^^^ - variable.other.declaration.scala // ^^^^^ entity.name.class + val foo, bar, baz = Value +// ^^^ keyword.declaration.stable.scala +// ^^^ - variable.other.declaration.scala +// ^^^ - variable.other.declaration.scala +// ^^^ - variable.other.declaration.scala +// ^^^^^ entity.name.class + + val (foo +// ^^^ keyword.declaration.stable.scala +// ^^^ - variable.other.declaration.scala + + val `foo`, +// ^^^ keyword.declaration.stable.scala +// ^^^^^ - variable.other.declaration.scala + + var Foo, +// ^^^ keyword.declaration.volatile.scala +// ^^^ - variable.other.declaration.scala + + var foo, +// ^^^ keyword.declaration.volatile.scala +// ^^^ - variable.other.declaration.scala + + var `foo`, +// ^^^ keyword.declaration.volatile.scala +// ^^^^^ - variable.other.declaration.scala + + var (foo +// ^^^ keyword.declaration.volatile.scala +// ^^^ - variable.other.declaration.scala + + val Some(x) = +// ^^^ keyword.declaration.stable.scala +// ^^^^ - variable.other.declaration.scala + + val some(x) = +// ^^^ keyword.declaration.stable.scala +// ^^^^ - variable.other.declaration.scala }