Ocaml-lsp 1.8.0
On behalf of the ocaml-lsp team, I’m pleased to announce version 1.8.0. This release contains some quality of life bug fixes, better diagnostics locations, and a few new code actions. Happy hacking.
See full changelog
Features
-
Add a new code action
Add missing rec keyword
, which is available when adding arec
keyword can fixUnbound value ...
error, e.g.,let fact n = if n = 0 then 1 else n * fact (n - 1) (* ^^^^ Unbound value fact *)
Adding
rec
to the definition offact
will fix the problem. The new code action offers addingrec
. -
Use ocamlformat to properly format type snippets. This feature requires the
ocamlformat-rpc
opam package to be installed. (#386) -
Add completion support for polymorphic variants, when it is possible to pin down the precise type. Examples (
<|>
stands for the cursor) when completion will work (#473)Function application:
let foo (a: [`Alpha | `Beta]) = () foo `A<|>
Type explicitly shown:
let a : [`Alpha | `Beta] = `B<|>
Note: this is actually a bug fix, since we were ignoring the backtick when constructing the prefix for completion.
-
Parse merlin errors (best effort) into a more structured form. This allows reporting all locations as "related information" (#475)
-
Add support for Merlin
Construct
command as completion suggestions, i.e., show complex expressions that could complete the typed hole. (#472) -
Add a code action
Construct an expression
that is shown when the cursor is at the end of the typed hole, i.e.,_|
, where|
is the cursor. The code action simply triggers the client (currently only VS Code is supported) to show completion suggestions. (#472) -
Change the formatting-on-save error notification to a warning notification (#472)
-
Code action to qualify ("put module name in identifiers") and unqualify ("remove module name from identifiers") module names in identifiers (#399)
Starting from:
open Unix let times = Unix.times () let f x = x.Unix.tms_stime, x.Unix.tms_utime
Calling "remove module name from identifiers" with the cursor on the open statement will produce:
open Unix let times = times () let f x = x.tms_stime, x.tms_utime
Calling "put module name in identifiers" will restore:
open Unix let times = Unix.times () let f x = x.Unix.tms_stime, x.Unix.tms_utime
Fixes
-
Handle workspace change notifications. Previously, the server would only use the set of workspaces given at startup to search for workspace symbols. After this change, workspace folders that are added later will also be considered. (#498)
-
Do not show "random" documentation on hover
- fixed by merlin#1364
- fixes duplicate:
-
Correctly rename a variable used as a named/optional argument (#478)
-
When reporting an error at the beginning of the file, use the first line not the second (#489)