Skip to content

Commit e993df1

Browse files
Merge pull request #156 from duckmatt/master
FSharpLint integration improvements
2 parents 9034b1d + 505dadd commit e993df1

File tree

1 file changed

+17
-15
lines changed

1 file changed

+17
-15
lines changed

src/Components/Linter.fs

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ open Fable.Import.Node
1010
open DTO
1111
open Ionide.VSCode.Helpers
1212

13-
1413
module Linter =
1514

1615
[<Emit("setTimeout($0,$1)")>]
@@ -21,15 +20,21 @@ module Linter =
2120

2221
let mutable private currentDiagnostic = languages.createDiagnosticCollection ()
2322

23+
let private isLinterEnabled () = workspace.getConfiguration().get("FSharp.linter", true)
24+
25+
let private diagnosticFromLintWarning file (warning : Lint) =
26+
let range = Range(float warning.Range.StartLine - 1.,
27+
float warning.Range.StartColumn - 1.,
28+
float warning.Range.EndLine - 1.,
29+
float warning.Range.EndColumn - 1.)
30+
let loc = Location (Uri.file file, range |> Case1)
31+
Diagnostic(range, "Lint: " + warning.Info, DiagnosticSeverity.Information), file
32+
2433
let private mapResult file (ev : LintResult) =
25-
let setting = workspace.getConfiguration().get("FSharp.linter", true)
2634
let res =
27-
if ev |> unbox <> null && setting then
35+
if (unbox >> isNull >> not) ev then
2836
ev.Data
29-
|> Seq.map (fun d ->
30-
let range = Range(float d.Range.StartLine - 1., float d.Range.StartColumn - 1., float d.Range.EndLine - 1., float d.Range.EndColumn - 1.)
31-
let loc = Location (Uri.file file, range |> Case1)
32-
Diagnostic(range, d.Info, DiagnosticSeverity.Information), file)
37+
|> Seq.map (diagnosticFromLintWarning file)
3338
|> ResizeArray
3439
else
3540
ResizeArray ()
@@ -38,21 +43,18 @@ module Linter =
3843

3944
let private parse path =
4045
LanguageService.lint path
41-
|> Promise.map (fun (ev : LintResult) -> (Uri.file path, mapResult path ev |> Seq.map fst |> ResizeArray) |> currentDiagnostic.set )
46+
|> Promise.onSuccess (fun (ev : LintResult) -> (Uri.file path, mapResult path ev |> Seq.map fst |> ResizeArray) |> currentDiagnostic.set)
4247

4348
let mutable private timer = None
4449

4550
let private handler (event : TextDocumentChangeEvent) =
4651
timer |> Option.iter(clearTimeout)
47-
timer <- Some (setTimeout((fun _ ->
48-
if event.document.languageId = "fsharp" then
49-
parse event.document.fileName |> ignore), 500.) )
50-
52+
if event.document.languageId = "fsharp" && isLinterEnabled () then
53+
timer <- Some (setTimeout((fun _ -> parse event.document.fileName |> ignore), 500.))
5154

5255
let private handlerOpen (event : TextEditor) =
53-
if JS.isDefined event then
54-
if event.document.languageId = "fsharp" then
55-
parse event.document.fileName |> ignore
56+
if JS.isDefined event && event.document.languageId = "fsharp" && isLinterEnabled () then
57+
parse event.document.fileName |> ignore
5658

5759
let activate (disposables: Disposable[]) =
5860
workspace.onDidChangeTextDocument $ (handler,(), disposables) |> ignore

0 commit comments

Comments
 (0)