Skip to content

Commit f92d65a

Browse files
authored
Merge pull request #275 from Jentsch/fix-operators
Stop splitting common operators
2 parents f450a3d + d868753 commit f92d65a

9 files changed

+175
-128
lines changed

Diff for: package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
"build": "npm-run-all build:syntax build:extension",
6161
"build:syntax": "ts-node src/typescript/GenerateTmLanguageFile.ts > ./syntaxes/Scala.tmLanguage.json",
6262
"build:extension": "vsce package --yarn",
63-
"test": "npm-run-all test:*",
63+
"test": "npm-run-all -c test:*",
6464
"test:unit": "vscode-tmgrammar-test -s source.scala -g syntaxes/Scala.tmLanguage.json -t 'tests/unit/**/*.test.scala'",
6565
"test:snap": "vscode-tmgrammar-snap -s source.scala -g syntaxes/Scala.tmLanguage.json -t 'tests/snap/**/*.test.scala'",
6666
"update:snapshots": "vscode-tmgrammar-snap --updateSnapshot -s source.scala -g syntaxes/Scala.tmLanguage.json -t 'tests/snap/**/*.test.scala'"

Diff for: src/typescript/Scala.tmLanguage.ts

+47-14
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ const letterChars = `${upperLetterChars}${lowerLetterChars}`
99
const letter = `[${letterChars}]`
1010
const letterOrDigitChars = `${letterChars}0-9`
1111
const letterOrDigit = `[${letterOrDigitChars}]`
12-
const alphaId = `${letter}+`
1312
const letterOrDigitNoDollarSign = letterOrDigit.replace("\\$", "")
1413
const simpleInterpolatedVariable = `${letter}${letterOrDigitNoDollarSign}*` // see SIP-11 https://docs.scala-lang.org/sips/string-interpolation.html
1514
const opchar = `[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]`
@@ -677,21 +676,55 @@ export const scalaTmLanguage: TmLanguage = {
677676
}
678677
}
679678
},
680-
{
681-
match: '(==?|!=|<=|>=|<>|<|>)',
682-
name: 'keyword.operator.comparison.scala'
683-
},
684-
{
685-
match: '(\\-|\\+|\\*|/(?![/*])|%|~)',
686-
name: 'keyword.operator.arithmetic.scala'
679+
{ // Operators with three or more characters
680+
match: `(${opchar}|[\\\\]){3,}`,
681+
name: 'keyword.operator.scala'
687682
},
688-
{
689-
match: `(?<!${opchar}|_)(!|&&|\\|\\|)(?!${opchar})`,
690-
name: 'keyword.operator.logical.scala'
683+
{ // Operators with two characters
684+
match: `((?:${opchar}|[\\\\]){2,}|_\\*)`,
685+
captures: {
686+
'1': {
687+
patterns: [
688+
{
689+
match: '(\\|\\||&&)',
690+
name: 'keyword.operator.logical.scala'
691+
},
692+
{
693+
match: '(\\!=|==|\\<=|>=)',
694+
name: 'keyword.operator.comparison.scala'
695+
},
696+
{
697+
match: '..',
698+
name: 'keyword.operator.scala'
699+
}
700+
]
701+
}
702+
}
691703
},
692-
{
693-
match: '(<-|←|->|→|=>|⇒|\\?|\\:+|@|\\|)+',
694-
name: 'keyword.operator.scala'
704+
{ // Operators with one character
705+
match: `(?<!_)(${opchar}|\\\\)`,
706+
captures: {
707+
'1': {
708+
patterns: [
709+
{
710+
match: '(\\!)',
711+
name: 'keyword.operator.logical.scala'
712+
},
713+
{
714+
match: '(\\*|-|\\+|/|%|~)',
715+
name: 'keyword.operator.arithmetic.scala'
716+
},
717+
{
718+
match: '(=|\\<|>)',
719+
name: 'keyword.operator.comparison.scala'
720+
},
721+
{
722+
match: '.',
723+
name: 'keyword.operator.scala'
724+
}
725+
]
726+
}
727+
}
695728
}
696729
]
697730
},

Diff for: syntaxes/Scala.tmLanguage.json

+1-1
Large diffs are not rendered by default.

Diff for: tests/snap/#191.test.scala

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
a \\\ b
2+
3+
a \+\ b

Diff for: tests/snap/#191.test.scala.snap

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
>a \\\ b
2+
#^^ source.scala
3+
# ^^^ source.scala keyword.operator.scala
4+
# ^^^ source.scala
5+
>
6+
>a \+\ b
7+
#^^ source.scala
8+
# ^^^ source.scala keyword.operator.scala
9+
# ^^^ source.scala
10+
>

Diff for: tests/snap/end.test.scala.snap

+4-8
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,7 @@
9696
# ^ source.scala meta.bracket.scala
9797
> y -= 1
9898
#^^^^^^^^^^^^^^^^^ source.scala
99-
# ^ source.scala keyword.operator.arithmetic.scala
100-
# ^ source.scala keyword.operator.comparison.scala
99+
# ^^ source.scala keyword.operator.scala
101100
# ^ source.scala
102101
# ^ source.scala constant.numeric.scala
103102
> end while
@@ -114,8 +113,7 @@
114113
# ^ source.scala
115114
# ^ source.scala constant.numeric.scala
116115
# ^ source.scala
117-
# ^ source.scala keyword.operator.comparison.scala
118-
# ^ source.scala keyword.operator.comparison.scala
116+
# ^^ source.scala keyword.operator.scala
119117
# ^^^^^^^^ source.scala
120118
# ^ source.scala meta.bracket.scala
121119
# ^ source.scala string.quoted.double.scala punctuation.definition.string.begin.scala
@@ -126,8 +124,7 @@
126124
#^^^^^^^^^^^^^^^^^^ source.scala
127125
# ^^^^ source.scala keyword.control.flow.scala
128126
# ^^^ source.scala
129-
# ^ source.scala keyword.operator.comparison.scala
130-
# ^ source.scala keyword.operator.comparison.scala
127+
# ^^ source.scala keyword.operator.scala
131128
> end match
132129
#^^^^^^^^^^^^^^^^^^^^^^^^ source.scala keyword.control.flow.end.scala
133130
> finally
@@ -237,8 +234,7 @@
237234
# ^ source.scala
238235
# ^ source.scala keyword.operator.comparison.scala
239236
# ^^^^^ source.scala
240-
# ^ source.scala keyword.operator.arithmetic.scala
241-
# ^ source.scala keyword.operator.arithmetic.scala
237+
# ^^ source.scala keyword.operator.scala
242238
# ^^^^^ source.scala
243239
> end extension
244240
#^^^ source.scala

0 commit comments

Comments
 (0)