Skip to content

Commit 14adf4e

Browse files
Fix keyword autocomplete
1 parent 76abbb1 commit 14adf4e

File tree

1 file changed

+39
-5
lines changed

1 file changed

+39
-5
lines changed

src/Components/Autocomplete.fs

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,28 @@ open DTO
1111
open Ionide.VSCode.Helpers
1212

1313
module Autocomplete =
14+
15+
[<Literal>]
16+
let getWordAtPositionJS =
17+
"""
18+
function getWordAt(str, pos) {
19+
str = String(str);
20+
pos = Number(pos) >>> 0;
21+
22+
var left = str.slice(0, pos + 1).search(/\S+$/),
23+
right = str.slice(pos).search(/\s/);
24+
25+
if (right < 0) {
26+
return str.slice(left);
27+
}
28+
return str.slice(left, right + pos);
29+
}
30+
getWordAt($0, $1)
31+
"""
32+
33+
[<Emit(getWordAtPositionJS)>]
34+
let getWordAtPosition(str, post) : string = failwith "JS"
35+
1436
let private createProvider () =
1537
let provider = createEmpty<CompletionItemProvider>
1638

@@ -31,17 +53,29 @@ module Autocomplete =
3153
let mapCompletion (doc : TextDocument) (pos : Position) (o : CompletionResult) =
3254
if o |> unbox <> null then
3355
o.Data |> Array.choose (fun c ->
34-
let range = doc.getWordRangeAtPosition pos
35-
let word = doc.getText range
36-
if word.Contains "." && c.GlyphChar = "K" then
37-
None
56+
let lineStr = doc.getText(Range(pos.line, 0., pos.line, 1000. ))
57+
let word = getWordAtPosition(lineStr, pos.character)
58+
Browser.console.log word
59+
if word <> "" then
60+
61+
if word.Contains "." && c.GlyphChar = "K" then
62+
None
63+
else
64+
let range = doc.getWordRangeAtPosition pos
65+
let length = if JS.isDefined range then range.``end``.character - range.start.character else 0.
66+
let result = createEmpty<CompletionItem>
67+
result.kind <- c.GlyphChar |> convertToKind |> unbox
68+
result.label <- c.Name
69+
result.insertText <- c.ReplacementText
70+
Some result
3871
else
39-
let length = if JS.isDefined range then range.``end``.character - range.start.character else 0.
72+
let length = 0.
4073
let result = createEmpty<CompletionItem>
4174
result.kind <- c.GlyphChar |> convertToKind |> unbox
4275
result.label <- c.Name
4376
result.insertText <- c.ReplacementText
4477
Some result)
78+
4579
|> ResizeArray
4680
else
4781
ResizeArray ()

0 commit comments

Comments
 (0)