Skip to content

Commit

Permalink
config: use unit_name info from reader
Browse files Browse the repository at this point in the history
  • Loading branch information
voodoos committed Jun 4, 2024
1 parent b0a5e4a commit a3486c1
Show file tree
Hide file tree
Showing 10 changed files with 29 additions and 1 deletion.
1 change: 1 addition & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ UNRELEASED
- The file format is described in library `Merlin_lib.index_format`
- A new configuration directive is available to point merlin to the index
files.
- merlin now understands the UNIT_NAME configuration directive (#)
+ editor modes
- emacs: add basic support for project-wide occurrences (#1766)

Expand Down
6 changes: 6 additions & 0 deletions src/dot-merlin/dot_merlin_reader.ml
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,8 @@ module Cache = File_cache.Make (struct
tell (`STDLIB (String.drop 7 line))
else if String.is_prefixed ~by:"SOURCE_ROOT " line then
tell (`SOURCE_ROOT (String.drop 12 line))
else if String.is_prefixed ~by:"UNIT_NAME " line then
tell (`UNIT_NAME (String.drop 10 line))
else if String.is_prefixed ~by:"FINDLIB " line then
tell (`FINDLIB (String.drop 8 line))
else if String.is_prefixed ~by:"SUFFIX " line then
Expand Down Expand Up @@ -314,6 +316,7 @@ type config = {
to_canonicalize : (string * Merlin_dot_protocol.Directive.include_path) list;
stdlib : string option;
source_root : string option;
unit_name : string option;
packages_to_load : string list;
findlib : string option;
findlib_path : string list;
Expand All @@ -325,6 +328,7 @@ let empty_config = {
to_canonicalize = [];
stdlib = None;
source_root = None;
unit_name = None;
packages_to_load = [];
findlib = None;
findlib_path = [];
Expand Down Expand Up @@ -352,6 +356,8 @@ let prepend_config ~cwd ~cfg =
| `SOURCE_ROOT path ->
let canon_path = canonicalize_filename ~cwd path in
{ cfg with source_root = Some canon_path }
| `UNIT_NAME name ->
{ cfg with unit_name = Some name }
| `FINDLIB path ->
let canon_path = canonicalize_filename ~cwd path in
begin match cfg.stdlib with
Expand Down
3 changes: 3 additions & 0 deletions src/dot-protocol/merlin_dot_protocol.ml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ module Directive = struct
| `FLG of string list
| `STDLIB of string
| `SOURCE_ROOT of string
| `UNIT_NAME of string
| `SUFFIX of string
| `READER of string list
| `EXCLUDE_QUERY_DIR
Expand Down Expand Up @@ -96,6 +97,7 @@ module Sexp = struct
| "INDEX" -> `INDEX value
| "STDLIB" -> `STDLIB value
| "SOURCE_ROOT" -> `SOURCE_ROOT value
| "UNIT_NAME" -> `UNIT_NAME value
| "SUFFIX" -> `SUFFIX value
| "ERROR" -> `ERROR_MSG value
| "FLG" ->
Expand Down Expand Up @@ -129,6 +131,7 @@ module Sexp = struct
| `CMT s -> ("CMT", single s)
| `INDEX s -> ("INDEX", single s)
| `SOURCE_ROOT s -> ("SOURCE_ROOT", single s)
| `UNIT_NAME s -> ("UNIT_NAME", single s)
| `EXT ss -> ("EXT", [ List (atoms_of_strings ss) ])
| `FLG ss -> ("FLG", [ List (atoms_of_strings ss) ])
| `STDLIB s -> ("STDLIB", single s)
Expand Down
1 change: 1 addition & 0 deletions src/dot-protocol/merlin_dot_protocol.mli
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ module Directive : sig
| `FLG of string list
| `STDLIB of string
| `SOURCE_ROOT of string
| `UNIT_NAME of string
| `SUFFIX of string
| `READER of string list
| `EXCLUDE_QUERY_DIR
Expand Down
10 changes: 9 additions & 1 deletion src/kernel/mconfig.ml
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ type merlin = {
suffixes : (string * string) list;
stdlib : string option;
source_root : string option;
unit_name : string option;
reader : string list;
protocol : [`Json | `Sexp];
log_file : string option;
Expand Down Expand Up @@ -123,6 +124,7 @@ let dump_merlin x =
);
"stdlib" , Json.option Json.string x.stdlib;
"source_root" , Json.option Json.string x.source_root;
"unit_name" , Json.option Json.string x.unit_name;
"reader" , `List (List.map ~f:Json.string x.reader);
"protocol" , (match x.protocol with
| `Json -> `String "json"
Expand Down Expand Up @@ -256,6 +258,8 @@ let merge_merlin_config dot merlin ~failures ~config_path =
stdlib = (if dot.stdlib = None then merlin.stdlib else dot.stdlib);
source_root =
(if dot.source_root = None then merlin.source_root else dot.source_root);
unit_name =
(if dot.unit_name = None then merlin.unit_name else dot.unit_name);
reader =
if dot.reader = []
then merlin.reader
Expand Down Expand Up @@ -657,6 +661,7 @@ let initial = {
suffixes = [(".ml", ".mli"); (".re", ".rei")];
stdlib = None;
source_root = None;
unit_name = None;
reader = [];
protocol = `Json;
log_file = None;
Expand Down Expand Up @@ -834,4 +839,7 @@ let global_modules ?(include_current=false) config = (

let filename t = t.query.filename

let unitname t = Misc.unitname t.query.filename
let unitname t =
match t.merlin.unit_name with
| Some name -> Misc.unitname name
| None -> Misc.unitname t.query.filename
1 change: 1 addition & 0 deletions src/kernel/mconfig.mli
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ type merlin = {
suffixes : (string * string) list;
stdlib : string option;
source_root : string option;
unit_name : string option;
reader : string list;
protocol : [`Json | `Sexp];
log_file : string option;
Expand Down
5 changes: 5 additions & 0 deletions src/kernel/mconfig_dot.ml
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ type config = {
suffixes : (string * string) list;
stdlib : string option;
source_root : string option;
unit_name : string option;
reader : string list;
exclude_query_dir : bool;
use_ppx_cache : bool;
Expand All @@ -63,6 +64,7 @@ let empty_config = {
flags = [];
stdlib = None;
source_root = None;
unit_name = None;
reader = [];
exclude_query_dir = false;
use_ppx_cache = false;
Expand Down Expand Up @@ -260,6 +262,8 @@ let prepend_config ~dir:cwd configurator (directives : directive list) config =
{config with stdlib = Some path}, errors
| `SOURCE_ROOT path ->
{config with source_root = Some path}, errors
| `UNIT_NAME name ->
{config with unit_name = Some name}, errors
| `READER reader ->
{config with reader}, errors
| `EXCLUDE_QUERY_DIR ->
Expand Down Expand Up @@ -292,6 +296,7 @@ let postprocess_config config =
flags = clean config.flags;
stdlib = config.stdlib;
source_root = config.source_root;
unit_name = config.unit_name;
reader = config.reader;
exclude_query_dir = config.exclude_query_dir;
use_ppx_cache = config.use_ppx_cache;
Expand Down
1 change: 1 addition & 0 deletions src/kernel/mconfig_dot.mli
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ type config = {
suffixes : (string * string) list;
stdlib : string option;
source_root : string option;
unit_name : string option;
reader : string list;
exclude_query_dir : bool;
use_ppx_cache : bool;
Expand Down
1 change: 1 addition & 0 deletions tests/test-dirs/config/dot-merlin-reader/load-config.t
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ This test comes from: https://github.com/janestreet/merlin-jst/pull/59
],
"stdlib": null,
"source_root": null,
"unit_name": null,
"reader": [],
"protocol": "json",
"log_file": null,
Expand Down
1 change: 1 addition & 0 deletions tests/test-dirs/config/dot-merlin-reader/quoting.t
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@
],
"stdlib": null,
"source_root": null,
"unit_name": null,
"reader": [],
"protocol": "json",
"log_file": null,
Expand Down

0 comments on commit a3486c1

Please sign in to comment.