Skip to content

Commit 5fccb69

Browse files
committed
Cleanup plugin parsing
1 parent ef9975a commit 5fccb69

File tree

2 files changed

+22
-42
lines changed

2 files changed

+22
-42
lines changed

src/bin/main.ml

+8-1
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,14 @@ let doc conf t =
123123

124124
let list_extensions () =
125125
Format.printf "%a@."
126-
Fmt.(vbox @@ list (box Options.pp_extension)) Options.all_extensions
126+
Fmt.(vbox @@ list (box Options.pp_extension)) Options.all_extensions;
127+
match Options.invalid_extensions with
128+
| [] -> ()
129+
| invalid ->
130+
Format.printf "@[<v 2>%a@ %a@]@."
131+
(Fmt.styled `Bold @@ Fmt.styled (`Fg (`Hi `Magenta)) @@ Fmt.string)
132+
"The following plugins were found but are invalid:"
133+
Fmt.(list string) invalid
127134

128135

129136
(* Main code *)

src/bin/options.ml

+14-41
Original file line numberDiff line numberDiff line change
@@ -323,31 +323,6 @@ let find_model_plugin plugin name =
323323
)
324324
with Not_found -> Dune_plugin plugin
325325

326-
let parse_plugin_opt s =
327-
match String.rindex s '.' with
328-
| exception Not_found ->
329-
Some
330-
{ extension_name = s
331-
; typing_plugin = Dune_plugin s
332-
; model_plugin = Dune_plugin s }
333-
| pos ->
334-
let extension_name = String.sub s 0 pos in
335-
let plugin_kind = String.sub s (pos + 1) (String.length s - pos - 1) in
336-
match plugin_kind with
337-
| "typing" ->
338-
Some
339-
{ extension_name
340-
; typing_plugin = find_typing_plugin s extension_name
341-
; model_plugin = Unavailable }
342-
| "model" ->
343-
Some
344-
{ extension_name
345-
; typing_plugin = Unavailable
346-
; model_plugin = find_model_plugin s extension_name }
347-
| _ ->
348-
(* Ignore plugins that do not conform to naming conventions *)
349-
None
350-
351326
let merge_extension e1 e2 =
352327
assert (e1.extension_name = e2.extension_name);
353328
let typing_plugin = merge_plugin e1.typing_plugin e2.typing_plugin
@@ -388,13 +363,23 @@ let builtin_extensions =
388363
(List.rev_append builtin_typing_extensions builtin_model_extensions)
389364

390365
let all_extensions, invalid_extensions =
391-
let add_plugin ok err n = function
392-
| None -> ok, n :: err
393-
| Some p -> p :: ok, err
366+
let add_plugin ok err plugin = function
367+
| None -> ok, plugin :: err
368+
| Some (extension_name, k) ->
369+
let typing_plugin =
370+
match k with
371+
| None | Some `Typing -> Dune_plugin plugin
372+
| Some _ -> Unavailable
373+
and model_plugin =
374+
match k with
375+
| None | Some `Model -> Dune_plugin plugin
376+
| Some _ -> Unavailable
377+
in
378+
{ extension_name ; typing_plugin ; model_plugin } :: ok, err
394379
in
395380
let ok, err =
396381
List.fold_left (fun (ok, err) e ->
397-
add_plugin ok err e @@ parse_plugin_opt e
382+
add_plugin ok err e @@ parse_ext_opt e
398383
) (builtin_extensions, []) (Dolmen.Sites.Plugins.Plugins.list ())
399384
in
400385
merge_extensions ok, List.fast_sort String.compare err
@@ -409,18 +394,6 @@ let pp_extension ppf e =
409394
Fmt.pf ppf "%s@ %a" e.extension_name
410395
Fmt.(parens @@ list ~sep:comma string) variants
411396

412-
let pp_plugin ppf (n, p) =
413-
match p with
414-
| None ->
415-
Fmt.pf ppf "%s@ %a" n
416-
(Fmt.styled `Bold @@ Fmt.styled (`Fg (`Hi `Magenta)) @@ Fmt.string)
417-
"IGNORED"
418-
| Some p -> pp_extension ppf p
419-
420-
let pp_kind ppf = function
421-
| `Typing -> Fmt.pf ppf "typing"
422-
| `Model -> Fmt.pf ppf "model"
423-
424397
let find_ext name =
425398
try Ok (List.find (fun e -> e.extension_name = name) all_extensions)
426399
with Not_found ->

0 commit comments

Comments
 (0)