test: interactive: support inserting text
This commit is contained in:
parent
43fcf69485
commit
2de5b141eb
1 changed files with 35 additions and 10 deletions
|
|
@ -15,24 +15,49 @@ def main (args : List String) : IO Unit := do
|
|||
let _ ← Ipc.collectDiagnostics 1 uri 1
|
||||
let mut lineNo := 0
|
||||
let mut lastActualLineNo := 0
|
||||
let mut versionNo : Nat := 2
|
||||
let mut requestNo : Nat := 2
|
||||
for line in text.splitOn "\n" do
|
||||
match line.splitOn "--^" with
|
||||
| [ws, directive] =>
|
||||
let colon := directive.posOf ':'
|
||||
let method := directive.extract 0 colon |>.trim
|
||||
let params := if colon < directive.bsize then directive.extract (colon + 1) directive.bsize |>.trim else "{}"
|
||||
let Except.ok params ← pure <| Json.parse params
|
||||
| throw <| IO.userError s!"failed to parse {params}"
|
||||
let params := params.setObjVal! "textDocument" (toJson { uri := uri : TextDocumentIdentifier })
|
||||
-- TODO: correctly compute in presence of Unicode
|
||||
let column := ws.bsize + "--".length
|
||||
let params := params.setObjVal! "position" (toJson { line := lastActualLineNo, character := column : Lsp.Position })
|
||||
IO.eprintln params
|
||||
Ipc.writeRequest ⟨requestNo, method, params⟩
|
||||
let resp ← Ipc.readResponseAs requestNo Json
|
||||
IO.eprintln resp.result
|
||||
requestNo := requestNo + 1
|
||||
let pos : Lsp.Position := { line := lastActualLineNo, character := column }
|
||||
let params := if colon < directive.bsize then directive.extract (colon + 1) directive.bsize |>.trim else "{}"
|
||||
match method with
|
||||
| "insert" =>
|
||||
let params : DidChangeTextDocumentParams := {
|
||||
textDocument := {
|
||||
uri := uri
|
||||
version? := versionNo
|
||||
}
|
||||
contentChanges := #[TextDocumentContentChangeEvent.rangeChange {
|
||||
start := pos
|
||||
«end» := { pos with character := pos.character + params.bsize }
|
||||
} params]
|
||||
}
|
||||
let params := toJson params
|
||||
IO.eprintln params
|
||||
Ipc.writeNotification ⟨"textDocument/didChange", params⟩
|
||||
let diags ← Ipc.collectDiagnostics requestNo uri versionNo
|
||||
--for diag in diags do
|
||||
-- IO.eprintln (toJson diag.param)
|
||||
requestNo := requestNo + 1
|
||||
versionNo := versionNo + 1
|
||||
| _ =>
|
||||
let Except.ok params ← pure <| Json.parse params
|
||||
| throw <| IO.userError s!"failed to parse {params}"
|
||||
let params := params.setObjVal! "textDocument" (toJson { uri := uri : TextDocumentIdentifier })
|
||||
-- TODO: correctly compute in presence of Unicode
|
||||
let column := ws.bsize + "--".length
|
||||
let params := params.setObjVal! "position" (toJson pos)
|
||||
IO.eprintln params
|
||||
Ipc.writeRequest ⟨requestNo, method, params⟩
|
||||
let resp ← Ipc.readResponseAs requestNo Json
|
||||
IO.eprintln resp.result
|
||||
requestNo := requestNo + 1
|
||||
| _ =>
|
||||
lastActualLineNo := lineNo
|
||||
lineNo := lineNo + 1
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue