Skip to content

File tree

4 files changed

+45
-0
lines changed

4 files changed

+45
-0
lines changed

CHANGES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ Grammars:
1616
- enh(css/less/stylus/scss) add support for CSS Grid properties [monochromer][]
1717
- enh(java) add support for Java Text Block (#3322) [Teletha][]
1818
- enh(scala) add missing `do` and `then` keyword (#3323) [Nicolas Stucki][]
19+
- enh(scala) add Scala 3 `extension` soft keyword (#3326) [Nicolas Stucki][]
1920

2021
[Austin Schick]: https://github.com/austin-schick
2122
[Josh Goebel]: https://github.com/joshgoebel

src/languages/scala.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,11 @@ export default function(hljs) {
117117
contains: [ NAME ]
118118
};
119119

120+
const EXTENSION = {
121+
className: 'keyword',
122+
begin: /(?<=^\s*)extension(?=\s+[\[\(])/
123+
};
124+
120125
return {
121126
name: 'Scala',
122127
keywords: {
@@ -132,6 +137,7 @@ export default function(hljs) {
132137
METHOD,
133138
CLASS,
134139
hljs.C_NUMBER_MODE,
140+
EXTENSION,
135141
ANNOTATION
136142
]
137143
};
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<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
2+
3+
<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>= ()
4+
5+
<span class="hljs-keyword">extension</span> (x: <span class="hljs-type">Int</span>)
6+
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">f</span> </span>= <span class="hljs-number">1</span>
7+
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">f</span> </span>= <span class="hljs-number">2</span>
8+
9+
<span class="hljs-class"><span class="hljs-keyword">object</span> <span class="hljs-title">Foo</span> </span>{
10+
<span class="hljs-keyword">extension</span> (x: <span class="hljs-type">Int</span>)
11+
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">f</span> </span>= <span class="hljs-number">1</span>
12+
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">f</span> </span>= <span class="hljs-number">2</span>
13+
}
14+
15+
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">extension</span></span>(file: <span class="hljs-type">File</span>) =
16+
file.extension
17+
18+
file
19+
.extension

test/markup/scala/extension.txt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
extension (x: Int) def plus(y: Int) = x + y
2+
3+
extension [T](x: T) def f = ()
4+
5+
extension (x: Int)
6+
def f = 1
7+
def f = 2
8+
9+
object Foo {
10+
extension (x: Int)
11+
def f = 1
12+
def f = 2
13+
}
14+
15+
def extension(file: File) =
16+
file.extension
17+
18+
file
19+
.extension

0 commit comments

Comments
 (0)