diff --git a/src/typescript/Scala.tmLanguage.ts b/src/typescript/Scala.tmLanguage.ts index ea5338f..012e5be 100644 --- a/src/typescript/Scala.tmLanguage.ts +++ b/src/typescript/Scala.tmLanguage.ts @@ -263,6 +263,9 @@ export const scalaTmLanguage: TmLanguage = { { include: '#singleton-type' }, + { + include: '#inline' + }, { include: '#scala-quoted' }, @@ -571,6 +574,26 @@ export const scalaTmLanguage: TmLanguage = { } } }, + inline: { + patterns: [ + { + match: `\\b(inline)\\b(?=(\\s+(?:${plainid}|${backQuotedId})\\s*:)|(.*(val|def)))`, + captures: { + '1': { + name: 'storage.modifier.other' + } + } + }, + { + match: `\\b(inline)\\b(?=.*(if|match))`, + captures: { + '1': { + name: 'keyword.control.flow.scala' + } + } + } + ] + }, 'scala-quoted': { match: "('\\{|'\\[)(?!')", name: 'constant.other.quoted.scala' @@ -822,7 +845,7 @@ export const scalaTmLanguage: TmLanguage = { name: 'storage.modifier.access' }, { - match: '\\b(synchronized|@volatile|abstract|final|lazy|sealed|implicit|inline |opaque |override|@transient|@native)\\b', + match: '\\b(synchronized|@volatile|abstract|final|lazy|sealed|implicit|opaque |override|@transient|@native)\\b', name: 'storage.modifier.other' } ] diff --git a/tests/unit/#133.test.scala b/tests/unit/#133.test.scala new file mode 100644 index 0000000..d8faca1 --- /dev/null +++ b/tests/unit/#133.test.scala @@ -0,0 +1,41 @@ +// SYNTAX TEST "source.scala" + + + inline val c = 0 +// ^^^^^^ storage.modifier.other + + inline def power(x: Double, inline n: Int): Double = +// ^^^^^^ storage.modifier.other +// ^^^^^^ storage.modifier.other + inline if (n == 0) 1.0 +// ^^^^^^ keyword.control.flow.scala + else inline if (n % 2 == 1) x * power(x, n - 1) +// ^^^^^^ keyword.control.flow.scala + else power(x * x, n / 2) + + + inline x match { +// ^^^^^^ keyword.control.flow.scala +// ^^^^^ keyword.control.flow.scala + + + inline def power(x: Double, inline N: Int): Double = +// ^^^^^^ storage.modifier.other +// ^^^^^^ storage.modifier.other + + inline def power(x: Double, inline `n`: Int): Double = +// ^^^^^^ storage.modifier.other +// ^^^^^^ storage.modifier.other + +val x = inline + 2 +// ^^^^^^ - storage.modifier.other keyword.control.flow.scala +val x = inline(x) +// ^^^^^^ - storage.modifier.other keyword.control.flow.scala +val x = inline[T] +// ^^^^^^ - storage.modifier.other keyword.control.flow.scala + + inline def inline(inline inline: Int): Double = +// ^^^^^^ storage.modifier.other +// ^^^^^^ entity.name.function.declaration +// ^^^^^^ storage.modifier.other +// ^^^^^^ variable.parameter.scala