Skip to content

Commit 4cf5b85

Browse files
committed
Warn if no universal case is provided.
1 parent c222fc4 commit 4cf5b85

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

ppx_regexp.ml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@ open Longident
2626

2727
let error ~loc msg = raise (Location.Error (Location.error ~loc msg))
2828

29+
let warn ~loc msg e =
30+
let e_msg = Exp.constant (Const.string msg) in
31+
let structure = {pstr_desc = Pstr_eval (e_msg, []); pstr_loc = loc} in
32+
Exp.attr e ({txt = "ocaml.ppwarning"; loc}, PStr [structure])
33+
2934
let dyn_bindings = ref []
3035
let clear_bindings () = dyn_bindings := []
3136
let add_binding binding = dyn_bindings := binding :: !dyn_bindings
@@ -119,7 +124,8 @@ let transform_cases ~loc e cases =
119124
let e0 = Exp.constant (Const.string pos.pos_fname) in
120125
let e1 = Exp.constant (Const.int pos.pos_lnum) in
121126
let e2 = Exp.constant (Const.int (pos.pos_cnum - pos.pos_bol)) in
122-
(cases, [%expr raise (Match_failure ([%e e0], [%e e1], [%e e2]))]))
127+
let e = [%expr raise (Match_failure ([%e e0], [%e e1], [%e e2]))] in
128+
(cases, warn ~loc "A universal case is recommended for %pcre." e))
123129
in
124130
let cases = List.rev_map aux cases in
125131
let res = Exp.array (List.map (fun (re, _, _, _) -> re) cases) in

0 commit comments

Comments
 (0)