Error on invalid matcher option

This commit is contained in:
Rijnard van Tonder 2019-09-24 03:09:55 -04:00 committed by GitHub
parent e695d73082
commit 69b9987df8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 56 additions and 14 deletions

View File

@ -715,11 +715,8 @@ let all : (module Types.Matcher.S) list =
; (module Generic)
]
let select_with_extension extension : (module Types.Matcher.S) =
let select_with_extension extension : (module Types.Matcher.S) option =
List.find all ~f:(fun (module M) -> List.exists M.extensions ~f:((=) extension))
|> function
| Some matcher -> matcher
| None -> (module Generic)
let create
Types.Syntax.

View File

@ -4,12 +4,6 @@ open Hack_parallel
open Pipeline.Command_configuration
type json_result =
{ matches : Match.t list
; source : string
}
[@@deriving yojson]
let verbose_out_file = "/tmp/comby.out"
let debug =
@ -32,7 +26,16 @@ let select_matcher custom_matcher override_matcher configuration =
Format.eprintf "%s@." error;
exit 1
else if Option.is_some override_matcher then
Matchers.select_with_extension (Option.value_exn override_matcher), None
let matcher_override = Option.value_exn override_matcher in
let matcher =
match Matchers.select_with_extension matcher_override with
| Some matcher -> matcher
| None when matcher_override <> ".generic" ->
Format.eprintf "The matcher %S is not supported. See -list for supported matchers@." matcher_override;
exit 1
| None -> (module Matchers.Generic)
in
matcher, None
else
let extension =
match configuration.file_filters with
@ -42,7 +45,9 @@ let select_matcher custom_matcher override_matcher configuration =
| _, Some extension -> "." ^ extension
| extension, None -> "." ^ extension
in
Matchers.select_with_extension extension, Some extension
match Matchers.select_with_extension extension with
| Some matcher -> matcher, Some extension
| None -> (module Matchers.Generic), Some extension
let paths_with_file_size paths =
List.map paths ~f:(fun path ->

View File

@ -38,7 +38,11 @@ let perform_match request =
>>| function
| Ok ({ source; match_template; rule; language; id } as request) ->
if debug then Format.printf "Received %s@." (Yojson.Safe.pretty_to_string (In.match_request_to_yojson request));
let matcher = Matchers.select_with_extension language in
let matcher =
match Matchers.select_with_extension language with
| Some matcher -> matcher
| None -> (module Matchers.Generic)
in
let run ?rule () =
let configuration = Configuration.create ~match_kind:Fuzzy () in
Pipeline.timed_run matcher ?rule ~configuration ~template:match_template ~source ()
@ -64,7 +68,11 @@ let perform_rewrite request =
>>| function
| Ok ({ source; match_template; rewrite_template; rule; language; substitution_kind; id } as request) ->
if debug then Format.printf "Received %s@." (Yojson.Safe.pretty_to_string (In.rewrite_request_to_yojson request));
let matcher = Matchers.select_with_extension language in
let matcher =
match Matchers.select_with_extension language with
| Some matcher -> matcher
| None -> (module Matchers.Generic)
in
let source_substitution, substitute_in_place =
match substitution_kind with
| "newline_separated" -> None, false

View File

@ -836,3 +836,35 @@ let ()
[%expect_exact {|3 matches
WARNING: -count only works with -match-only. Performing -match-only -count.
|}]
let%expect_test "unrecognized_matcher" =
let source = {|dont care|} in
let match_template = "dont care" in
let rewrite_template = "dont care" in
let command_args =
Format.sprintf "-stdin '%s' '%s' -matcher invalid"
match_template rewrite_template
in
let command = Format.sprintf "%s %s" binary_path command_args in
read_expect_stdin_and_stdout command source
|> print_string;
[%expect_exact {|The matcher "invalid" is not supported. See -list for supported matchers
|}]
let%expect_test "generic_matcher_ok" =
let source = {|dont care|} in
let match_template = "dont care" in
let rewrite_template = "blah" in
let command_args =
Format.sprintf "-stdin '%s' '%s' -matcher .generic"
match_template rewrite_template
in
let command = Format.sprintf "%s %s" binary_path command_args in
read_expect_stdin_and_stdout command source
|> print_string;
[%expect_exact {|------ /dev/null
++++++ /dev/null
@|-1,1 +1,1 ============================================================
-|dont care
+|blah
|}]