diff --git a/src/typescript/Scala.tmLanguage.ts b/src/typescript/Scala.tmLanguage.ts index 80870a0..816d4b1 100644 --- a/src/typescript/Scala.tmLanguage.ts +++ b/src/typescript/Scala.tmLanguage.ts @@ -111,6 +111,67 @@ export const scalaTmLanguage: TmLanguage = { ], name: 'meta.import.scala' }, + exports: { + end: '(?<=[\\n;])', + begin: '\\b(export)\\s+(given\\s+)?', + beginCaptures: { + '1': { + name: 'keyword.other.export.scala' + }, + '2': { + name: 'keyword.other.given.scala' + } + }, + patterns: [ + { + include: '#comments' + }, + { + match: `(${backQuotedId}|${plainid})`, + name: 'entity.name.export.scala' + }, + { + match: '\\.', + name: 'punctuation.definition.export' + }, + { + end: '}', + begin: '{', + beginCaptures: { + '0': { + name: 'meta.bracket.scala' + } + }, + patterns: [ + { + match: `(?x)\\s*(${backQuotedId}|${plainid})\\s*(=>)\\s*(${backQuotedId}|${plainid})\\s*`, + captures: { + '1': { + name: 'entity.name.export.renamed-from.scala' + }, + '2': { + name: 'keyword.other.arrow.scala' + }, + '3': { + name: 'entity.name.export.renamed-to.scala' + } + } + }, + { + match: '([^\\s.,}]+)', + name: 'entity.name.export.scala' + } + ], + endCaptures: { + '0': { + name: 'meta.bracket.scala' + } + }, + name: 'meta.export.selector.scala' + } + ], + name: 'meta.export.scala' + }, constants: { patterns: [ { @@ -153,6 +214,9 @@ export const scalaTmLanguage: TmLanguage = { { include: '#imports' }, + { + include: '#exports' + }, { include: '#comments' }, diff --git a/tests/unit/exports.test.scala b/tests/unit/exports.test.scala new file mode 100644 index 0000000..6c391b1 --- /dev/null +++ b/tests/unit/exports.test.scala @@ -0,0 +1,89 @@ +// SYNTAX TEST "source.scala" + + export +// ^^^^^^ meta.export.scala keyword.other.export.scala + + + export a.x +// ^^^^^^ meta.export.scala keyword.other.export.scala +// ^ meta.export.scala +// ^ meta.export.scala entity.name.export.scala +// ^ meta.export.scala punctuation.definition.export +// ^ meta.export.scala entity.name.export.scala + + export a._ +// ^^^^^^ meta.export.scala keyword.other.export.scala +// ^ meta.export.scala +// ^ meta.export.scala entity.name.export.scala +// ^ meta.export.scala punctuation.definition.export +// ^ meta.export.scala entity.name.export.scala + + export a.{x, y} +// ^^^^^^ meta.export.scala keyword.other.export.scala +// ^ meta.export.scala +// ^ meta.export.scala entity.name.export.scala +// ^ meta.export.scala punctuation.definition.export +// ^ meta.export.scala meta.export.selector.scala meta.bracket.scala +// ^ meta.export.scala entity.name.export.scala +// ^^ meta.export.scala meta.export.selector.scala +// ^ meta.export.scala meta.export.selector.scala entity.name.export.scala +// ^ meta.export.scala meta.export.selector.scala meta.bracket.scala + + export a.{x => y} +// ^^^^^^ meta.export.scala keyword.other.export.scala +// ^ meta.export.scala +// ^ meta.export.scala entity.name.export.scala +// ^ meta.export.scala punctuation.definition.export +// ^ meta.export.scala meta.export.selector.scala meta.bracket.scala +// ^ meta.export.scala meta.export.selector.scala entity.name.export.renamed-from.scala +// ^ meta.export.scala meta.export.selector.scala +// ^^ meta.export.scala meta.export.selector.scala +// ^ meta.export.scala meta.export.selector.scala +// ^ meta.export.scala meta.export.selector.scala entity.name.export.renamed-to.scala +// ^ meta.export.scala meta.export.selector.scala meta.bracket.scala + + export given +// ^^^^^^ meta.export.scala keyword.other.export.scala +// ^^^^^ meta.export.scala + + export given a.x +// ^^^^^^ meta.export.scala keyword.other.export.scala +// ^^^^ meta.export.scala +// ^ meta.export.scala +// ^ meta.export.scala entity.name.export.scala +// ^ meta.export.scala punctuation.definition.export +// ^ meta.export.scala entity.name.export.scala + + export given a._ +// ^^^^^^ meta.export.scala keyword.other.export.scala +// ^^^^^ meta.export.scala +// ^ meta.export.scala +// ^ meta.export.scala entity.name.export.scala +// ^ meta.export.scala punctuation.definition.export +// ^ meta.export.scala entity.name.export.scala + + export given a.{x, y} +// ^^^^^^ meta.export.scala keyword.other.export.scala +// ^^^^^ meta.export.scala +// ^ meta.export.scala +// ^ meta.export.scala entity.name.export.scala +// ^ meta.export.scala punctuation.definition.export +// ^ meta.export.scala meta.export.selector.scala meta.bracket.scala +// ^ meta.export.scala entity.name.export.scala +// ^^ meta.export.scala meta.export.selector.scala +// ^ meta.export.scala meta.export.selector.scala entity.name.export.scala +// ^ meta.export.scala meta.export.selector.scala meta.bracket.scala + + export given a.{x => y} +// ^^^^^^ meta.export.scala keyword.other.export.scala +// ^^^^^ meta.export.scala +// ^ meta.export.scala +// ^ meta.export.scala entity.name.export.scala +// ^ meta.export.scala punctuation.definition.export +// ^ meta.export.scala meta.export.selector.scala meta.bracket.scala +// ^ meta.export.scala meta.export.selector.scala entity.name.export.renamed-from.scala +// ^ meta.export.scala meta.export.selector.scala +// ^^ meta.export.scala meta.export.selector.scala +// ^ meta.export.scala meta.export.selector.scala +// ^ meta.export.scala meta.export.selector.scala entity.name.export.renamed-to.scala +// ^ meta.export.scala meta.export.selector.scala meta.bracket.scala