From 06907075c55d274aa114f1e30094e91c7ee3ad34 Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Fri, 26 Jun 2020 14:49:44 +0200 Subject: [PATCH 1/2] Support `extension` clause --- src/typescript/Scala.tmLanguage.ts | 16 ++++++++++++++++ tests/unit/extension.test.scala | 19 +++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 tests/unit/extension.test.scala diff --git a/src/typescript/Scala.tmLanguage.ts b/src/typescript/Scala.tmLanguage.ts index 80870a0..69a8bc9 100644 --- a/src/typescript/Scala.tmLanguage.ts +++ b/src/typescript/Scala.tmLanguage.ts @@ -150,6 +150,9 @@ export const scalaTmLanguage: TmLanguage = { { include: '#inheritance' }, + { + include: '#extension' + }, { include: '#imports' }, @@ -859,6 +862,19 @@ export const scalaTmLanguage: TmLanguage = { } ] }, + extension: { + patterns: [ + { + match: `(extension)\\s+(?=[\\[\\(])`, + captures: { + '1': { + name: 'keyword.declaration.scala' + }, + + } + } + ] + }, 'parameter-list': { patterns: [ { diff --git a/tests/unit/extension.test.scala b/tests/unit/extension.test.scala new file mode 100644 index 0000000..27685c8 --- /dev/null +++ b/tests/unit/extension.test.scala @@ -0,0 +1,19 @@ +// SYNTAX TEST "source.scala" + + extension (x: T) def combine (y: T): T +// ^^^^^^^^^ keyword.declaration.scala +// ^ variable.parameter.scala +// ^ meta.colon.scala +// ^ entity.name.class +// ^^^ keyword.declaration.scala +// ^^^^^^^ entity.name.function.declaration + + + extension [T](x: T) def combine (y: T): T +// ^^^^^^^^^ keyword.declaration.scala +// ^ entity.name.class +// ^ variable.parameter.scala +// ^ meta.colon.scala +// ^ entity.name.class +// ^^^ keyword.declaration.scala +// ^^^^^^^ entity.name.function.declaration From 2d32992549f191b0e4cf0a6f5efa5f831021c3d1 Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Fri, 26 Jun 2020 14:49:44 +0200 Subject: [PATCH 2/2] Support `extension on` ``` extension on ... extension on ... extension { ... extension { ... ``` --- src/typescript/Scala.tmLanguage.ts | 15 ++++++++++++++- tests/unit/extension-on.test.scala | 23 +++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 tests/unit/extension-on.test.scala diff --git a/src/typescript/Scala.tmLanguage.ts b/src/typescript/Scala.tmLanguage.ts index 69a8bc9..08b22b1 100644 --- a/src/typescript/Scala.tmLanguage.ts +++ b/src/typescript/Scala.tmLanguage.ts @@ -864,13 +864,26 @@ export const scalaTmLanguage: TmLanguage = { }, extension: { patterns: [ + { + match: `(extension)\\s+(?:(${plainid})\\s)?\\s*(on|(?=\\{))`, + captures: { + '1': { + name: 'keyword.declaration.scala' + }, + '2': { + name: 'entity.name.class' + }, + '3': { + name: 'keyword.declaration.scala' + } + } + }, { match: `(extension)\\s+(?=[\\[\\(])`, captures: { '1': { name: 'keyword.declaration.scala' }, - } } ] diff --git a/tests/unit/extension-on.test.scala b/tests/unit/extension-on.test.scala new file mode 100644 index 0000000..ef1dfa9 --- /dev/null +++ b/tests/unit/extension-on.test.scala @@ -0,0 +1,23 @@ +// SYNTAX TEST "source.scala" + + extension on (x: Rational): +// ^^^^^^^^^ keyword.declaration.scala +// ^^ keyword.declaration.scala +// ^ variable.parameter.scala +// ^^^^^^^^ entity.name.class + def > (y: Rational): Boolean = y < x + + extension Ops on (x: Rational): +// ^^^^^^^^^ keyword.declaration.scala +// ^^^ entity.name.class +// ^^ keyword.declaration.scala +// ^ variable.parameter.scala +// ^^^^^^^^ entity.name.class + def > (y: Rational): Boolean = y < x + + extension stringOps { } +// ^^^^^^^^^ keyword.declaration.scala +// ^^^^^^^^^ entity.name.class + + extension { } +// ^^^^^^^^^ keyword.declaration.scala