Skip to content

Commit

Permalink
enh(scala) add Scala 3 extension soft keyword
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolasstucki committed Sep 6, 2021
1 parent 3cc0800 commit bb1fa64
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 0 deletions.
1 change: 1 addition & 0 deletions CHANGES.md
Expand Up @@ -16,6 +16,7 @@ Grammars:
- enh(css/less/stylus/scss) add support for CSS Grid properties [monochromer][]
- enh(java) add support for Java Text Block (#3322) [Teletha][]
- enh(scala) add missing `do` and `then` keyword (#3323) [Nicolas Stucki][]
- enh(scala) add Scala 3 `extension` soft keyword (#3326) [Nicolas Stucki][]

[Austin Schick]: https://github.com/austin-schick
[Josh Goebel]: https://github.com/joshgoebel
Expand Down
6 changes: 6 additions & 0 deletions src/languages/scala.js
Expand Up @@ -117,6 +117,11 @@ export default function(hljs) {
contains: [ NAME ]
};

const EXTENSION = {
className: 'keyword',
begin: /(?<=^\s*)extension(?=\s+[\[\(])/
};

return {
name: 'Scala',
keywords: {
Expand All @@ -132,6 +137,7 @@ export default function(hljs) {
METHOD,
CLASS,
hljs.C_NUMBER_MODE,
EXTENSION,
ANNOTATION
]
};
Expand Down
19 changes: 19 additions & 0 deletions test/markup/scala/extension.expect.txt
@@ -0,0 +1,19 @@
<span class="hljs-keyword">extension</span> (x: <span class="hljs-type">Int</span>) <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">plus</span></span>(y: <span class="hljs-type">Int</span>) = x + y

<span class="hljs-keyword">extension</span> [<span class="hljs-type">T</span>](x: <span class="hljs-type">T</span>) <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">f</span> </span>= ()

<span class="hljs-keyword">extension</span> (x: <span class="hljs-type">Int</span>)
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">f</span> </span>= <span class="hljs-number">1</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">f</span> </span>= <span class="hljs-number">2</span>

<span class="hljs-class"><span class="hljs-keyword">object</span> <span class="hljs-title">Foo</span> </span>{
<span class="hljs-keyword">extension</span> (x: <span class="hljs-type">Int</span>)
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">f</span> </span>= <span class="hljs-number">1</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">f</span> </span>= <span class="hljs-number">2</span>
}

<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">extension</span></span>(file: <span class="hljs-type">File</span>) =
file.extension

file
.extension
19 changes: 19 additions & 0 deletions test/markup/scala/extension.txt
@@ -0,0 +1,19 @@
extension (x: Int) def plus(y: Int) = x + y

extension [T](x: T) def f = ()

extension (x: Int)
def f = 1
def f = 2

object Foo {
extension (x: Int)
def f = 1
def f = 2
}

def extension(file: File) =
file.extension

file
.extension

0 comments on commit bb1fa64

Please sign in to comment.