@@ -10,7 +10,6 @@ open Fable.Import.Node
1010open DTO
1111open Ionide.VSCode .Helpers
1212
13-
1413module 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