diff options
author | Simon Van Casteren <simon.van.casteren@gmail.com> | 2020-01-08 10:13:39 +0100 |
---|---|---|
committer | Simon Van Casteren <simon.van.casteren@gmail.com> | 2020-01-08 10:13:39 +0100 |
commit | cffbd03336348508dfb8d647a593c24b9bc89878 (patch) | |
tree | cf60b2b48dbcca33d470d26d078499b4eeda8e0d /src/lsp.sml | |
parent | 472f3cf5206a06f0a7eae721f08f0a43276863cf (diff) |
Return only unique diags + better formatting
Diffstat (limited to 'src/lsp.sml')
-rw-r--r-- | src/lsp.sml | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/lsp.sml b/src/lsp.sml index e00bd850..ef12bbac 100644 --- a/src/lsp.sml +++ b/src/lsp.sml @@ -258,16 +258,23 @@ fun elabFile (state: state) (fileName: string): ({ decls: Elab.decl list, envBef end end +fun uniq (comp: 'b -> 'b -> bool) (bs: 'b list) = + case bs of + [] => [] + | (l as b :: bs') => b :: uniq comp (List.filter (comp b) bs') + fun elabFileAndSendDiags (state: state) (toclient: LspSpec.toclient) (documentUri: LspSpec.documentUri): unit = let val fileName = #path documentUri val res = elabFile state fileName + fun eq_diag d1 d2 = #range d1 = #range d2 andalso #message d1 = #message d2 + val diags = uniq eq_diag (#2 res) in (case #1 res of NONE => () | SOME fs => (State.insertElabRes fileName (#envBeforeThisModule fs) (#decls fs)); - #publishDiagnostics toclient { uri = documentUri , diagnostics = #2 res}) + #publishDiagnostics toclient { uri = documentUri , diagnostics = diags}) end fun scanDir (f: string -> bool) (path: string) = |