diagnostics for simple infoview

This commit is contained in:
Alexander Bentkamp
2022-12-14 16:31:48 +01:00
parent 3fd3a12370
commit 60b09c81fe
3 changed files with 48 additions and 18 deletions
@@ -147,4 +147,34 @@ builtin_initialize
(Option PlainGoal)
getGoals
structure Diagnostic where
severity : Option Lean.Lsp.DiagnosticSeverity
message : String
deriving FromJson, ToJson
open RequestM in
def getDiagnostics (params : GetInteractiveDiagnosticsParams) : RequestM (RequestTask (Array Diagnostic)) := do
let doc ← readDoc
let rangeEnd := params.lineRange?.map fun range =>
doc.meta.text.lspPosToUtf8Pos ⟨range.«end», 0⟩
let t := doc.cmdSnaps.waitAll fun snap => rangeEnd.all (snap.beginPos < ·)
pure <| t.map fun (snaps, _) =>
let diags? := snaps.getLast?.map fun snap =>
snap.interactiveDiags.toArray.filterMap fun diag =>
if params.lineRange?.all fun ⟨s, e⟩ =>
-- does [s,e) intersect [diag.fullRange.start.line,diag.fullRange.end.line)?
s ≤ diag.fullRange.start.line ∧ diag.fullRange.start.line < e ∨
diag.fullRange.start.line ≤ s ∧ s < diag.fullRange.end.line
then some {message := diag.message.stripTags, severity := diag.severity?}
else none
pure <| diags?.getD #[]
builtin_initialize
registerBuiltinRpcProcedure
`Game.getDiagnostics
GetInteractiveDiagnosticsParams
(Array Diagnostic)
getDiagnostics
end GameServer