Skip to content

Commit e706a1e

Browse files
authored
broken single quote symbol (#28)
broken single quote symbol
2 parents 17a7bdb + 2d16efe commit e706a1e

File tree

5 files changed

+46
-6
lines changed

5 files changed

+46
-6
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
node_modules
22

33
*.vsix
4+
.metals

src/typescript/Scala.tmLanguage.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ const digit = "[0-9]"
66
const letterOrDigit = `${letter}|${digit}`
77
const alphaId = `${letter}+`
88
const simpleInterpolatedVariable = `${letter}(?:${letterOrDigit})*` // see SIP-11 https://docs.scala-lang.org/sips/string-interpolation.html
9+
const opchar = `[!#%&*+\\-\\/:<>=?@^|~[\\p{Sm}\\p{So}]]`
10+
const idrest = `${letter}(?:${letterOrDigit})*(?:((?<=_))${opchar}+)?`
11+
const plainid = `(?:${idrest}|(?:${opchar})+)`
912

1013
export const scalaTmLanguage: TmLanguage = {
1114
fileTypes: [
@@ -601,7 +604,7 @@ export const scalaTmLanguage: TmLanguage = {
601604
}
602605
},
603606
'scala-symbol': {
604-
match: "'\\w+(?=[^'\\w]|$)",
607+
match: `(?>'${plainid})(?!')`,
605608
name: 'constant.other.symbol.scala'
606609
},
607610
'meta-brackets': {

syntaxes/Scala.tmLanguage.json

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

tests/snap/lexical.test.scala.snap

+3-4
Original file line numberDiff line numberDiff line change
@@ -378,10 +378,9 @@
378378
# ^^ source.scala
379379
# ^^^^^^ source.scala constant.other.symbol.scala
380380
# ^^ source.scala
381-
# ^ source.scala constant.character.literal.scala punctuation.definition.character.begin.scala
382-
# ^^^ source.scala constant.character.literal.scala invalid.illegal.character-literal-too-long
383-
# ^ source.scala constant.character.literal.scala punctuation.definition.character.end.scala
384-
# ^ source.scala keyword.operator.arithmetic.scala
381+
# ^^ source.scala constant.other.symbol.scala
382+
# ^^ source.scala
383+
# ^^ source.scala constant.other.symbol.scala
385384
# ^ source.scala
386385
# ^ source.scala meta.bracket.scala
387386
>}

tests/unit/symbol.test.scala

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// SYNTAX TEST "source.scala"
2+
3+
object Unicode {
4+
5+
val blue = '* //red
6+
// ^ source.scala
7+
// ^^ source.scala constant.other.symbol.scala
8+
// ^ source.scala
9+
val stillRed = '*
10+
// ^^ source.scala constant.other.symbol.scala
11+
val invalidSymbol = '**_x //'
12+
// ^^^ source.scala constant.other.symbol.scala
13+
// ^^^ source.scala
14+
val symbolFollowedByOp = 'symbol*
15+
// ^^^^^^^ source.scala constant.other.symbol.scala
16+
// ^ source.scala keyword.operator.arithmetic.scala
17+
val symbolEndedWithOp = 'symbol_*
18+
// ^^^^^^^^^ source.scala constant.other.symbol.scala
19+
val unclosedSymbol = '1 //'
20+
// ^ source.scala constant.character.literal.scala punctuation.definition.character.begin.scala
21+
// ^^^^ source.scala constant.character.literal.scala invalid.illegal.character-literal-too-long
22+
// ^ source.scala constant.character.literal.scala punctuation.definition.character.end.scala
23+
val symbolWithDigit = 'symbol1 //'
24+
// ^^^^^^^^ source.scala constant.other.symbol.scala
25+
val characterLit = 'x'
26+
// ^ source.scala constant.character.literal.scala punctuation.definition.character.begin.scala
27+
// ^ source.scala constant.character.literal.scala
28+
// ^ source.scala constant.character.literal.scala punctuation.definition.character.end.scala
29+
val greekSymbol = 'ξφδ
30+
// ^^^^ source.scala constant.other.symbol.scala
31+
val greekSymbolDigit = 'φδφ0
32+
// ^^^^^ source.scala constant.other.symbol.scala
33+
val greekSymbolWithOp = 'δφξφξ_+-
34+
// ^^^^^^^^^ source.scala constant.other.symbol.scala
35+
val multiOpSymbol = '***
36+
// ^^^^ constant.other.symbol.scala
37+
}

0 commit comments

Comments
 (0)