Skip to content

Commit 7b09569

Browse files
Parse files on startup
1 parent 8124bc2 commit 7b09569

File tree

5 files changed

+55
-27
lines changed

5 files changed

+55
-27
lines changed

paket.lock

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
NUGET
22
remote: https://www.nuget.org/api/v2
33
specs:
4-
FAKE (4.22.3)
4+
FAKE (4.22.4)
55
FunScript (1.1.94)
66
Microsoft.Bcl (1.1.10) - framework: net10, net11, net20, net30, net35, net40, net40-full
77
Microsoft.Bcl.Build (>= 1.0.14)
@@ -25,13 +25,13 @@ GIT
2525
build: build.cmd
2626
remote: https://github.com/ionide/FsAutoComplete.git
2727
specs:
28-
(8cce3b4fe533892afe376425190ec5f13affd496)
28+
(9c93bdf0ab01de202173482ed0ca2b6b0e98751f)
2929
build: build.cmd LocalRelease
3030
remote: [email protected]:ionide/ionide-fsgrammar.git
3131
specs:
3232
(4d7523d45330bd44ca6db56e5907aa7151e8a514)
3333
GITHUB
3434
remote: fsharp/FAKE
3535
specs:
36-
modules/Octokit/Octokit.fsx (fa8d99c82c05e048e918a405a478b62db2e70c56)
36+
modules/Octokit/Octokit.fsx (3572ef440ce7f087d1bebfc2aebbf0c7599f7a28)
3737
Octokit

src/Components/Linter.fs

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ module Linter =
3434

3535
LanguageService.parse path text
3636
|> Promise.success (fun (ev : ParseResult) -> (Uri.file path, mapResult ev) |> currentDiagnostic.set' )
37-
|> ignore
37+
3838

3939
let parseFile (file : TextDocument) =
4040
if file.languageId = "fsharp" then
@@ -45,15 +45,16 @@ module Linter =
4545
|> LanguageService.project
4646
|> Promise.success (fun _ -> parse path (file.getText ()))
4747
|> ignore
48-
| None -> parse path (file.getText ())
48+
| None -> parse path (file.getText ()) |> ignore
49+
4950

5051
let mutable private timer = None : NodeJS.Timer option
5152

5253
let private handler (event : TextDocumentChangeEvent) =
5354
timer |> Option.iter(Globals.clearTimeout)
5455
timer <- Some (Globals.setTimeout((fun _ ->
5556
if event.document.languageId = "fsharp" then
56-
parse (event.document.fileName) (event.document.getText ())), 500.) )
57+
parse (event.document.fileName) (event.document.getText ()) |> ignore), 500.) )
5758

5859

5960
let private handlerOpen (event : TextEditor) =
@@ -66,5 +67,20 @@ module Linter =
6667
window.Globals.onDidChangeActiveTextEditor
6768
|> EventHandler.add handlerOpen () disposables
6869

69-
let editor = window.Globals.activeTextEditor
70-
if JS.isDefined editor then parseFile editor.document
70+
match window.Globals.visibleTextEditors |> Array.toList with
71+
| [] -> Promise.lift (null |> unbox)
72+
| [x] ->
73+
let path = x.document.fileName
74+
let content = x.document.getText()
75+
parse path content
76+
| x::tail ->
77+
let path = x.document.fileName
78+
let content = x.document.getText()
79+
80+
tail
81+
|> List.fold (fun acc e ->
82+
let path = e.document.fileName
83+
let content = e.document.getText()
84+
acc |> Promise.bind(fun _ -> parse path content) )
85+
(parse path content)
86+
|> ignore

src/Core/Bindings.fs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,9 @@ module Bindings =
3333
type WorkspaceEdit with
3434
[<FunScript.JSEmitInline "(new vscode.WorkspaceEdit())">]
3535
static member Create() : WorkspaceEdit = failwith "JS"
36+
37+
type window.Globals with
38+
39+
[<FunScript.JSEmitInline "(vscode.window.visibleTextEditors)">]
40+
static member visibleTextEditors with get () : TextEditor[] = failwith "JS"
3641

src/Core/Project.fs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@ module Project =
3737
|> List.collect(fun s ->
3838
try
3939
let s = dir + Globals.sep + s
40-
if Globals.statSync(s).isDirectory () then
40+
if s = ".git" || s = "paket-files" then
41+
[]
42+
elif Globals.statSync(s).isDirectory () then
4143
findProjs (s)
4244
else
4345
if s.EndsWith ".fsproj" then [ s ] else []
@@ -49,11 +51,10 @@ module Project =
4951

5052
let activate () =
5153
match findAll () with
52-
| [] -> ()
53-
| [x] -> LanguageService.project x |> ignore
54+
| [] -> Promise.lift (null |> unbox)
55+
| [x] -> LanguageService.project x
5456
| x::tail ->
5557
tail
5658
|> List.fold (fun acc e -> acc |> Promise.bind(fun _ -> LanguageService.project e) )
5759
(LanguageService.project x)
58-
|> ignore
5960

src/fsharp.fs

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,27 +11,33 @@ open FunScript.TypeScript.child_process
1111
open FunScript.TypeScript.vscode
1212

1313
open Ionide.VSCode.FSharp
14+
open Ionide.VSCode.Helpers
1415

1516
type FSharp() =
1617
member x.activate(disposables: Disposable[]) =
17-
LanguageService.start ()
18-
Project.activate ()
1918
let df = createEmpty<DocumentFilter> ()
2019
df.language <- "fsharp"
2120
let df' = [|df|]
22-
Linter.activate disposables
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-
Fsi.activate disposables
32-
QuickInfo.activate disposables
33-
FSharpFormatting.activate disposables
34-
WebPreview.activate disposables
21+
22+
LanguageService.start ()
23+
Project.activate ()
24+
|> Promise.success (fun _ ->
25+
Linter.activate disposables
26+
Tooltip.activate df' disposables
27+
Autocomplete.activate df' disposables
28+
ParameterHints.activate df' disposables
29+
Definition.activate df' disposables
30+
Reference.activate df' disposables
31+
Symbols.activate df' disposables
32+
Highlights.activate df' disposables
33+
Rename.activate df' disposables
34+
Fsi.activate disposables
35+
QuickInfo.activate disposables
36+
FSharpFormatting.activate disposables
37+
WebPreview.activate disposables)
38+
|> ignore
39+
40+
3541
()
3642

3743
member x.deactivate(disposables: Disposable[]) =

0 commit comments

Comments
 (0)