From 89e00d232c6e4d05cf1c18e24317d7f9fb12f379 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ulysse=20G=C3=A9rard?= Date: Mon, 10 Jun 2024 16:14:17 +0200 Subject: [PATCH] [B] Merge pull request #1758 from xvw/tunneling-merlin-lsp-p1-split-protocol Extract commands from new protocol inside a dedicated library --- CHANGES.md | 12 ++++++ src/commands/dune | 14 +++++++ .../new => commands}/new_commands.ml | 29 ++++++++++++++ src/commands/new_commands.mli | 38 +++++++++++++++++++ .../ocamlmerlin => commands}/query_json.ml | 0 src/frontend/ocamlmerlin/dune | 5 ++- src/frontend/ocamlmerlin/new/new_commands.mli | 9 ----- 7 files changed, 96 insertions(+), 11 deletions(-) create mode 100644 src/commands/dune rename src/{frontend/ocamlmerlin/new => commands}/new_commands.ml (94%) create mode 100644 src/commands/new_commands.mli rename src/{frontend/ocamlmerlin => commands}/query_json.ml (100%) delete mode 100644 src/frontend/ocamlmerlin/new/new_commands.mli diff --git a/CHANGES.md b/CHANGES.md index 96b8a73405..260aa1eed5 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,12 @@ +merlin 4.16 +=========== +unreleased + + + merlin binary + - Addition of a `merlin-lib.commands` library which disassociates the + execution of commands from the `new_protocol`, from the binary, allowing + it to be invoked from other projects (#1758) + merlin 4.15 =========== Fri May 31 14:02:42 CEST 2024 @@ -9,6 +18,9 @@ Fri May 31 14:02:42 CEST 2024 - Ignore SIGPIPE in the Merlin server process (#1746) - Fix lexing of quoted strings in comments (#1754, fixes #1753) - Improve cursor position detection in longidents (#1756) + - Addition of a `merlin-lib.commands` library which disassociates the + execution of commands from the `new_protocol`, from the binary, allowing + it to be invoked from other projects (#1758) merlin 4.14 =========== diff --git a/src/commands/dune b/src/commands/dune new file mode 100644 index 0000000000..016727ba05 --- /dev/null +++ b/src/commands/dune @@ -0,0 +1,14 @@ +(library + (name merlin_commands) + (public_name merlin-lib.commands) + (flags + :standard + -open Ocaml_parsing + -open Merlin_utils + -open Merlin_kernel) + (libraries + merlin-lib.ocaml_parsing + merlin-lib.utils + merlin-lib.kernel + merlin-lib.query_protocol + merlin-lib.query_commands)) diff --git a/src/frontend/ocamlmerlin/new/new_commands.ml b/src/commands/new_commands.ml similarity index 94% rename from src/frontend/ocamlmerlin/new/new_commands.ml rename to src/commands/new_commands.ml index a1b753dd7d..81e5ff1bc5 100644 --- a/src/frontend/ocamlmerlin/new/new_commands.ml +++ b/src/commands/new_commands.ml @@ -1,3 +1,32 @@ +(* {{{ COPYING *( + + This file is part of Merlin, an helper for ocaml editors + + Copyright (C) 2013 - 2015 Frédéric Bour + Thomas Refis + Simon Castellan + Tomasz Kołodziejski + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + The Software is provided "as is", without warranty of any kind, express or + implied, including but not limited to the warranties of merchantability, + fitness for a particular purpose and noninfringement. In no event shall + the authors or copyright holders be liable for any claim, damages or other + liability, whether in an action of contract, tort or otherwise, arising + from, out of or in connection with the software or the use or other dealings + in the Software. + +)* }}} *) + open Std type command = diff --git a/src/commands/new_commands.mli b/src/commands/new_commands.mli new file mode 100644 index 0000000000..e8f766f822 --- /dev/null +++ b/src/commands/new_commands.mli @@ -0,0 +1,38 @@ +(* {{{ COPYING *( + + This file is part of Merlin, an helper for ocaml editors + + Copyright (C) 2013 - 2015 Frédéric Bour + Thomas Refis + Simon Castellan + Tomasz Kołodziejski + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + The Software is provided "as is", without warranty of any kind, express or + implied, including but not limited to the warranties of merchantability, + fitness for a particular purpose and noninfringement. In no event shall + the authors or copyright holders be liable for any claim, damages or other + liability, whether in an action of contract, tort or otherwise, arising + from, out of or in connection with the software or the use or other dealings + in the Software. + +)* }}} *) + +open Std + +type command = + Command : string * Marg.docstring * ([`Mandatory|`Optional|`Many] * 'args Marg.spec) list * 'args * + (Mpipeline.t -> 'args -> json) -> command + +val all_commands : command list + +val find_command : string -> command list -> command diff --git a/src/frontend/ocamlmerlin/query_json.ml b/src/commands/query_json.ml similarity index 100% rename from src/frontend/ocamlmerlin/query_json.ml rename to src/commands/query_json.ml diff --git a/src/frontend/ocamlmerlin/dune b/src/frontend/ocamlmerlin/dune index e8ab3eccdd..409c71c0c2 100644 --- a/src/frontend/ocamlmerlin/dune +++ b/src/frontend/ocamlmerlin/dune @@ -12,12 +12,13 @@ -open Merlin_kernel -open Merlin_utils -open Merlin_analysis - -open Merlin_kernel) + -open Merlin_kernel + -open Merlin_commands) (modules (:standard \ gen_ccflags)) (libraries merlin-lib.config yojson merlin-lib.analysis merlin-lib.kernel merlin-lib.utils merlin-lib.os_ipc merlin-lib.ocaml_parsing merlin-lib.query_protocol merlin-lib.query_commands - merlin-lib.ocaml_typing merlin-lib.ocaml_utils)) + merlin-lib.ocaml_typing merlin-lib.ocaml_utils merlin-lib.commands)) (executable (name gen_ccflags) diff --git a/src/frontend/ocamlmerlin/new/new_commands.mli b/src/frontend/ocamlmerlin/new/new_commands.mli deleted file mode 100644 index 2c6498aa25..0000000000 --- a/src/frontend/ocamlmerlin/new/new_commands.mli +++ /dev/null @@ -1,9 +0,0 @@ -open Std - -type command = - Command : string * Marg.docstring * ([`Mandatory|`Optional|`Many] * 'args Marg.spec) list * 'args * - (Mpipeline.t -> 'args -> json) -> command - -val all_commands : command list - -val find_command : string -> command list -> command