This PR significantly improves the test coverage of the language server, providing at least a single basic test for every request that is used by the client. It also implements infrastructure for testing all of these requests, e.g. the ability to run interactive tests in a project context and refactors the interactive test runner to be more maintainable. Finally, it also fixes a small bug with the recently implemented unknown identifier code actions for auto-implicits (#10442) that was discovered in testing, where the "import all unambiguous unknown identifiers" code action didn't work correctly on auto-implicit identifiers.
31 lines
815 B
Text
31 lines
815 B
Text
import Lean
|
|
|
|
open Lean Server Lsp RequestM
|
|
|
|
@[code_action_provider]
|
|
def helloProvider : CodeActionProvider := fun params _snap => do
|
|
let doc ← readDoc
|
|
let vi := doc.versionedIdentifier
|
|
let edit : TextEdit := {
|
|
range := params.range,
|
|
newText := "hello!!!"
|
|
}
|
|
let ca : CodeAction := {
|
|
title := "hello world",
|
|
kind? := "quickfix",
|
|
edit? := WorkspaceEdit.ofTextEdit vi edit
|
|
}
|
|
let longRunner : CodeAction := {
|
|
title := "a long-running action",
|
|
kind? := "refactor",
|
|
}
|
|
let lazyResult : IO CodeAction := do
|
|
return { longRunner with
|
|
edit? := WorkspaceEdit.ofTextEdit vi { range := params.range, newText := "lazy result"}
|
|
}
|
|
return #[ca, {eager := longRunner, lazy? := lazyResult}]
|
|
|
|
theorem asdf : (x : Nat) → x = x := by
|
|
intro x
|
|
--^ codeAction
|
|
rfl
|