Skip to content

Commit 1678401

Browse files
committed
Merge branch 'master' of github.com:ionide/ionide-vscode-fsharp
2 parents 494514a + 0ed4830 commit 1678401

File tree

2 files changed

+32
-18
lines changed

2 files changed

+32
-18
lines changed

src/Core/LanguageService.fs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ module LanguageService =
3030
let request<'a, 'b> ep id (obj : 'a) =
3131
if logRequests then Browser.console.log ("[IONIDE-FSAC-REQ]", id, ep, obj)
3232
ax.post (ep, obj)
33+
|> Promise.fail (fun r ->
34+
Browser.console.error ("[IONIDE-FSAC-ERR]", id, ep, r)
35+
null |> unbox
36+
)
3337
|> Promise.success(fun r ->
3438
try
3539
let res = (r.data |> unbox<string[]>).[id] |> JS.JSON.parse |> unbox<'b>
@@ -41,6 +45,7 @@ module LanguageService =
4145
else res
4246
with
4347
| ex ->
48+
Browser.console.error ("[IONIDE-FSAC-ERR]", id, ep, r, ex)
4449
null |> unbox
4550
)
4651

@@ -100,12 +105,21 @@ module LanguageService =
100105
let compilerLocation () =
101106
"" |> request (url "compilerlocation") 0
102107

103-
let start () =
108+
let start (onListeningCallback: unit->unit) =
104109
promise {
105110
let path = (VSCode.getPluginPath "Ionide.Ionide-fsharp") + "/bin/FsAutoComplete.Suave.exe"
106111
let child = if Process.isMono () then child_process.spawn("mono", [| path; string port|] |> ResizeArray) else child_process.spawn(path, [| string port|] |> ResizeArray)
107112
service <- Some child
108113
child.stderr?on $ ("data", fun n -> Browser.console.error (n.ToString())) |> ignore
114+
115+
// Wait until FsAC sends the 'listener started' magic string until
116+
// we inform the caller that it's ready to accept requests.
117+
let x = child.stdout?on $ ("data", fun n ->
118+
let isStartedMessage = (n.ToString().Contains(": listener started in"))
119+
if isStartedMessage then onListeningCallback()
120+
Browser.console.log ("[IONIDE-FSAC-SIG] started message?", isStartedMessage)
121+
()
122+
)
109123
child.stdout?on $ ("data", fun n -> Browser.console.log (n.ToString())) |> ignore
110124
}
111125
|> Promise.fail (fun x ->

src/fsharp.fs

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,28 +9,28 @@ open Fable.Import.vscode
99
open Ionide.VSCode.Helpers
1010
open Ionide.VSCode.FSharp
1111

12+
let internal languageServiceListeningCallback disposables df' =
13+
Linter.activate disposables
14+
|> Promise.bind(fun _ -> Project.activate ())
15+
|> ignore
16+
17+
Tooltip.activate df' disposables
18+
Autocomplete.activate df' disposables
19+
ParameterHints.activate df' disposables
20+
Definition.activate df' disposables
21+
Reference.activate df' disposables
22+
Symbols.activate df' disposables
23+
Highlights.activate df' disposables
24+
Rename.activate df' disposables
25+
WorkspaceSymbols.activate df' disposables
26+
QuickInfo.activate disposables
27+
1228
let activate(disposables: Disposable[]) =
1329
let df = createEmpty<DocumentFilter>
1430
df.language <- Some "fsharp"
1531
let df' : DocumentSelector = df |> U3.Case2
1632

17-
LanguageService.start ()
18-
|> Promise.success (fun t ->
19-
Linter.activate disposables
20-
|> Promise.bind(fun _ -> Project.activate ())
21-
|> ignore
22-
23-
Tooltip.activate df' disposables
24-
Autocomplete.activate df' disposables
25-
ParameterHints.activate df' disposables
26-
Definition.activate df' disposables
27-
Reference.activate df' disposables
28-
Symbols.activate df' disposables
29-
Highlights.activate df' disposables
30-
Rename.activate df' disposables
31-
WorkspaceSymbols.activate df' disposables
32-
QuickInfo.activate disposables
33-
)
33+
LanguageService.start (fun () -> languageServiceListeningCallback disposables df')
3434
|> ignore
3535
Forge.activate disposables
3636
Fsi.activate disposables

0 commit comments

Comments
 (0)