diff --git a/CHANGES.md b/CHANGES.md index 2e5045ce0b..da12d591fe 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -9,6 +9,9 @@ merlin NEXT_VERSION - 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 629faa6e4b..8b17d252da 100644 --- a/src/frontend/ocamlmerlin/dune +++ b/src/frontend/ocamlmerlin/dune @@ -12,12 +12,15 @@ -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 unix str)) + merlin-lib.ocaml_typing merlin-lib.ocaml_utils + merlin-lib.commands + unix str)) (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