diff --git a/src/typescript/Scala.tmLanguage.ts b/src/typescript/Scala.tmLanguage.ts index 80870a0..08b22b1 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,32 @@ 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' + }, + } + } + ] + }, 'parameter-list': { patterns: [ { 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 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