@@ -11,6 +11,28 @@ open DTO
1111open Ionide.VSCode .Helpers
1212
1313module 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