diagnostics for simple infoview
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user