Skip to content
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@

## Unreleased

- Add `ocaml.server.codelens.forNestedBindings` setting to control whether
CodeLens should be displayed for nested bindings. Defaults to `false`,
showing CodeLens only for top-level bindings.
- ⚠️ This is a **breaking change** for users who have already used
`ocaml.server.codelens`. The existing `ocaml.server.codelens` setting has
been renamed to `ocaml.server.codelens.enable`. (#1990)

## 1.32.4

- Fix editor focus condition for interface file keybindings. Previously,
Expand Down
7 changes: 6 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -333,11 +333,16 @@
"default": [],
"markdownDescription": "Extra arguments to pass to ocamllsp."
},
"ocaml.server.codelens": {
"ocaml.server.codelens.enable": {
"type": "boolean",
"default": true,
"markdownDescription": "Enable/Disable codelens"
},
"ocaml.server.codelens.forNestedBindings": {
"type": "boolean",
"default": false,
"markdownDescription": "Enable/Disable codelens for nested let bindings"
},
"ocaml.server.extendedHover": {
"type": "boolean",
"default": false,
Expand Down
14 changes: 13 additions & 1 deletion src/extension_instance.ml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ type t =
; sandbox_info : StatusBarItem.t
; ast_editor_state : Ast_editor_state.t
; mutable codelens : bool option
; mutable codelens_for_nested_bindings : bool option
; mutable extended_hover : bool option
; mutable standard_hover : bool option
; mutable dune_diagnostics : bool option
Expand All @@ -26,14 +27,19 @@ let ocaml_version_exn t = Option.value_exn t.ocaml_version

let send_configuration
~codelens
~codelens_for_nested_bindings
~extended_hover
~standard_hover
~dune_diagnostics
~syntax_documentation
client
=
let codelens =
Option.map codelens ~f:(fun enable -> Ocaml_lsp.OcamllspSettingEnable.create ~enable)
Option.map codelens ~f:(fun enable ->
Ocaml_lsp.OcamllspSettingCodeLens.create
?forNestedBindings:codelens_for_nested_bindings
~enable
())
in
let extendedHover =
Option.map extended_hover ~f:(fun enable ->
Expand Down Expand Up @@ -73,13 +79,16 @@ let send_configuration
let set_configuration
t
?codelens
?codelens_for_nested_bindings
?extended_hover
?standard_hover
?dune_diagnostics
?syntax_documentation
()
=
Option.iter codelens ~f:(fun codelens -> t.codelens <- codelens);
Option.iter codelens_for_nested_bindings ~f:(fun codelens_for_nested_bindings ->
t.codelens_for_nested_bindings <- codelens_for_nested_bindings);
Option.iter extended_hover ~f:(fun extended_hover -> t.extended_hover <- extended_hover);
Option.iter standard_hover ~f:(fun standard_hover -> t.standard_hover <- standard_hover);
Option.iter dune_diagnostics ~f:(fun dune_diagnostics ->
Expand All @@ -91,6 +100,7 @@ let set_configuration
| Some (client, (_ : Ocaml_lsp.t)) ->
send_configuration
~codelens:t.codelens
~codelens_for_nested_bindings:t.codelens_for_nested_bindings
~extended_hover:t.extended_hover
~standard_hover:t.standard_hover
~dune_diagnostics:t.dune_diagnostics
Expand Down Expand Up @@ -267,6 +277,7 @@ end = struct
send_configuration
client
~codelens:t.codelens
~codelens_for_nested_bindings:t.codelens_for_nested_bindings
~extended_hover:t.extended_hover
~standard_hover:t.standard_hover
~dune_diagnostics:t.dune_diagnostics
Expand Down Expand Up @@ -359,6 +370,7 @@ let make () =
; ast_editor_state
; documentation_server = None
; codelens = None
; codelens_for_nested_bindings = None
; extended_hover = None
; standard_hover = None
; dune_diagnostics = None
Expand Down
1 change: 1 addition & 0 deletions src/extension_instance.mli
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ val suggest_to_run_dune_pkg_lock : unit -> unit
val set_configuration
: t
-> ?codelens:bool option
-> ?codelens_for_nested_bindings:bool option
-> ?extended_hover:bool option
-> ?standard_hover:bool option
-> ?dune_diagnostics:bool option
Expand Down
14 changes: 12 additions & 2 deletions src/ocaml_lsp.ml
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,29 @@ module OcamllspSettingEnable = struct
val create : enable:bool -> t [@@js.builder]]
end

module OcamllspSettingCodeLens = struct
include Interface.Make ()

include
[%js:
val enable : t -> bool or_undefined [@@js.get]
val forNestedBindings : t -> bool or_undefined [@@js.get]
val create : ?forNestedBindings:bool -> enable:bool -> unit -> t [@@js.builder]]
end

module OcamllspSettings = struct
include Interface.Make ()

include
[%js:
val codelens : t -> OcamllspSettingEnable.t or_undefined [@@js.get]
val codelens : t -> OcamllspSettingCodeLens.t or_undefined [@@js.get]
val extendedHover : t -> OcamllspSettingEnable.t or_undefined [@@js.get]
val standardHover : t -> OcamllspSettingEnable.t or_undefined [@@js.get]
val duneDiagnostics : t -> OcamllspSettingEnable.t or_undefined [@@js.get]
val syntaxDocumentation : t -> OcamllspSettingEnable.t or_undefined [@@js.get]

val create
: ?codelens:OcamllspSettingEnable.t
: ?codelens:OcamllspSettingCodeLens.t
-> ?extendedHover:OcamllspSettingEnable.t
-> ?standardHover:OcamllspSettingEnable.t
-> ?duneDiagnostics:OcamllspSettingEnable.t
Expand Down
12 changes: 10 additions & 2 deletions src/ocaml_lsp.mli
Original file line number Diff line number Diff line change
Expand Up @@ -20,17 +20,25 @@ module OcamllspSettingEnable : sig
val create : enable:bool -> t
end

module OcamllspSettingCodeLens : sig
include Ojs.T

val enable : t -> bool option
val forNestedBindings : t -> bool option
val create : ?forNestedBindings:bool -> enable:bool -> unit -> t
end

module OcamllspSettings : sig
include Ojs.T

val codelens : t -> OcamllspSettingEnable.t option
val codelens : t -> OcamllspSettingCodeLens.t option
val extendedHover : t -> OcamllspSettingEnable.t option
val standardHover : t -> OcamllspSettingEnable.t option
val duneDiagnostics : t -> OcamllspSettingEnable.t option
val syntaxDocumentation : t -> OcamllspSettingEnable.t option

val create
: codelens:OcamllspSettingEnable.t option
: codelens:OcamllspSettingCodeLens.t option
-> extendedHover:OcamllspSettingEnable.t option
-> standardHover:OcamllspSettingEnable.t option
-> duneDiagnostics:OcamllspSettingEnable.t option
Expand Down
10 changes: 9 additions & 1 deletion src/settings.ml
Original file line number Diff line number Diff line change
Expand Up @@ -120,11 +120,19 @@ let server_args_setting =
let server_codelens_setting =
create_setting
~scope:ConfigurationTarget.Workspace
~key:"ocaml.server.codelens"
~key:"ocaml.server.codelens.enable"
~of_json:Jsonoo.Decode.bool
~to_json:Jsonoo.Encode.bool
;;

let server_codelens_for_nested_bindings_setting =
create_setting
~scope:ConfigurationTarget.Workspace
~key:"ocaml.server.codelens"
~of_json:Jsonoo.Decode.(try_optional (field "forNestedBindings" bool))
~to_json:Jsonoo.Encode.(nullable bool)
;;

let server_extendedHover_setting =
create_setting
~scope:ConfigurationTarget.Workspace
Expand Down
1 change: 1 addition & 0 deletions src/settings.mli
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ val substitute_workspace_vars : string -> string
val server_extraEnv : unit -> string Interop.Dict.t option
val server_args_setting : string list setting
val server_codelens_setting : bool setting
val server_codelens_for_nested_bindings_setting : bool option setting
val server_extendedHover_setting : bool setting
val server_duneDiagnostics_setting : bool setting
val server_syntaxDocumentation_setting : bool setting
Expand Down
4 changes: 4 additions & 0 deletions src/vscode_ocaml_platform.ml
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,16 @@ let notify_configuration_changes instance =
Workspace.onDidChangeConfiguration
~listener:(fun _event ->
let codelens = Settings.(get server_codelens_setting) in
let codelens_for_nested_bindings =
Settings.(get server_codelens_for_nested_bindings_setting)
in
let extended_hover = Settings.(get server_extendedHover_setting) in
let dune_diagnostics = Settings.(get server_duneDiagnostics_setting) in
let syntax_documentation = Settings.(get server_syntaxDocumentation_setting) in
Extension_instance.set_configuration
instance
~codelens
?codelens_for_nested_bindings
~extended_hover
~dune_diagnostics
~syntax_documentation
Expand Down