Skip to content

Commit d946930

Browse files
committed
fix(language-server): corrent handling of multi-word terms with unicode characters (fixes #90)
1 parent 55ea07b commit d946930

File tree

4 files changed

+75
-53
lines changed

4 files changed

+75
-53
lines changed

src/core/Contextive.Core/CandidateTerms.fs

+3-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ let private (|Regex|_|) pattern input =
2424
| _ -> res |> Some
2525

2626
let private Default: CandidateTerms = Seq.empty<CandidateTerm>
27-
let private TokenSplitterRegex = "([A-Z]+(?![a-z])|[A-Z][a-z]+|[0-9]+|[a-z]+)"
27+
28+
let private TokenSplitterRegex =
29+
"([A-Z\\p{Lu}]+(?![a-z\\p{Ll}])|[A-Z\\p{Lu}][a-z\\p{Ll}]+|[0-9]+|[a-z\\p{Ll}]+)"
2830

2931
let candidateTermsFromToken =
3032
function

src/language-server/Contextive.LanguageServer.Tests/E2e/CompletionTests.fs

+64-52
Original file line numberDiff line numberDiff line change
@@ -130,58 +130,70 @@ let tests =
130130

131131
test <@ (completionLabels, expectedCompletionLabels) ||> Seq.compareWith compare = 0 @>
132132

133-
[ ("Multi Word",
134-
Some "",
135-
seq {
136-
"multiWord"
137-
"MultiWord"
138-
"multi_word"
139-
"multi-word"
140-
})
141-
("Multi Word",
142-
Some "m",
143-
seq {
144-
"multiWord"
145-
"multi_word"
146-
})
147-
("Multi Word",
148-
Some "M",
149-
seq {
150-
"MultiWord"
151-
"MULTI_WORD"
152-
})
153-
("Multi Word",
154-
Some "MU",
155-
seq {
156-
"MULTIWORD"
157-
"MULTI_WORD"
158-
})
159-
("multi word",
160-
Some "",
161-
seq {
162-
"multiWord"
163-
"MultiWord"
164-
"multi_word"
165-
"multi-word"
166-
})
167-
("multi word",
168-
Some "m",
169-
seq {
170-
"multiWord"
171-
"multi_word"
172-
})
173-
("multi word",
174-
Some "M",
175-
seq {
176-
"MultiWord"
177-
"MULTI_WORD"
178-
})
179-
("multi word",
180-
Some "MU",
181-
seq {
182-
"MULTIWORD"
183-
"MULTI_WORD"
184-
}) ]
133+
[ "Multi Word",
134+
Some "",
135+
seq {
136+
"multiWord"
137+
"MultiWord"
138+
"multi_word"
139+
"multi-word"
140+
}
141+
"Multi Word",
142+
Some "m",
143+
seq {
144+
"multiWord"
145+
"multi_word"
146+
}
147+
"Multi Word",
148+
Some "M",
149+
seq {
150+
"MultiWord"
151+
"MULTI_WORD"
152+
}
153+
"Multi Word",
154+
Some "MU",
155+
seq {
156+
"MULTIWORD"
157+
"MULTI_WORD"
158+
}
159+
"multi word",
160+
Some "",
161+
seq {
162+
"multiWord"
163+
"MultiWord"
164+
"multi_word"
165+
"multi-word"
166+
}
167+
"multi word",
168+
Some "m",
169+
seq {
170+
"multiWord"
171+
"multi_word"
172+
}
173+
"multi word",
174+
Some "M",
175+
seq {
176+
"MultiWord"
177+
"MULTI_WORD"
178+
}
179+
"multi word",
180+
Some "MU",
181+
seq {
182+
"MULTIWORD"
183+
"MULTI_WORD"
184+
}
185+
"Один Два",
186+
Some "О",
187+
seq {
188+
"ОдинДва"
189+
"ОДИН_ДВА"
190+
}
191+
"Один Два",
192+
Some "о",
193+
seq {
194+
"одинДва"
195+
"один_два"
196+
} ]
185197
|> List.map multiWordCompletion
186198
|> testList "Multi Word Completion"
187199

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
РУС_ENG
2+
один_два
3+
eng_рус
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
contexts:
2+
- terms:
3+
- name: Один Два
4+
- name: Рус Eng
5+
- name: Eng Рус

0 commit comments

Comments
 (0)