Skip to content

Commit b51d33e

Browse files
committed
TMP: Implement -no-corrections
Signed-off-by: Nathan Rebours <nathan.p.rebours@gmail.com>
1 parent 17bf459 commit b51d33e

File tree

3 files changed

+72
-32
lines changed

3 files changed

+72
-32
lines changed

src/context_free.ml

Lines changed: 49 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,36 @@ let handle_attr_inline attrs ~convert_exn ~item ~expanded_item ~loc ~base_ctxt
462462
let error_item = [ convert_exn exn ] in
463463
return (error_item :: acc)))
464464

465+
let handle_attr_group_inline_expect attrs rf ~items ~expanded_items ~loc ~base_ctxt
466+
~embed_errors ~convert_exn ~no_corrections =
467+
if no_corrections then
468+
(* Mark expect attributes as seen *)
469+
List.fold_left attrs ~init:(return ())
470+
~f:(fun acc (Rule.Attr_group_inline.T group) ->
471+
acc >>= fun () ->
472+
get_group group.attribute items >>= fun _ ->
473+
get_group group.attribute expanded_items >>= fun _ ->
474+
return ())
475+
>>= fun () -> return []
476+
else
477+
handle_attr_group_inline attrs rf ~items ~expanded_items ~loc ~base_ctxt
478+
~embed_errors ~convert_exn
479+
480+
let handle_attr_inline_expect attrs ~convert_exn ~item ~expanded_item ~loc ~base_ctxt
481+
~embed_errors ~no_corrections =
482+
if no_corrections then
483+
(* Mark expect attributes as seen *)
484+
List.fold_left attrs ~init:(return ())
485+
~f:(fun acc (Rule.Attr_inline.T a) ->
486+
acc >>= fun () ->
487+
Attribute.get_res a.attribute item |> of_result ~default:None >>= fun _ ->
488+
Attribute.get_res a.attribute expanded_item |> of_result ~default:None >>= fun _ ->
489+
return ())
490+
>>= fun () -> return []
491+
else
492+
handle_attr_inline attrs ~item ~expanded_item ~loc ~base_ctxt
493+
~embed_errors ~convert_exn
494+
465495
module Expect_mismatch_handler = struct
466496
type t = {
467497
f : 'a. 'a Attribute.Floating.Context.t -> Location.t -> 'a list -> unit;
@@ -471,7 +501,9 @@ module Expect_mismatch_handler = struct
471501
end
472502

473503
class map_top_down ?(expect_mismatch_handler = Expect_mismatch_handler.nop)
474-
?(generated_code_hook = Generated_code_hook.nop) ?(embed_errors = false) rules
504+
?(generated_code_hook = Generated_code_hook.nop) ?(embed_errors = false)
505+
?(no_corrections = false)
506+
rules
475507
=
476508
let hook = generated_code_hook in
477509

@@ -546,6 +578,12 @@ class map_top_down ?(expect_mismatch_handler = Expect_mismatch_handler.nop)
546578
let map_nodes = map_nodes ~hook ~embed_errors in
547579
let handle_attr_group_inline = handle_attr_group_inline ~embed_errors in
548580
let handle_attr_inline = handle_attr_inline ~embed_errors in
581+
let handle_attr_group_inline_expect =
582+
handle_attr_group_inline_expect ~no_corrections ~embed_errors
583+
in
584+
let handle_attr_inline_expect =
585+
handle_attr_inline_expect ~no_corrections ~embed_errors
586+
in
549587

550588
object (self)
551589
inherit Ast_traverse.map_with_expansion_context_and_errors as super
@@ -780,7 +818,7 @@ class map_top_down ?(expect_mismatch_handler = Expect_mismatch_handler.nop)
780818
handle_attr_group_inline attr_str_type_decls rf ~items:tds
781819
~expanded_items:exp_tds ~loc ~base_ctxt ~convert_exn
782820
>>= fun extra_items ->
783-
handle_attr_group_inline attr_str_type_decls_expect rf
821+
handle_attr_group_inline_expect attr_str_type_decls_expect rf
784822
~items:tds ~expanded_items:exp_tds ~loc ~base_ctxt
785823
~convert_exn
786824
>>= fun expect_items ->
@@ -790,7 +828,7 @@ class map_top_down ?(expect_mismatch_handler = Expect_mismatch_handler.nop)
790828
handle_attr_inline attr_str_module_type_decls ~item:mtd
791829
~expanded_item:exp_mtd ~loc ~base_ctxt ~convert_exn
792830
>>= fun extra_items ->
793-
handle_attr_inline attr_str_module_type_decls_expect
831+
handle_attr_inline_expect attr_str_module_type_decls_expect
794832
~item:mtd ~expanded_item:exp_mtd ~loc ~base_ctxt
795833
~convert_exn
796834
>>= fun expect_items ->
@@ -800,7 +838,7 @@ class map_top_down ?(expect_mismatch_handler = Expect_mismatch_handler.nop)
800838
handle_attr_inline attr_str_type_exts ~item:te
801839
~expanded_item:exp_te ~loc ~base_ctxt ~convert_exn
802840
>>= fun extra_items ->
803-
handle_attr_inline attr_str_type_exts_expect ~item:te
841+
handle_attr_inline_expect attr_str_type_exts_expect ~item:te
804842
~expanded_item:exp_te ~loc ~base_ctxt ~convert_exn
805843
>>= fun expect_items ->
806844
with_extra_items expanded_item ~extra_items ~expect_items
@@ -809,7 +847,7 @@ class map_top_down ?(expect_mismatch_handler = Expect_mismatch_handler.nop)
809847
handle_attr_inline attr_str_exceptions ~item:ec
810848
~expanded_item:exp_ec ~loc ~base_ctxt ~convert_exn
811849
>>= fun extra_items ->
812-
handle_attr_inline attr_str_exceptions_expect ~item:ec
850+
handle_attr_inline_expect attr_str_exceptions_expect ~item:ec
813851
~expanded_item:exp_ec ~loc ~base_ctxt ~convert_exn
814852
>>= fun expect_items ->
815853
with_extra_items expanded_item ~extra_items ~expect_items
@@ -819,7 +857,7 @@ class map_top_down ?(expect_mismatch_handler = Expect_mismatch_handler.nop)
819857
~items:cds ~expanded_items:exp_cds ~loc ~base_ctxt
820858
~convert_exn
821859
>>= fun extra_items ->
822-
handle_attr_group_inline attr_str_class_decls_expect
860+
handle_attr_group_inline_expect attr_str_class_decls_expect
823861
Nonrecursive ~items:cds ~expanded_items:exp_cds ~loc
824862
~base_ctxt ~convert_exn
825863
>>= fun expect_items ->
@@ -889,7 +927,7 @@ class map_top_down ?(expect_mismatch_handler = Expect_mismatch_handler.nop)
889927
handle_attr_group_inline attr_sig_type_decls rf ~items:tds
890928
~expanded_items:exp_tds ~loc ~base_ctxt ~convert_exn
891929
>>= fun extra_items ->
892-
handle_attr_group_inline attr_sig_type_decls_expect rf
930+
handle_attr_group_inline_expect attr_sig_type_decls_expect rf
893931
~items:tds ~expanded_items:exp_tds ~loc ~base_ctxt
894932
~convert_exn
895933
>>= fun expect_items ->
@@ -899,7 +937,7 @@ class map_top_down ?(expect_mismatch_handler = Expect_mismatch_handler.nop)
899937
handle_attr_inline attr_sig_module_type_decls ~item:mtd
900938
~expanded_item:exp_mtd ~loc ~base_ctxt ~convert_exn
901939
>>= fun extra_items ->
902-
handle_attr_inline attr_sig_module_type_decls_expect
940+
handle_attr_inline_expect attr_sig_module_type_decls_expect
903941
~item:mtd ~expanded_item:exp_mtd ~loc ~base_ctxt
904942
~convert_exn
905943
>>= fun expect_items ->
@@ -909,7 +947,7 @@ class map_top_down ?(expect_mismatch_handler = Expect_mismatch_handler.nop)
909947
handle_attr_inline attr_sig_type_exts ~item:te
910948
~expanded_item:exp_te ~loc ~base_ctxt ~convert_exn
911949
>>= fun extra_items ->
912-
handle_attr_inline attr_sig_type_exts_expect ~item:te
950+
handle_attr_inline_expect attr_sig_type_exts_expect ~item:te
913951
~expanded_item:exp_te ~loc ~base_ctxt ~convert_exn
914952
>>= fun expect_items ->
915953
with_extra_items expanded_item ~extra_items ~expect_items
@@ -918,7 +956,7 @@ class map_top_down ?(expect_mismatch_handler = Expect_mismatch_handler.nop)
918956
handle_attr_inline attr_sig_exceptions ~item:ec
919957
~expanded_item:exp_ec ~loc ~base_ctxt ~convert_exn
920958
>>= fun extra_items ->
921-
handle_attr_inline attr_sig_exceptions_expect ~item:ec
959+
handle_attr_inline_expect attr_sig_exceptions_expect ~item:ec
922960
~expanded_item:exp_ec ~loc ~base_ctxt ~convert_exn
923961
>>= fun expect_items ->
924962
with_extra_items expanded_item ~extra_items ~expect_items
@@ -928,7 +966,7 @@ class map_top_down ?(expect_mismatch_handler = Expect_mismatch_handler.nop)
928966
~items:cds ~expanded_items:exp_cds ~loc ~base_ctxt
929967
~convert_exn
930968
>>= fun extra_items ->
931-
handle_attr_group_inline attr_sig_class_decls_expect
969+
handle_attr_group_inline_expect attr_sig_class_decls_expect
932970
Nonrecursive ~items:cds ~expanded_items:exp_cds ~loc
933971
~base_ctxt ~convert_exn
934972
>>= fun expect_items ->

src/context_free.mli

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ class map_top_down :
166166
?generated_code_hook:
167167
Generated_code_hook.t (* default: Generated_code_hook.nop *) ->
168168
?embed_errors:bool ->
169+
?no_corrections:bool ->
169170
Rule.t list ->
170171
object
171172
inherit Ast_traverse.map_with_expansion_context_and_errors

src/driver.ml

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -219,12 +219,12 @@ module Transform = struct
219219
let last = get_loc (last x l) in
220220
Some { first with loc_end = last.loc_end }
221221

222-
let merge_into_generic_mappers t ~embed_errors ~hook ~expect_mismatch_handler
222+
let merge_into_generic_mappers t ~no_corrections ~embed_errors ~hook ~expect_mismatch_handler
223223
~tool_name ~input_name =
224224
let { rules; enclose_impl; enclose_intf; impl; intf; _ } = t in
225225
let map =
226226
new Context_free.map_top_down
227-
rules ~embed_errors ~generated_code_hook:hook ~expect_mismatch_handler
227+
rules ~no_corrections ~embed_errors ~generated_code_hook:hook ~expect_mismatch_handler
228228
in
229229
let gen_header_and_footer context whole_loc f =
230230
let header, footer = f whole_loc in
@@ -456,7 +456,7 @@ let debug_dropped_attribute name ~old_dropped ~new_dropped =
456456
print_diff "disappeared" new_dropped old_dropped;
457457
print_diff "reappeared" old_dropped new_dropped
458458

459-
let get_whole_ast_passes ~embed_errors ~hook ~expect_mismatch_handler ~tool_name
459+
let get_whole_ast_passes ~no_corrections ~embed_errors ~hook ~expect_mismatch_handler ~tool_name
460460
~input_name =
461461
let cts =
462462
match !apply_list with
@@ -486,7 +486,7 @@ let get_whole_ast_passes ~embed_errors ~hook ~expect_mismatch_handler ~tool_name
486486
if !no_merge then
487487
List.map transforms
488488
~f:
489-
(Transform.merge_into_generic_mappers ~embed_errors ~hook ~tool_name
489+
(Transform.merge_into_generic_mappers ~no_corrections ~embed_errors ~hook ~tool_name
490490
~expect_mismatch_handler ~input_name)
491491
else
492492
(let get_enclosers ~f =
@@ -517,7 +517,7 @@ let get_whole_ast_passes ~embed_errors ~hook ~expect_mismatch_handler ~tool_name
517517
let footers = List.concat (List.rev footers) in
518518
(headers, footers))
519519
in
520-
Transform.builtin_of_context_free_rewriters ~rules ~embed_errors
520+
Transform.builtin_of_context_free_rewriters ~rules ~no_corrections ~embed_errors
521521
~hook ~expect_mismatch_handler
522522
~enclose_impl:(merge_encloser impl_enclosers)
523523
~enclose_intf:(merge_encloser intf_enclosers)
@@ -529,9 +529,9 @@ let get_whole_ast_passes ~embed_errors ~hook ~expect_mismatch_handler ~tool_name
529529
linters @ preprocess @ before_instrs @ make_generic cts @ after_instrs
530530

531531
let apply_transforms ~tool_name ~file_path ~field ~lint_field ~dropped_so_far
532-
~hook ~expect_mismatch_handler ~input_name ~embed_errors ast =
532+
~hook ~expect_mismatch_handler ~input_name ~no_corrections ~embed_errors ast =
533533
let cts =
534-
get_whole_ast_passes ~tool_name ~embed_errors ~hook ~expect_mismatch_handler
534+
get_whole_ast_passes ~tool_name ~no_corrections ~embed_errors ~hook ~expect_mismatch_handler
535535
~input_name
536536
in
537537
let finish (ast, _dropped, lint_errors, errors) =
@@ -612,10 +612,11 @@ let exn_to_extension exn ~(kind : Kind.t) =
612612
let print_passes () =
613613
let tool_name = "ppxlib_driver" in
614614
let embed_errors = false in
615+
let no_corrections = false in
615616
let hook = Context_free.Generated_code_hook.nop in
616617
let expect_mismatch_handler = Context_free.Expect_mismatch_handler.nop in
617618
let cts =
618-
get_whole_ast_passes ~embed_errors ~hook ~expect_mismatch_handler ~tool_name
619+
get_whole_ast_passes ~no_corrections ~embed_errors ~hook ~expect_mismatch_handler ~tool_name
619620
~input_name:None
620621
in
621622
if !perform_checks then
@@ -635,7 +636,7 @@ let sort_errors_by_loc errors =
635636
(*$*)
636637

637638
let map_structure_gen st ~tool_name ~hook ~expect_mismatch_handler ~input_name
638-
~embed_errors =
639+
~embed_errors ~no_corrections =
639640
Cookies.acknowledge_cookies T;
640641
if !perform_checks then (
641642
Attribute.reset_checks ();
@@ -694,7 +695,7 @@ let map_structure_gen st ~tool_name ~hook ~expect_mismatch_handler ~input_name
694695
~field:(fun (ct : Transform.t) -> ct.impl)
695696
~lint_field:(fun (ct : Transform.t) -> ct.lint_impl)
696697
~dropped_so_far:Attribute.dropped_so_far_structure ~hook
697-
~expect_mismatch_handler ~input_name ~embed_errors
698+
~expect_mismatch_handler ~input_name ~embed_errors ~no_corrections
698699
in
699700
st |> lint lint_errors |> cookies_and_check |> with_errors (List.rev errors)
700701

@@ -704,14 +705,14 @@ let map_structure st =
704705
~tool_name:(Astlib.Ast_metadata.tool_name ())
705706
~hook:Context_free.Generated_code_hook.nop
706707
~expect_mismatch_handler:Context_free.Expect_mismatch_handler.nop
707-
~input_name:None ~embed_errors:false
708+
~input_name:None ~embed_errors:false ~no_corrections:false
708709
with
709710
| ast -> ast
710711

711712
(*$ str_to_sig _last_text_block *)
712713

713714
let map_signature_gen sg ~tool_name ~hook ~expect_mismatch_handler ~input_name
714-
~embed_errors =
715+
~embed_errors ~no_corrections =
715716
Cookies.acknowledge_cookies T;
716717
if !perform_checks then (
717718
Attribute.reset_checks ();
@@ -770,7 +771,7 @@ let map_signature_gen sg ~tool_name ~hook ~expect_mismatch_handler ~input_name
770771
~field:(fun (ct : Transform.t) -> ct.intf)
771772
~lint_field:(fun (ct : Transform.t) -> ct.lint_intf)
772773
~dropped_so_far:Attribute.dropped_so_far_signature ~hook
773-
~expect_mismatch_handler ~input_name ~embed_errors
774+
~expect_mismatch_handler ~input_name ~embed_errors ~no_corrections
774775
in
775776
sg |> lint lint_errors |> cookies_and_check |> with_errors (List.rev errors)
776777

@@ -780,7 +781,7 @@ let map_signature sg =
780781
~tool_name:(Astlib.Ast_metadata.tool_name ())
781782
~hook:Context_free.Generated_code_hook.nop
782783
~expect_mismatch_handler:Context_free.Expect_mismatch_handler.nop
783-
~input_name:None ~embed_errors:false
784+
~input_name:None ~embed_errors:false ~no_corrections:false
784785
with
785786
| ast -> ast
786787

@@ -1038,13 +1039,13 @@ struct
10381039
end
10391040

10401041
let process_ast (ast : Intf_or_impl.t) ~input_name ~tool_name ~hook
1041-
~expect_mismatch_handler ~embed_errors =
1042+
~expect_mismatch_handler ~embed_errors ~no_corrections =
10421043
match ast with
10431044
| Intf x ->
10441045
let ast =
10451046
match
10461047
map_signature_gen x ~tool_name ~hook ~expect_mismatch_handler
1047-
~input_name:(Some input_name) ~embed_errors
1048+
~input_name:(Some input_name) ~embed_errors ~no_corrections
10481049
with
10491050
| ast -> ast
10501051
in
@@ -1053,14 +1054,14 @@ let process_ast (ast : Intf_or_impl.t) ~input_name ~tool_name ~hook
10531054
let ast =
10541055
match
10551056
map_structure_gen x ~tool_name ~hook ~expect_mismatch_handler
1056-
~input_name:(Some input_name) ~embed_errors
1057+
~input_name:(Some input_name) ~embed_errors ~no_corrections
10571058
with
10581059
| ast -> ast
10591060
in
10601061
Intf_or_impl.Impl ast
10611062

10621063
let process_file (kind : Kind.t) fn ~input_name ~relocate ~output_mode
1063-
~embed_errors ~output =
1064+
~embed_errors ~no_corrections ~output =
10641065
File_property.reset_all ();
10651066
List.iter (List.rev !process_file_hooks) ~f:(fun f -> f ());
10661067
corrections := [];
@@ -1098,7 +1099,7 @@ let process_file (kind : Kind.t) fn ~input_name ~relocate ~output_mode
10981099
let ast =
10991100
extract_cookies ast
11001101
|> process_ast ~input_name ~tool_name ~hook ~expect_mismatch_handler
1101-
~embed_errors
1102+
~embed_errors ~no_corrections
11021103
in
11031104
(input_fname, input_version, ast)
11041105
with exn when embed_errors ->
@@ -1450,7 +1451,7 @@ let standalone_main () =
14501451
match !loc_fname with None -> (fn, false) | Some fn -> (fn, true)
14511452
in
14521453
process_file kind fn ~input_name ~relocate ~output_mode:!output_mode
1453-
~output:!output ~embed_errors:!embed_errors
1454+
~output:!output ~embed_errors:!embed_errors ~no_corrections:!no_corrections
14541455

14551456
let rewrite_binary_ast_file input_fn output_fn =
14561457
let input_name, input_version, ast = load_input_run_as_ppx input_fn in
@@ -1461,7 +1462,7 @@ let rewrite_binary_ast_file input_fn output_fn =
14611462
let hook = Context_free.Generated_code_hook.nop in
14621463
let expect_mismatch_handler = Context_free.Expect_mismatch_handler.nop in
14631464
process_ast ast ~input_name ~tool_name ~hook ~expect_mismatch_handler
1464-
~embed_errors:true
1465+
~embed_errors:true ~no_corrections:false
14651466
with exn -> exn_to_extension exn ~kind:(Intf_or_impl.kind ast)
14661467
in
14671468
with_output (Some output_fn) ~binary:true ~f:(fun oc ->

0 commit comments

Comments
 (0)