From b3d1825145165e7cbdb04b63bd52f540367765c8 Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Tue, 30 Jun 2020 12:50:04 +0200 Subject: [PATCH 1/2] Fix #107: Identify highlighting of identifier after an `end` --- src/typescript/Scala.tmLanguage.ts | 17 +++++++++++-- tests/unit/#107.test.scala | 39 ++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 tests/unit/#107.test.scala diff --git a/src/typescript/Scala.tmLanguage.ts b/src/typescript/Scala.tmLanguage.ts index c8c1d88..bee7f3a 100644 --- a/src/typescript/Scala.tmLanguage.ts +++ b/src/typescript/Scala.tmLanguage.ts @@ -486,8 +486,21 @@ export const scalaTmLanguage: TmLanguage = { name: 'keyword.control.flow.scala' }, { - match: `^\\s*end(?=\\s+(if|while|for|match|${plainid})\\s*(//.*|/\\*(?!.*\\*/\\s*\\S.*).*)?$)`, - name: 'keyword.control.flow.end.scala' + match: `^\\s*(end)\\s+(?:(if|while|for|match|new)|(${upperLetter}${plainid}?)|(${backQuotedId}|${plainid}))?(?=\\s*(//.*|/\\*(?!.*\\*/\\s*\\S.*).*)?$)`, + captures: { + '1': { + name: 'keyword.control.flow.end.scala' + }, + '2': { + name: 'keyword.control.flow.end.scala' + }, + '3': { + name: 'entity.name.type.declaration' + }, + '4': { + name: 'entity.name.declaration' + } + } }, { match: '\\b(catch|finally|try)\\b', diff --git a/tests/unit/#107.test.scala b/tests/unit/#107.test.scala new file mode 100644 index 0000000..f0e5b06 --- /dev/null +++ b/tests/unit/#107.test.scala @@ -0,0 +1,39 @@ +// SYNTAX TEST "source.scala" + + new Foo: + ... + end new +// ^^^ keyword.control.flow.end.scala +// ^^^ keyword.control.flow.end.scala + + end if +// ^^^ keyword.control.flow.end.scala +// ^^ keyword.control.flow.end.scala + + end while +// ^^^ keyword.control.flow.end.scala +// ^^^^^ keyword.control.flow.end.scala + + end for +// ^^^ keyword.control.flow.end.scala +// ^^^ keyword.control.flow.end.scala + + end match +// ^^^ keyword.control.flow.end.scala +// ^^^^^ keyword.control.flow.end.scala + + class Foo +// ^^^ entity.name.class.declaration + end Foo +// ^^^ keyword.control.flow.end.scala +// ^^^ entity.name.type.declaration + + def foo +// ^^^ entity.name.function.declaration + end bar +// ^^^ keyword.control.flow.end.scala +// ^^^ entity.name.declaration + + end `bar` +// ^^^ keyword.control.flow.end.scala +// ^^^ entity.name.declaration From 269b65831b7b109465002fe3a490af4980e5c1e1 Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Tue, 30 Jun 2020 13:11:55 +0200 Subject: [PATCH 2/2] Improve `end` highlighting for type declarations --- src/typescript/Scala.tmLanguage.ts | 22 +++++++++++++++++----- tests/unit/#107.test.scala | 14 +++++++++----- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/src/typescript/Scala.tmLanguage.ts b/src/typescript/Scala.tmLanguage.ts index bee7f3a..186b9a5 100644 --- a/src/typescript/Scala.tmLanguage.ts +++ b/src/typescript/Scala.tmLanguage.ts @@ -18,7 +18,7 @@ const idUpper = `${upperLetter}${letterOrDigit}*(?:(?<=_)${opchar}+)?` const idLower = `${lowerLetter}${letterOrDigit}*(?:(?<=_)${opchar}+)?` const plainid = `(?:${idrest}|${opchar}+)` const backQuotedId = "`[^`]+`" - +const endOfLineMaybeWithComment = "(?=\\s*(//.*|/\\*(?!.*\\*/\\s*\\S.*).*)?$)" export const scalaTmLanguage: TmLanguage = { fileTypes: [ @@ -486,18 +486,30 @@ export const scalaTmLanguage: TmLanguage = { name: 'keyword.control.flow.scala' }, { - match: `^\\s*(end)\\s+(?:(if|while|for|match|new)|(${upperLetter}${plainid}?)|(${backQuotedId}|${plainid}))?(?=\\s*(//.*|/\\*(?!.*\\*/\\s*\\S.*).*)?$)`, + match: `^\\s*(end)\\s+(if|while|for|match)${endOfLineMaybeWithComment}`, + name: 'keyword.control.flow.end.scala' + }, + { + match: `^\\s*(end)\\s+(?:(new)|(${idUpper}))${endOfLineMaybeWithComment}`, captures: { '1': { - name: 'keyword.control.flow.end.scala' + name: 'keyword.declaration.end.scala' }, '2': { - name: 'keyword.control.flow.end.scala' + name: 'keyword.declaration.end.scala' }, '3': { name: 'entity.name.type.declaration' + } + } + }, + { + match: `^\\s*(end)\\s+(${backQuotedId}|${plainid})?${endOfLineMaybeWithComment}`, + captures: { + '1': { + name: 'keyword.declaration.end.scala' }, - '4': { + '2': { name: 'entity.name.declaration' } } diff --git a/tests/unit/#107.test.scala b/tests/unit/#107.test.scala index f0e5b06..48b86a5 100644 --- a/tests/unit/#107.test.scala +++ b/tests/unit/#107.test.scala @@ -1,10 +1,11 @@ // SYNTAX TEST "source.scala" new Foo: +// ^^^ keyword.declaration.scala ... end new -// ^^^ keyword.control.flow.end.scala -// ^^^ keyword.control.flow.end.scala +// ^^^ keyword.declaration.end.scala +// ^^^ keyword.declaration.end.scala end if // ^^^ keyword.control.flow.end.scala @@ -25,15 +26,18 @@ class Foo // ^^^ entity.name.class.declaration end Foo -// ^^^ keyword.control.flow.end.scala +// ^^^ keyword.declaration.end.scala // ^^^ entity.name.type.declaration def foo // ^^^ entity.name.function.declaration end bar -// ^^^ keyword.control.flow.end.scala +// ^^^ keyword.declaration.end.scala // ^^^ entity.name.declaration end `bar` -// ^^^ keyword.control.flow.end.scala +// ^^^ keyword.declaration.end.scala // ^^^ entity.name.declaration + + end +// ^^^ keyword.declaration.end.scala \ No newline at end of file