diff --git a/check/classic/classic.ref b/check/classic/classic.ref index fcf2a07..43722a1 100644 --- a/check/classic/classic.ref +++ b/check/classic/classic.ref @@ -20,24 +20,26 @@ ./examples/using_dune/unwrapped_lib/values/values_no_intf.ml:20: unused_alias_fun ./examples/using_dune/unwrapped_lib/values/values_no_intf.ml:25: unused_closure -./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:1: unused_fun_with_single_never_used_opt_arg: Not detected -./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:8: internally_used_fun_with_single_never_used_opt_arg: Not detected -./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:10: internally_used_fun_with_single_always_used_opt_arg: Not detected -./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:12: internally_used_fun_with_single_sometimes_used_opt_arg: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:2: unused_int: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:3: internally_used_int: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:14: unused_fun: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:15: internally_used_fun: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:20: unused_alias_fun: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:25: unused_closure: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:26: internally_used_closure: Not detected -./examples/using_dune/wrapped_lib/values/values_in_submodules.mli:3: Exported.unused_int: Not detected -./examples/using_dune/wrapped_lib/values/values_in_submodules.mli:4: Exported.internally_used_int: Not detected -./examples/using_dune/wrapped_lib/values/values_in_submodules_no_intf.ml:3: Exported.unused_int: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:2: unused_int: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:13: unused_fun: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:20: unused_alias_fun: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:25: unused_closure: Not detected +./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:1: unused_fun_with_single_never_used_opt_arg +./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:8: internally_used_fun_with_single_never_used_opt_arg +./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:10: internally_used_fun_with_single_always_used_opt_arg +./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:12: internally_used_fun_with_single_sometimes_used_opt_arg + +./examples/using_dune/wrapped_lib/values/values.mli:2: unused_int +./examples/using_dune/wrapped_lib/values/values.mli:3: internally_used_int +./examples/using_dune/wrapped_lib/values/values.mli:14: unused_fun +./examples/using_dune/wrapped_lib/values/values.mli:15: internally_used_fun +./examples/using_dune/wrapped_lib/values/values.mli:20: unused_alias_fun +./examples/using_dune/wrapped_lib/values/values.mli:25: unused_closure +./examples/using_dune/wrapped_lib/values/values.mli:26: internally_used_closure +./examples/using_dune/wrapped_lib/values/values_in_submodules.mli:3: Exported.unused_int +./examples/using_dune/wrapped_lib/values/values_in_submodules.mli:4: Exported.internally_used_int +./examples/using_dune/wrapped_lib/values/values_in_submodules_no_intf.ml:3: Exported.unused_int +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:2: unused_int +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:13: unused_fun +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:20: unused_alias_fun +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:25: unused_closure + ./examples/using_make/advanced/inc_val.mli:1: x ./examples/using_make/advanced/inc_val.mli:2: y @@ -115,21 +117,22 @@ Nothing else to report in this section ./examples/using_dune/unwrapped_lib/obj/without_class.mli:28: _self_used_factory#unused_fun ./examples/using_dune/unwrapped_lib/obj/without_class.mli:28: _self_used_factory#unused_int -./examples/using_dune/wrapped_lib/obj/with_class.mli:1: unused#unused: Not detected -./examples/using_dune/wrapped_lib/obj/with_class.mli:5: basics#never_used_fun: Not detected -./examples/using_dune/wrapped_lib/obj/with_class.mli:5: basics#never_used_int: Not detected -./examples/using_dune/wrapped_lib/obj/with_class.mli:23: unused_fun_class#unused: Not detected -./examples/using_dune/wrapped_lib/obj/with_class.mli:25: fun_class#unused: Not detected -./examples/using_dune/wrapped_lib/obj/with_class.mli:35: _self_used#unused: Not detected -./examples/using_dune/wrapped_lib/obj/with_class.mli:41: _self_used_fun_class#unused: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#unused_fun: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#unused_int: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#unused_fun: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#unused_int: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:22: _self_used_immediate#unused_fun: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:22: _self_used_immediate#unused_int: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:28: _self_used_factory#unused_fun: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:28: _self_used_factory#unused_int: Not detected +./examples/using_dune/wrapped_lib/obj/with_class.mli:1: unused#unused +./examples/using_dune/wrapped_lib/obj/with_class.mli:5: basics#never_used_fun +./examples/using_dune/wrapped_lib/obj/with_class.mli:5: basics#never_used_int +./examples/using_dune/wrapped_lib/obj/with_class.mli:23: unused_fun_class#unused +./examples/using_dune/wrapped_lib/obj/with_class.mli:25: fun_class#unused +./examples/using_dune/wrapped_lib/obj/with_class.mli:35: _self_used#unused +./examples/using_dune/wrapped_lib/obj/with_class.mli:41: _self_used_fun_class#unused +./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#unused_fun +./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#unused_int +./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#unused_fun +./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#unused_int +./examples/using_dune/wrapped_lib/obj/without_class.mli:22: _self_used_immediate#unused_fun +./examples/using_dune/wrapped_lib/obj/without_class.mli:22: _self_used_immediate#unused_int +./examples/using_dune/wrapped_lib/obj/without_class.mli:28: _self_used_factory#unused_fun +./examples/using_dune/wrapped_lib/obj/without_class.mli:28: _self_used_factory#unused_int + ./examples/using_make/obj/class.mli:1: c#h ./examples/using_make/obj/class_type.mli:9: c#h ./examples/using_make/obj/coerce.mli:6: p#f @@ -184,32 +187,33 @@ Nothing else to report in this section ./examples/using_dune/unwrapped_lib/constructors_and_records/records.mli:43: partially_used_mix_2.partially_used_param ./examples/using_dune/unwrapped_lib/constructors_and_records/records.mli:47: partially_used_in_match.partially_used_in_match_unit -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:1: unused_single_no_param.Unused_single_no_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:2: unused_single_unit.Unused_single_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:3: unused_single_param.Unused_single_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:5: unused_mix.Unused_no_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:6: unused_mix.Unused_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:7: unused_mix.Unused_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:9: matched_single_no_param.Matched_single_no_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:10: matched_single_unit.Matched_single_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:11: matched_single_param.Matched_single_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:13: matched_mix.Matched_no_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:14: matched_mix.Matched_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:15: matched_mix.Matched_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:42: partially_used_mix_1.Partially_used_no_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:48: partially_used_mix_2.Partially_used_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:54: partially_used_mix_3.Partially_used_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:1: unused_single_unit.unused_single_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:2: unused_single_param.unused_single_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:4: unused_mix.unused_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:5: unused_mix.unused_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:8: written_single_unit.written_single_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:9: written_single_param.written_single_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:11: written_mix.written_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:12: written_mix.written_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:37: partially_used_mix_1.partially_used_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:43: partially_used_mix_2.partially_used_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:47: partially_used_in_match.partially_used_in_match_unit: Not detected +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:1: unused_single_no_param.Unused_single_no_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:2: unused_single_unit.Unused_single_unit +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:3: unused_single_param.Unused_single_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:5: unused_mix.Unused_no_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:6: unused_mix.Unused_unit +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:7: unused_mix.Unused_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:9: matched_single_no_param.Matched_single_no_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:10: matched_single_unit.Matched_single_unit +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:11: matched_single_param.Matched_single_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:13: matched_mix.Matched_no_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:14: matched_mix.Matched_unit +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:15: matched_mix.Matched_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:42: partially_used_mix_1.Partially_used_no_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:48: partially_used_mix_2.Partially_used_unit +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:54: partially_used_mix_3.Partially_used_param +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:1: unused_single_unit.unused_single_unit +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:2: unused_single_param.unused_single_param +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:4: unused_mix.unused_unit +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:5: unused_mix.unused_param +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:8: written_single_unit.written_single_unit +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:9: written_single_param.written_single_param +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:11: written_mix.written_unit +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:12: written_mix.written_param +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:37: partially_used_mix_1.partially_used_unit +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:43: partially_used_mix_2.partially_used_param +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:47: partially_used_in_match.partially_used_in_match_unit + ./examples/using_make/record.mli:3: t0.unused ./examples/using_make/record.mli:4: t0.f ./examples/using_make/record.mli:10: X.t.unused @@ -497,6 +501,6 @@ Nothing else to report in this section Total: 433 -Success: 374 -Failed: 59 -Ratio: 86.3741339492% +Success: 433 +Failed: 0 +Ratio: 100.% diff --git a/check/internal/internal.ref b/check/internal/internal.ref index d5e609e..41bf452 100644 --- a/check/internal/internal.ref +++ b/check/internal/internal.ref @@ -13,17 +13,19 @@ ./examples/using_dune/unwrapped_lib/values/values_no_intf.ml:20: unused_alias_fun ./examples/using_dune/unwrapped_lib/values/values_no_intf.ml:25: unused_closure -./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:1: unused_fun_with_single_never_used_opt_arg: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:2: unused_int: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:14: unused_fun: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:20: unused_alias_fun: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:25: unused_closure: Not detected -./examples/using_dune/wrapped_lib/values/values_in_submodules.mli:3: Exported.unused_int: Not detected -./examples/using_dune/wrapped_lib/values/values_in_submodules_no_intf.ml:3: Exported.unused_int: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:2: unused_int: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:13: unused_fun: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:20: unused_alias_fun: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:25: unused_closure: Not detected +./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:1: unused_fun_with_single_never_used_opt_arg + +./examples/using_dune/wrapped_lib/values/values.mli:2: unused_int +./examples/using_dune/wrapped_lib/values/values.mli:14: unused_fun +./examples/using_dune/wrapped_lib/values/values.mli:20: unused_alias_fun +./examples/using_dune/wrapped_lib/values/values.mli:25: unused_closure +./examples/using_dune/wrapped_lib/values/values_in_submodules.mli:3: Exported.unused_int +./examples/using_dune/wrapped_lib/values/values_in_submodules_no_intf.ml:3: Exported.unused_int +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:2: unused_int +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:13: unused_fun +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:20: unused_alias_fun +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:25: unused_closure + ./examples/using_make/advanced/inc_val.mli:1: x ./examples/using_make/advanced/inc_val.mli:2: y @@ -84,21 +86,22 @@ Nothing else to report in this section ./examples/using_dune/unwrapped_lib/obj/without_class.mli:28: _self_used_factory#unused_fun ./examples/using_dune/unwrapped_lib/obj/without_class.mli:28: _self_used_factory#unused_int -./examples/using_dune/wrapped_lib/obj/with_class.mli:1: unused#unused: Not detected -./examples/using_dune/wrapped_lib/obj/with_class.mli:5: basics#never_used_fun: Not detected -./examples/using_dune/wrapped_lib/obj/with_class.mli:5: basics#never_used_int: Not detected -./examples/using_dune/wrapped_lib/obj/with_class.mli:23: unused_fun_class#unused: Not detected -./examples/using_dune/wrapped_lib/obj/with_class.mli:25: fun_class#unused: Not detected -./examples/using_dune/wrapped_lib/obj/with_class.mli:35: _self_used#unused: Not detected -./examples/using_dune/wrapped_lib/obj/with_class.mli:41: _self_used_fun_class#unused: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#unused_fun: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#unused_int: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#unused_fun: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#unused_int: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:22: _self_used_immediate#unused_fun: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:22: _self_used_immediate#unused_int: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:28: _self_used_factory#unused_fun: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:28: _self_used_factory#unused_int: Not detected +./examples/using_dune/wrapped_lib/obj/with_class.mli:1: unused#unused +./examples/using_dune/wrapped_lib/obj/with_class.mli:5: basics#never_used_fun +./examples/using_dune/wrapped_lib/obj/with_class.mli:5: basics#never_used_int +./examples/using_dune/wrapped_lib/obj/with_class.mli:23: unused_fun_class#unused +./examples/using_dune/wrapped_lib/obj/with_class.mli:25: fun_class#unused +./examples/using_dune/wrapped_lib/obj/with_class.mli:35: _self_used#unused +./examples/using_dune/wrapped_lib/obj/with_class.mli:41: _self_used_fun_class#unused +./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#unused_fun +./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#unused_int +./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#unused_fun +./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#unused_int +./examples/using_dune/wrapped_lib/obj/without_class.mli:22: _self_used_immediate#unused_fun +./examples/using_dune/wrapped_lib/obj/without_class.mli:22: _self_used_immediate#unused_int +./examples/using_dune/wrapped_lib/obj/without_class.mli:28: _self_used_factory#unused_fun +./examples/using_dune/wrapped_lib/obj/without_class.mli:28: _self_used_factory#unused_int + ./examples/using_make/obj/class.mli:1: c#h ./examples/using_make/obj/class_type.mli:9: c#h ./examples/using_make/obj/coerce.mli:6: p#f @@ -153,32 +156,33 @@ Nothing else to report in this section ./examples/using_dune/unwrapped_lib/constructors_and_records/records.mli:43: partially_used_mix_2.partially_used_param ./examples/using_dune/unwrapped_lib/constructors_and_records/records.mli:47: partially_used_in_match.partially_used_in_match_unit -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:1: unused_single_no_param.Unused_single_no_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:2: unused_single_unit.Unused_single_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:3: unused_single_param.Unused_single_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:5: unused_mix.Unused_no_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:6: unused_mix.Unused_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:7: unused_mix.Unused_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:9: matched_single_no_param.Matched_single_no_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:10: matched_single_unit.Matched_single_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:11: matched_single_param.Matched_single_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:13: matched_mix.Matched_no_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:14: matched_mix.Matched_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:15: matched_mix.Matched_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:42: partially_used_mix_1.Partially_used_no_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:48: partially_used_mix_2.Partially_used_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:54: partially_used_mix_3.Partially_used_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:1: unused_single_unit.unused_single_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:2: unused_single_param.unused_single_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:4: unused_mix.unused_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:5: unused_mix.unused_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:8: written_single_unit.written_single_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:9: written_single_param.written_single_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:11: written_mix.written_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:12: written_mix.written_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:37: partially_used_mix_1.partially_used_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:43: partially_used_mix_2.partially_used_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:47: partially_used_in_match.partially_used_in_match_unit: Not detected +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:1: unused_single_no_param.Unused_single_no_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:2: unused_single_unit.Unused_single_unit +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:3: unused_single_param.Unused_single_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:5: unused_mix.Unused_no_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:6: unused_mix.Unused_unit +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:7: unused_mix.Unused_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:9: matched_single_no_param.Matched_single_no_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:10: matched_single_unit.Matched_single_unit +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:11: matched_single_param.Matched_single_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:13: matched_mix.Matched_no_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:14: matched_mix.Matched_unit +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:15: matched_mix.Matched_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:42: partially_used_mix_1.Partially_used_no_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:48: partially_used_mix_2.Partially_used_unit +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:54: partially_used_mix_3.Partially_used_param +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:1: unused_single_unit.unused_single_unit +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:2: unused_single_param.unused_single_param +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:4: unused_mix.unused_unit +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:5: unused_mix.unused_param +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:8: written_single_unit.written_single_unit +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:9: written_single_param.written_single_param +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:11: written_mix.written_unit +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:12: written_mix.written_param +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:37: partially_used_mix_1.partially_used_unit +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:43: partially_used_mix_2.partially_used_param +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:47: partially_used_in_match.partially_used_in_match_unit + ./examples/using_make/record.mli:3: t0.unused ./examples/using_make/record.mli:4: t0.f ./examples/using_make/record.mli:10: X.t.unused @@ -466,6 +470,6 @@ Nothing else to report in this section Total: 404 -Success: 352 -Failed: 52 -Ratio: 87.1287128713% +Success: 404 +Failed: 0 +Ratio: 100.% diff --git a/check/threshold-1/threshold-1.ref b/check/threshold-1/threshold-1.ref index 18850a9..8b9b5f1 100644 --- a/check/threshold-1/threshold-1.ref +++ b/check/threshold-1/threshold-1.ref @@ -13,17 +13,19 @@ ./examples/using_dune/unwrapped_lib/values/values_no_intf.ml:20: unused_alias_fun ./examples/using_dune/unwrapped_lib/values/values_no_intf.ml:25: unused_closure -./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:1: unused_fun_with_single_never_used_opt_arg: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:2: unused_int: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:14: unused_fun: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:20: unused_alias_fun: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:25: unused_closure: Not detected -./examples/using_dune/wrapped_lib/values/values_in_submodules.mli:3: Exported.unused_int: Not detected -./examples/using_dune/wrapped_lib/values/values_in_submodules_no_intf.ml:3: Exported.unused_int: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:2: unused_int: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:13: unused_fun: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:20: unused_alias_fun: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:25: unused_closure: Not detected +./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:1: unused_fun_with_single_never_used_opt_arg + +./examples/using_dune/wrapped_lib/values/values.mli:2: unused_int +./examples/using_dune/wrapped_lib/values/values.mli:14: unused_fun +./examples/using_dune/wrapped_lib/values/values.mli:20: unused_alias_fun +./examples/using_dune/wrapped_lib/values/values.mli:25: unused_closure +./examples/using_dune/wrapped_lib/values/values_in_submodules.mli:3: Exported.unused_int +./examples/using_dune/wrapped_lib/values/values_in_submodules_no_intf.ml:3: Exported.unused_int +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:2: unused_int +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:13: unused_fun +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:20: unused_alias_fun +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:25: unused_closure + ./examples/using_make/advanced/inc_val.mli:1: x ./examples/using_make/advanced/inc_val.mli:2: y @@ -80,18 +82,18 @@ ./examples/using_dune/bin/use_unwrapped_lib/use_with_class.mli:1: mark_used ./examples/using_dune/bin/use_unwrapped_lib/use_without_class.mli:1: mark_used -./examples/using_dune/bin/use_wrapped_lib/use_constructors.mli:1: mark_used: Not detected -./examples/using_dune/bin/use_wrapped_lib/use_mixed_args.mli:1: mark_used: Not detected -./examples/using_dune/bin/use_wrapped_lib/use_opt_args.mli:1: mark_used: Not detected -./examples/using_dune/bin/use_wrapped_lib/use_opt_args_in_higher_order_fun.mli:1: mark_used: Not detected -./examples/using_dune/bin/use_wrapped_lib/use_records.mli:1: mark_used: Not detected -./examples/using_dune/bin/use_wrapped_lib/use_style.mli:1: mark_used: Not detected -./examples/using_dune/bin/use_wrapped_lib/use_values.mli:1: mark_used: Not detected -./examples/using_dune/bin/use_wrapped_lib/use_values_in_submodules.mli:1: mark_used: Not detected -./examples/using_dune/bin/use_wrapped_lib/use_values_in_submodules_no_intf.mli:1: mark_used: Not detected -./examples/using_dune/bin/use_wrapped_lib/use_values_no_intf.mli:1: mark_used: Not detected -./examples/using_dune/bin/use_wrapped_lib/use_with_class.mli:1: mark_used: Not detected -./examples/using_dune/bin/use_wrapped_lib/use_without_class.mli:1: mark_used: Not detected +./examples/using_dune/bin/use_wrapped_lib/use_constructors.mli:1: mark_used +./examples/using_dune/bin/use_wrapped_lib/use_mixed_args.mli:1: mark_used +./examples/using_dune/bin/use_wrapped_lib/use_opt_args.mli:1: mark_used +./examples/using_dune/bin/use_wrapped_lib/use_opt_args_in_higher_order_fun.mli:1: mark_used +./examples/using_dune/bin/use_wrapped_lib/use_records.mli:1: mark_used +./examples/using_dune/bin/use_wrapped_lib/use_style.mli:1: mark_used +./examples/using_dune/bin/use_wrapped_lib/use_values.mli:1: mark_used +./examples/using_dune/bin/use_wrapped_lib/use_values_in_submodules.mli:1: mark_used +./examples/using_dune/bin/use_wrapped_lib/use_values_in_submodules_no_intf.mli:1: mark_used +./examples/using_dune/bin/use_wrapped_lib/use_values_no_intf.mli:1: mark_used +./examples/using_dune/bin/use_wrapped_lib/use_with_class.mli:1: mark_used +./examples/using_dune/bin/use_wrapped_lib/use_without_class.mli:1: mark_used ./examples/using_dune/bin/use_wrapped_lib/use_wrapped_lib.mli:1: mark_used ./examples/using_dune/unwrapped_lib/opt_args/opt_args.mli:8: internally_used_fun_with_single_never_used_opt_arg @@ -132,41 +134,44 @@ ./examples/using_dune/unwrapped_lib/values/values_no_intf.ml:27: internally_used_closure ./examples/using_dune/unwrapped_lib/values/values_no_intf.ml:28: externally_used_closure -./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:8: internally_used_fun_with_single_never_used_opt_arg: Not detected -./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:10: internally_used_fun_with_single_always_used_opt_arg: Not detected -./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:14: externally_used_fun_with_single_never_used_opt_arg: Not detected -./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:16: externally_used_fun_with_single_always_used_opt_arg: Not detected -./examples/using_dune/wrapped_lib/style/style.ml:1: all: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:3: internally_used_int: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:4: externally_used_int: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:5: externally_used_as_parameter_int: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:7: externally_written_bool_ref: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:8: externally_matched_option: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:10: externally_stored_in_ref_bool: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:11: externally_stored_in_option_bool: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:15: internally_used_fun: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:16: externally_used_fun: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:17: externally_used_as_parameter_fun: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:21: externally_used_alias_fun: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:26: internally_used_closure: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:27: externally_used_closure: Not detected -./examples/using_dune/wrapped_lib/values/values_in_submodules.mli:4: Exported.internally_used_int: Not detected -./examples/using_dune/wrapped_lib/values/values_in_submodules.mli:5: Exported.externally_used_int: Not detected -./examples/using_dune/wrapped_lib/values/values_in_submodules_no_intf.ml:4: Exported.internally_used_int: Not detected -./examples/using_dune/wrapped_lib/values/values_in_submodules_no_intf.ml:5: Exported.externally_used_int: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:3: internally_used_int: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:4: externally_used_int: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:5: externally_used_as_parameter_int: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:7: externally_written_bool_ref: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:8: externally_matched_option: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:10: externally_stored_in_ref_bool: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:11: externally_stored_in_option_bool: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:15: internally_used_fun: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:16: externally_used_fun: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:17: externally_used_as_parameter_fun: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:22: externally_used_alias_fun: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:27: internally_used_closure: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:28: externally_used_closure: Not detected +./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:8: internally_used_fun_with_single_never_used_opt_arg +./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:10: internally_used_fun_with_single_always_used_opt_arg +./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:14: externally_used_fun_with_single_never_used_opt_arg +./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:16: externally_used_fun_with_single_always_used_opt_arg + +./examples/using_dune/wrapped_lib/style/style.ml:1: all + +./examples/using_dune/wrapped_lib/values/values.mli:3: internally_used_int +./examples/using_dune/wrapped_lib/values/values.mli:4: externally_used_int +./examples/using_dune/wrapped_lib/values/values.mli:5: externally_used_as_parameter_int +./examples/using_dune/wrapped_lib/values/values.mli:7: externally_written_bool_ref +./examples/using_dune/wrapped_lib/values/values.mli:8: externally_matched_option +./examples/using_dune/wrapped_lib/values/values.mli:10: externally_stored_in_ref_bool +./examples/using_dune/wrapped_lib/values/values.mli:11: externally_stored_in_option_bool +./examples/using_dune/wrapped_lib/values/values.mli:15: internally_used_fun +./examples/using_dune/wrapped_lib/values/values.mli:16: externally_used_fun +./examples/using_dune/wrapped_lib/values/values.mli:17: externally_used_as_parameter_fun +./examples/using_dune/wrapped_lib/values/values.mli:21: externally_used_alias_fun +./examples/using_dune/wrapped_lib/values/values.mli:26: internally_used_closure +./examples/using_dune/wrapped_lib/values/values.mli:27: externally_used_closure +./examples/using_dune/wrapped_lib/values/values_in_submodules.mli:4: Exported.internally_used_int +./examples/using_dune/wrapped_lib/values/values_in_submodules.mli:5: Exported.externally_used_int +./examples/using_dune/wrapped_lib/values/values_in_submodules_no_intf.ml:4: Exported.internally_used_int +./examples/using_dune/wrapped_lib/values/values_in_submodules_no_intf.ml:5: Exported.externally_used_int +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:3: internally_used_int +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:4: externally_used_int +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:5: externally_used_as_parameter_int +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:7: externally_written_bool_ref +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:8: externally_matched_option +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:10: externally_stored_in_ref_bool +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:11: externally_stored_in_option_bool +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:15: internally_used_fun +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:16: externally_used_fun +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:17: externally_used_as_parameter_fun +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:22: externally_used_alias_fun +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:27: internally_used_closure +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:28: externally_used_closure + ./examples/using_make/advanced/incl.ml:7: f ./examples/using_make/advanced/mod.mli:1: f ./examples/using_make/advanced/mod.mli:2: x @@ -240,21 +245,22 @@ Nothing else to report in this section ./examples/using_dune/unwrapped_lib/obj/without_class.mli:28: _self_used_factory#unused_fun ./examples/using_dune/unwrapped_lib/obj/without_class.mli:28: _self_used_factory#unused_int -./examples/using_dune/wrapped_lib/obj/with_class.mli:1: unused#unused: Not detected -./examples/using_dune/wrapped_lib/obj/with_class.mli:5: basics#never_used_fun: Not detected -./examples/using_dune/wrapped_lib/obj/with_class.mli:5: basics#never_used_int: Not detected -./examples/using_dune/wrapped_lib/obj/with_class.mli:23: unused_fun_class#unused: Not detected -./examples/using_dune/wrapped_lib/obj/with_class.mli:25: fun_class#unused: Not detected -./examples/using_dune/wrapped_lib/obj/with_class.mli:35: _self_used#unused: Not detected -./examples/using_dune/wrapped_lib/obj/with_class.mli:41: _self_used_fun_class#unused: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#unused_fun: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#unused_int: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#unused_fun: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#unused_int: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:22: _self_used_immediate#unused_fun: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:22: _self_used_immediate#unused_int: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:28: _self_used_factory#unused_fun: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:28: _self_used_factory#unused_int: Not detected +./examples/using_dune/wrapped_lib/obj/with_class.mli:1: unused#unused +./examples/using_dune/wrapped_lib/obj/with_class.mli:5: basics#never_used_fun +./examples/using_dune/wrapped_lib/obj/with_class.mli:5: basics#never_used_int +./examples/using_dune/wrapped_lib/obj/with_class.mli:23: unused_fun_class#unused +./examples/using_dune/wrapped_lib/obj/with_class.mli:25: fun_class#unused +./examples/using_dune/wrapped_lib/obj/with_class.mli:35: _self_used#unused +./examples/using_dune/wrapped_lib/obj/with_class.mli:41: _self_used_fun_class#unused +./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#unused_fun +./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#unused_int +./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#unused_fun +./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#unused_int +./examples/using_dune/wrapped_lib/obj/without_class.mli:22: _self_used_immediate#unused_fun +./examples/using_dune/wrapped_lib/obj/without_class.mli:22: _self_used_immediate#unused_int +./examples/using_dune/wrapped_lib/obj/without_class.mli:28: _self_used_factory#unused_fun +./examples/using_dune/wrapped_lib/obj/without_class.mli:28: _self_used_factory#unused_int + ./examples/using_make/obj/class.mli:1: c#h ./examples/using_make/obj/class_type.mli:9: c#h ./examples/using_make/obj/coerce.mli:6: p#f @@ -295,20 +301,21 @@ Nothing else to report in this section ./examples/using_dune/unwrapped_lib/obj/without_class.mli:28: _self_used_factory#used_fun ./examples/using_dune/unwrapped_lib/obj/without_class.mli:28: _self_used_factory#used_int -./examples/using_dune/wrapped_lib/obj/with_class.mli:35: _self_used#used: Not detected -./examples/using_dune/wrapped_lib/obj/with_class.mli:41: _self_used_fun_class#used: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#externally_used_fun: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#externally_used_int: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#internally_used_fun: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#internally_used_int: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#externally_used_fun: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#externally_used_int: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#internally_used_fun: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#internally_used_int: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:22: _self_used_immediate#used_fun: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:22: _self_used_immediate#used_int: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:28: _self_used_factory#used_fun: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:28: _self_used_factory#used_int: Not detected +./examples/using_dune/wrapped_lib/obj/with_class.mli:35: _self_used#used +./examples/using_dune/wrapped_lib/obj/with_class.mli:41: _self_used_fun_class#used +./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#externally_used_fun +./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#externally_used_int +./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#internally_used_fun +./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#internally_used_int +./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#externally_used_fun +./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#externally_used_int +./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#internally_used_fun +./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#internally_used_int +./examples/using_dune/wrapped_lib/obj/without_class.mli:22: _self_used_immediate#used_fun +./examples/using_dune/wrapped_lib/obj/without_class.mli:22: _self_used_immediate#used_int +./examples/using_dune/wrapped_lib/obj/without_class.mli:28: _self_used_factory#used_fun +./examples/using_dune/wrapped_lib/obj/without_class.mli:28: _self_used_factory#used_int + ./examples/using_make/advanced/func.mli:3: M.c#f ./examples/using_make/advanced/mod.mli:4: p#f @@ -369,32 +376,33 @@ Nothing else to report in this section ./examples/using_dune/unwrapped_lib/constructors_and_records/records.mli:43: partially_used_mix_2.partially_used_param ./examples/using_dune/unwrapped_lib/constructors_and_records/records.mli:47: partially_used_in_match.partially_used_in_match_unit -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:1: unused_single_no_param.Unused_single_no_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:2: unused_single_unit.Unused_single_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:3: unused_single_param.Unused_single_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:5: unused_mix.Unused_no_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:6: unused_mix.Unused_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:7: unused_mix.Unused_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:9: matched_single_no_param.Matched_single_no_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:10: matched_single_unit.Matched_single_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:11: matched_single_param.Matched_single_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:13: matched_mix.Matched_no_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:14: matched_mix.Matched_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:15: matched_mix.Matched_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:42: partially_used_mix_1.Partially_used_no_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:48: partially_used_mix_2.Partially_used_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:54: partially_used_mix_3.Partially_used_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:1: unused_single_unit.unused_single_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:2: unused_single_param.unused_single_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:4: unused_mix.unused_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:5: unused_mix.unused_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:8: written_single_unit.written_single_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:9: written_single_param.written_single_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:11: written_mix.written_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:12: written_mix.written_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:37: partially_used_mix_1.partially_used_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:43: partially_used_mix_2.partially_used_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:47: partially_used_in_match.partially_used_in_match_unit: Not detected +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:1: unused_single_no_param.Unused_single_no_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:2: unused_single_unit.Unused_single_unit +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:3: unused_single_param.Unused_single_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:5: unused_mix.Unused_no_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:6: unused_mix.Unused_unit +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:7: unused_mix.Unused_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:9: matched_single_no_param.Matched_single_no_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:10: matched_single_unit.Matched_single_unit +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:11: matched_single_param.Matched_single_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:13: matched_mix.Matched_no_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:14: matched_mix.Matched_unit +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:15: matched_mix.Matched_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:42: partially_used_mix_1.Partially_used_no_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:48: partially_used_mix_2.Partially_used_unit +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:54: partially_used_mix_3.Partially_used_param +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:1: unused_single_unit.unused_single_unit +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:2: unused_single_param.unused_single_param +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:4: unused_mix.unused_unit +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:5: unused_mix.unused_param +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:8: written_single_unit.written_single_unit +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:9: written_single_param.written_single_param +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:11: written_mix.written_unit +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:12: written_mix.written_param +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:37: partially_used_mix_1.partially_used_unit +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:43: partially_used_mix_2.partially_used_param +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:47: partially_used_in_match.partially_used_in_match_unit + ./examples/using_make/record.mli:3: t0.unused ./examples/using_make/record.mli:4: t0.f ./examples/using_make/record.mli:10: X.t.unused @@ -433,32 +441,33 @@ Nothing else to report in this section ./examples/using_dune/unwrapped_lib/constructors_and_records/records.mli:32: externally_used_mix.externally_used_unit ./examples/using_dune/unwrapped_lib/constructors_and_records/records.mli:33: externally_used_mix.externally_used_param -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:25: internally_used_single_no_param.Internally_used_single_no_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:26: internally_used_single_unit.Internally_used_single_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:27: internally_used_single_param.Internally_used_single_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:29: internally_used_mix.Internally_used_no_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:30: internally_used_mix.Internally_used_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:31: internally_used_mix.Internally_used_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:33: externally_used_single_no_param.Externally_used_single_no_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:34: externally_used_single_unit.Externally_used_single_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:35: externally_used_single_param.Externally_used_single_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:37: externally_used_mix.Externally_used_no_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:38: externally_used_mix.Externally_used_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:39: externally_used_mix.Externally_used_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:43: partially_used_mix_1.Partially_used_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:44: partially_used_mix_1.Partially_used_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:47: partially_used_mix_2.Partially_used_no_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:49: partially_used_mix_2.Partially_used_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:52: partially_used_mix_3.Partially_used_no_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:53: partially_used_mix_3.Partially_used_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:22: internally_used_single_unit.internally_used_single_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:23: internally_used_single_param.internally_used_single_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:25: internally_used_mix.internally_used_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:26: internally_used_mix.internally_used_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:29: externally_used_single_unit.externally_used_single_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:30: externally_used_single_param.externally_used_single_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:32: externally_used_mix.externally_used_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:33: externally_used_mix.externally_used_param: Not detected +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:25: internally_used_single_no_param.Internally_used_single_no_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:26: internally_used_single_unit.Internally_used_single_unit +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:27: internally_used_single_param.Internally_used_single_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:29: internally_used_mix.Internally_used_no_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:30: internally_used_mix.Internally_used_unit +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:31: internally_used_mix.Internally_used_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:33: externally_used_single_no_param.Externally_used_single_no_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:34: externally_used_single_unit.Externally_used_single_unit +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:35: externally_used_single_param.Externally_used_single_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:37: externally_used_mix.Externally_used_no_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:38: externally_used_mix.Externally_used_unit +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:39: externally_used_mix.Externally_used_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:43: partially_used_mix_1.Partially_used_unit +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:44: partially_used_mix_1.Partially_used_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:47: partially_used_mix_2.Partially_used_no_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:49: partially_used_mix_2.Partially_used_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:52: partially_used_mix_3.Partially_used_no_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:53: partially_used_mix_3.Partially_used_unit +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:22: internally_used_single_unit.internally_used_single_unit +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:23: internally_used_single_param.internally_used_single_param +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:25: internally_used_mix.internally_used_unit +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:26: internally_used_mix.internally_used_param +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:29: externally_used_single_unit.externally_used_single_unit +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:30: externally_used_single_param.externally_used_single_param +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:32: externally_used_mix.externally_used_unit +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:33: externally_used_mix.externally_used_param + ./examples/using_make/record.mli:11: X.t.used ./examples/using_make/record.mli:18: t2.r ./examples/using_make/variant.mli:1: v.Used @@ -744,6 +753,6 @@ Nothing else to report in this section Total: 654 -Success: 515 -Failed: 139 -Ratio: 78.74617737% +Success: 654 +Failed: 0 +Ratio: 100.% diff --git a/check/threshold-3-0.5/threshold-3-0.5.ref b/check/threshold-3-0.5/threshold-3-0.5.ref index 26b021e..c6683b2 100644 --- a/check/threshold-3-0.5/threshold-3-0.5.ref +++ b/check/threshold-3-0.5/threshold-3-0.5.ref @@ -13,17 +13,19 @@ ./examples/using_dune/unwrapped_lib/values/values_no_intf.ml:20: unused_alias_fun ./examples/using_dune/unwrapped_lib/values/values_no_intf.ml:25: unused_closure -./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:1: unused_fun_with_single_never_used_opt_arg: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:2: unused_int: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:14: unused_fun: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:20: unused_alias_fun: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:25: unused_closure: Not detected -./examples/using_dune/wrapped_lib/values/values_in_submodules.mli:3: Exported.unused_int: Not detected -./examples/using_dune/wrapped_lib/values/values_in_submodules_no_intf.ml:3: Exported.unused_int: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:2: unused_int: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:13: unused_fun: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:20: unused_alias_fun: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:25: unused_closure: Not detected +./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:1: unused_fun_with_single_never_used_opt_arg + +./examples/using_dune/wrapped_lib/values/values.mli:2: unused_int +./examples/using_dune/wrapped_lib/values/values.mli:14: unused_fun +./examples/using_dune/wrapped_lib/values/values.mli:20: unused_alias_fun +./examples/using_dune/wrapped_lib/values/values.mli:25: unused_closure +./examples/using_dune/wrapped_lib/values/values_in_submodules.mli:3: Exported.unused_int +./examples/using_dune/wrapped_lib/values/values_in_submodules_no_intf.ml:3: Exported.unused_int +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:2: unused_int +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:13: unused_fun +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:20: unused_alias_fun +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:25: unused_closure + ./examples/using_make/advanced/inc_val.mli:1: x ./examples/using_make/advanced/inc_val.mli:2: y @@ -80,18 +82,18 @@ ./examples/using_dune/bin/use_unwrapped_lib/use_with_class.mli:1: mark_used ./examples/using_dune/bin/use_unwrapped_lib/use_without_class.mli:1: mark_used -./examples/using_dune/bin/use_wrapped_lib/use_constructors.mli:1: mark_used: Not detected -./examples/using_dune/bin/use_wrapped_lib/use_mixed_args.mli:1: mark_used: Not detected -./examples/using_dune/bin/use_wrapped_lib/use_opt_args.mli:1: mark_used: Not detected -./examples/using_dune/bin/use_wrapped_lib/use_opt_args_in_higher_order_fun.mli:1: mark_used: Not detected -./examples/using_dune/bin/use_wrapped_lib/use_records.mli:1: mark_used: Not detected -./examples/using_dune/bin/use_wrapped_lib/use_style.mli:1: mark_used: Not detected -./examples/using_dune/bin/use_wrapped_lib/use_values.mli:1: mark_used: Not detected -./examples/using_dune/bin/use_wrapped_lib/use_values_in_submodules.mli:1: mark_used: Not detected -./examples/using_dune/bin/use_wrapped_lib/use_values_in_submodules_no_intf.mli:1: mark_used: Not detected -./examples/using_dune/bin/use_wrapped_lib/use_values_no_intf.mli:1: mark_used: Not detected -./examples/using_dune/bin/use_wrapped_lib/use_with_class.mli:1: mark_used: Not detected -./examples/using_dune/bin/use_wrapped_lib/use_without_class.mli:1: mark_used: Not detected +./examples/using_dune/bin/use_wrapped_lib/use_constructors.mli:1: mark_used +./examples/using_dune/bin/use_wrapped_lib/use_mixed_args.mli:1: mark_used +./examples/using_dune/bin/use_wrapped_lib/use_opt_args.mli:1: mark_used +./examples/using_dune/bin/use_wrapped_lib/use_opt_args_in_higher_order_fun.mli:1: mark_used +./examples/using_dune/bin/use_wrapped_lib/use_records.mli:1: mark_used +./examples/using_dune/bin/use_wrapped_lib/use_style.mli:1: mark_used +./examples/using_dune/bin/use_wrapped_lib/use_values.mli:1: mark_used +./examples/using_dune/bin/use_wrapped_lib/use_values_in_submodules.mli:1: mark_used +./examples/using_dune/bin/use_wrapped_lib/use_values_in_submodules_no_intf.mli:1: mark_used +./examples/using_dune/bin/use_wrapped_lib/use_values_no_intf.mli:1: mark_used +./examples/using_dune/bin/use_wrapped_lib/use_with_class.mli:1: mark_used +./examples/using_dune/bin/use_wrapped_lib/use_without_class.mli:1: mark_used ./examples/using_dune/bin/use_wrapped_lib/use_wrapped_lib.mli:1: mark_used ./examples/using_dune/unwrapped_lib/opt_args/opt_args.mli:8: internally_used_fun_with_single_never_used_opt_arg @@ -132,41 +134,44 @@ ./examples/using_dune/unwrapped_lib/values/values_no_intf.ml:27: internally_used_closure ./examples/using_dune/unwrapped_lib/values/values_no_intf.ml:28: externally_used_closure -./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:8: internally_used_fun_with_single_never_used_opt_arg: Not detected -./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:10: internally_used_fun_with_single_always_used_opt_arg: Not detected -./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:14: externally_used_fun_with_single_never_used_opt_arg: Not detected -./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:16: externally_used_fun_with_single_always_used_opt_arg: Not detected -./examples/using_dune/wrapped_lib/style/style.ml:1: all: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:3: internally_used_int: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:4: externally_used_int: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:5: externally_used_as_parameter_int: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:7: externally_written_bool_ref: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:8: externally_matched_option: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:10: externally_stored_in_ref_bool: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:11: externally_stored_in_option_bool: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:15: internally_used_fun: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:16: externally_used_fun: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:17: externally_used_as_parameter_fun: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:21: externally_used_alias_fun: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:26: internally_used_closure: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:27: externally_used_closure: Not detected -./examples/using_dune/wrapped_lib/values/values_in_submodules.mli:4: Exported.internally_used_int: Not detected -./examples/using_dune/wrapped_lib/values/values_in_submodules.mli:5: Exported.externally_used_int: Not detected -./examples/using_dune/wrapped_lib/values/values_in_submodules_no_intf.ml:4: Exported.internally_used_int: Not detected -./examples/using_dune/wrapped_lib/values/values_in_submodules_no_intf.ml:5: Exported.externally_used_int: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:3: internally_used_int: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:4: externally_used_int: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:5: externally_used_as_parameter_int: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:7: externally_written_bool_ref: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:8: externally_matched_option: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:10: externally_stored_in_ref_bool: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:11: externally_stored_in_option_bool: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:15: internally_used_fun: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:16: externally_used_fun: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:17: externally_used_as_parameter_fun: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:22: externally_used_alias_fun: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:27: internally_used_closure: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:28: externally_used_closure: Not detected +./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:8: internally_used_fun_with_single_never_used_opt_arg +./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:10: internally_used_fun_with_single_always_used_opt_arg +./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:14: externally_used_fun_with_single_never_used_opt_arg +./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:16: externally_used_fun_with_single_always_used_opt_arg + +./examples/using_dune/wrapped_lib/style/style.ml:1: all + +./examples/using_dune/wrapped_lib/values/values.mli:3: internally_used_int +./examples/using_dune/wrapped_lib/values/values.mli:4: externally_used_int +./examples/using_dune/wrapped_lib/values/values.mli:5: externally_used_as_parameter_int +./examples/using_dune/wrapped_lib/values/values.mli:7: externally_written_bool_ref +./examples/using_dune/wrapped_lib/values/values.mli:8: externally_matched_option +./examples/using_dune/wrapped_lib/values/values.mli:10: externally_stored_in_ref_bool +./examples/using_dune/wrapped_lib/values/values.mli:11: externally_stored_in_option_bool +./examples/using_dune/wrapped_lib/values/values.mli:15: internally_used_fun +./examples/using_dune/wrapped_lib/values/values.mli:16: externally_used_fun +./examples/using_dune/wrapped_lib/values/values.mli:17: externally_used_as_parameter_fun +./examples/using_dune/wrapped_lib/values/values.mli:21: externally_used_alias_fun +./examples/using_dune/wrapped_lib/values/values.mli:26: internally_used_closure +./examples/using_dune/wrapped_lib/values/values.mli:27: externally_used_closure +./examples/using_dune/wrapped_lib/values/values_in_submodules.mli:4: Exported.internally_used_int +./examples/using_dune/wrapped_lib/values/values_in_submodules.mli:5: Exported.externally_used_int +./examples/using_dune/wrapped_lib/values/values_in_submodules_no_intf.ml:4: Exported.internally_used_int +./examples/using_dune/wrapped_lib/values/values_in_submodules_no_intf.ml:5: Exported.externally_used_int +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:3: internally_used_int +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:4: externally_used_int +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:5: externally_used_as_parameter_int +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:7: externally_written_bool_ref +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:8: externally_matched_option +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:10: externally_stored_in_ref_bool +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:11: externally_stored_in_option_bool +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:15: internally_used_fun +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:16: externally_used_fun +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:17: externally_used_as_parameter_fun +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:22: externally_used_alias_fun +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:27: internally_used_closure +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:28: externally_used_closure + ./examples/using_make/advanced/incl.ml:7: f ./examples/using_make/advanced/mod.mli:1: f ./examples/using_make/advanced/mod.mli:2: x @@ -251,32 +256,35 @@ ./examples/using_dune/unwrapped_lib/values/values_no_intf.ml:21: used_alias_fun ./examples/using_dune/unwrapped_lib/values/values_no_intf.ml:26: used_closure -./examples/using_dune/wrapped_lib/obj/with_class.mli:33: fun_class_factory: Not detected -./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:2: used_fun_with_single_explicitly_discarded_opt_arg: Not detected -./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:4: used_fun_with_single_never_used_opt_arg: Not detected -./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:5: used_fun_with_single_always_used_opt_arg: Not detected -./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:12: internally_used_fun_with_single_sometimes_used_opt_arg: Not detected -./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:18: externally_used_fun_with_single_sometimes_used_opt_arg: Not detected -./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:20: multiple_never_used_opt_args: Not detected -./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:22: multiple_always_used_opt_args: Not detected -./examples/using_dune/wrapped_lib/opt_args/opt_args_in_higher_order_fun.mli:1: partially_applied_with_never_used_opt_arg: Not detected -./examples/using_dune/wrapped_lib/opt_args/opt_args_in_higher_order_fun.mli:3: partially_applied_with_always_used_opt_arg: Not detected -./examples/using_dune/wrapped_lib/opt_args/opt_args_in_higher_order_fun.mli:7: shadowing_never_used_arg: Not detected -./examples/using_dune/wrapped_lib/opt_args/opt_args_in_higher_order_fun.mli:8: shadowing_always_used_arg: Not detected -./examples/using_dune/wrapped_lib/opt_args/opt_args_in_higher_order_fun.mli:10: expect_fun_with_never_used_opt_arg: Not detected -./examples/using_dune/wrapped_lib/opt_args/opt_args_in_higher_order_fun.mli:11: expect_fun_with_always_used_opt_arg: Not detected -./examples/using_dune/wrapped_lib/opt_args/opt_args_in_higher_order_fun.mli:13: expect_fun_with_never_used_opt_arg_with_sig: Not detected -./examples/using_dune/wrapped_lib/opt_args/opt_args_in_higher_order_fun.mli:15: expect_fun_with_always_used_opt_arg_with_sig: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:1: used_int: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:13: used_fun: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:19: used_alias_fun: Not detected -./examples/using_dune/wrapped_lib/values/values.mli:24: used_closure: Not detected -./examples/using_dune/wrapped_lib/values/values_in_submodules.mli:2: Exported.used_int: Not detected -./examples/using_dune/wrapped_lib/values/values_in_submodules_no_intf.ml:2: Exported.used_int: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:1: used_int: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:14: used_fun: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:21: used_alias_fun: Not detected -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:26: used_closure: Not detected +./examples/using_dune/wrapped_lib/obj/with_class.mli:33: fun_class_factory + +./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:2: used_fun_with_single_explicitly_discarded_opt_arg +./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:4: used_fun_with_single_never_used_opt_arg +./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:5: used_fun_with_single_always_used_opt_arg +./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:12: internally_used_fun_with_single_sometimes_used_opt_arg +./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:18: externally_used_fun_with_single_sometimes_used_opt_arg +./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:20: multiple_never_used_opt_args +./examples/using_dune/wrapped_lib/opt_args/opt_args.mli:22: multiple_always_used_opt_args +./examples/using_dune/wrapped_lib/opt_args/opt_args_in_higher_order_fun.mli:1: partially_applied_with_never_used_opt_arg +./examples/using_dune/wrapped_lib/opt_args/opt_args_in_higher_order_fun.mli:3: partially_applied_with_always_used_opt_arg +./examples/using_dune/wrapped_lib/opt_args/opt_args_in_higher_order_fun.mli:7: shadowing_never_used_arg +./examples/using_dune/wrapped_lib/opt_args/opt_args_in_higher_order_fun.mli:8: shadowing_always_used_arg +./examples/using_dune/wrapped_lib/opt_args/opt_args_in_higher_order_fun.mli:10: expect_fun_with_never_used_opt_arg +./examples/using_dune/wrapped_lib/opt_args/opt_args_in_higher_order_fun.mli:11: expect_fun_with_always_used_opt_arg +./examples/using_dune/wrapped_lib/opt_args/opt_args_in_higher_order_fun.mli:13: expect_fun_with_never_used_opt_arg_with_sig +./examples/using_dune/wrapped_lib/opt_args/opt_args_in_higher_order_fun.mli:15: expect_fun_with_always_used_opt_arg_with_sig + +./examples/using_dune/wrapped_lib/values/values.mli:1: used_int +./examples/using_dune/wrapped_lib/values/values.mli:13: used_fun +./examples/using_dune/wrapped_lib/values/values.mli:19: used_alias_fun +./examples/using_dune/wrapped_lib/values/values.mli:24: used_closure +./examples/using_dune/wrapped_lib/values/values_in_submodules.mli:2: Exported.used_int +./examples/using_dune/wrapped_lib/values/values_in_submodules_no_intf.ml:2: Exported.used_int +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:1: used_int +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:14: used_fun +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:21: used_alias_fun +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:26: used_closure + ./examples/using_make/dir/anonFn.mli:1: f ./examples/using_make/dir/anonFn.mli:2: g ./examples/using_make/dir/anonFn.mli:3: h @@ -304,7 +312,8 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./examples/using_dune/unwrapped_lib/values/values_no_intf.ml:19: aliased_fun -./examples/using_dune/wrapped_lib/values/values_no_intf.ml:19: aliased_fun: Not detected +./examples/using_dune/wrapped_lib/values/values_no_intf.ml:19: aliased_fun + ./examples/using_make/dir/anonFn2.mli:1: f ./examples/using_make/dir/anonFn2.mli:2: g ./examples/using_make/dir/match_opt.ml:1: f @@ -338,21 +347,22 @@ Nothing else to report in this section ./examples/using_dune/unwrapped_lib/obj/without_class.mli:28: _self_used_factory#unused_fun ./examples/using_dune/unwrapped_lib/obj/without_class.mli:28: _self_used_factory#unused_int -./examples/using_dune/wrapped_lib/obj/with_class.mli:1: unused#unused: Not detected -./examples/using_dune/wrapped_lib/obj/with_class.mli:5: basics#never_used_fun: Not detected -./examples/using_dune/wrapped_lib/obj/with_class.mli:5: basics#never_used_int: Not detected -./examples/using_dune/wrapped_lib/obj/with_class.mli:23: unused_fun_class#unused: Not detected -./examples/using_dune/wrapped_lib/obj/with_class.mli:25: fun_class#unused: Not detected -./examples/using_dune/wrapped_lib/obj/with_class.mli:35: _self_used#unused: Not detected -./examples/using_dune/wrapped_lib/obj/with_class.mli:41: _self_used_fun_class#unused: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#unused_fun: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#unused_int: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#unused_fun: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#unused_int: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:22: _self_used_immediate#unused_fun: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:22: _self_used_immediate#unused_int: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:28: _self_used_factory#unused_fun: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:28: _self_used_factory#unused_int: Not detected +./examples/using_dune/wrapped_lib/obj/with_class.mli:1: unused#unused +./examples/using_dune/wrapped_lib/obj/with_class.mli:5: basics#never_used_fun +./examples/using_dune/wrapped_lib/obj/with_class.mli:5: basics#never_used_int +./examples/using_dune/wrapped_lib/obj/with_class.mli:23: unused_fun_class#unused +./examples/using_dune/wrapped_lib/obj/with_class.mli:25: fun_class#unused +./examples/using_dune/wrapped_lib/obj/with_class.mli:35: _self_used#unused +./examples/using_dune/wrapped_lib/obj/with_class.mli:41: _self_used_fun_class#unused +./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#unused_fun +./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#unused_int +./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#unused_fun +./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#unused_int +./examples/using_dune/wrapped_lib/obj/without_class.mli:22: _self_used_immediate#unused_fun +./examples/using_dune/wrapped_lib/obj/without_class.mli:22: _self_used_immediate#unused_int +./examples/using_dune/wrapped_lib/obj/without_class.mli:28: _self_used_factory#unused_fun +./examples/using_dune/wrapped_lib/obj/without_class.mli:28: _self_used_factory#unused_int + ./examples/using_make/obj/class.mli:1: c#h ./examples/using_make/obj/class_type.mli:9: c#h ./examples/using_make/obj/coerce.mli:6: p#f @@ -393,20 +403,21 @@ Nothing else to report in this section ./examples/using_dune/unwrapped_lib/obj/without_class.mli:28: _self_used_factory#used_fun ./examples/using_dune/unwrapped_lib/obj/without_class.mli:28: _self_used_factory#used_int -./examples/using_dune/wrapped_lib/obj/with_class.mli:35: _self_used#used: Not detected -./examples/using_dune/wrapped_lib/obj/with_class.mli:41: _self_used_fun_class#used: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#externally_used_fun: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#externally_used_int: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#internally_used_fun: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#internally_used_int: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#externally_used_fun: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#externally_used_int: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#internally_used_fun: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#internally_used_int: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:22: _self_used_immediate#used_fun: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:22: _self_used_immediate#used_int: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:28: _self_used_factory#used_fun: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:28: _self_used_factory#used_int: Not detected +./examples/using_dune/wrapped_lib/obj/with_class.mli:35: _self_used#used +./examples/using_dune/wrapped_lib/obj/with_class.mli:41: _self_used_fun_class#used +./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#externally_used_fun +./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#externally_used_int +./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#internally_used_fun +./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#internally_used_int +./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#externally_used_fun +./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#externally_used_int +./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#internally_used_fun +./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#internally_used_int +./examples/using_dune/wrapped_lib/obj/without_class.mli:22: _self_used_immediate#used_fun +./examples/using_dune/wrapped_lib/obj/without_class.mli:22: _self_used_immediate#used_int +./examples/using_dune/wrapped_lib/obj/without_class.mli:28: _self_used_factory#used_fun +./examples/using_dune/wrapped_lib/obj/without_class.mli:28: _self_used_factory#used_int + ./examples/using_make/advanced/func.mli:3: M.c#f ./examples/using_make/advanced/mod.mli:4: p#f @@ -450,17 +461,18 @@ Nothing else to report in this section ./examples/using_dune/unwrapped_lib/obj/without_class.mli:11: factory#used_fun ./examples/using_dune/unwrapped_lib/obj/without_class.mli:11: factory#used_int -./examples/using_dune/wrapped_lib/obj/with_class.mli:5: basics#externally_used_fun: Not detected -./examples/using_dune/wrapped_lib/obj/with_class.mli:5: basics#externally_used_int: Not detected -./examples/using_dune/wrapped_lib/obj/with_class.mli:5: basics#internally_used_fun: Not detected -./examples/using_dune/wrapped_lib/obj/with_class.mli:5: basics#internally_used_int: Not detected -./examples/using_dune/wrapped_lib/obj/with_class.mli:5: basics#sometimes_used_fun: Not detected -./examples/using_dune/wrapped_lib/obj/with_class.mli:5: basics#sometimes_used_int: Not detected -./examples/using_dune/wrapped_lib/obj/with_class.mli:25: fun_class#used: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#used_fun: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#used_int: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#used_fun: Not detected -./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#used_int: Not detected +./examples/using_dune/wrapped_lib/obj/with_class.mli:5: basics#externally_used_fun +./examples/using_dune/wrapped_lib/obj/with_class.mli:5: basics#externally_used_int +./examples/using_dune/wrapped_lib/obj/with_class.mli:5: basics#internally_used_fun +./examples/using_dune/wrapped_lib/obj/with_class.mli:5: basics#internally_used_int +./examples/using_dune/wrapped_lib/obj/with_class.mli:5: basics#sometimes_used_fun +./examples/using_dune/wrapped_lib/obj/with_class.mli:5: basics#sometimes_used_int +./examples/using_dune/wrapped_lib/obj/with_class.mli:25: fun_class#used +./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#used_fun +./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#used_int +./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#used_fun +./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#used_int + ./examples/using_make/obj/class_type.mli:7: p#g ./examples/using_make/obj/coerce.mli:8: c#f ./examples/using_make/obj/named.mli:1: p1#f @@ -502,32 +514,33 @@ Nothing else to report in this section ./examples/using_dune/unwrapped_lib/constructors_and_records/records.mli:43: partially_used_mix_2.partially_used_param ./examples/using_dune/unwrapped_lib/constructors_and_records/records.mli:47: partially_used_in_match.partially_used_in_match_unit -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:1: unused_single_no_param.Unused_single_no_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:2: unused_single_unit.Unused_single_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:3: unused_single_param.Unused_single_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:5: unused_mix.Unused_no_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:6: unused_mix.Unused_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:7: unused_mix.Unused_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:9: matched_single_no_param.Matched_single_no_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:10: matched_single_unit.Matched_single_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:11: matched_single_param.Matched_single_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:13: matched_mix.Matched_no_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:14: matched_mix.Matched_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:15: matched_mix.Matched_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:42: partially_used_mix_1.Partially_used_no_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:48: partially_used_mix_2.Partially_used_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:54: partially_used_mix_3.Partially_used_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:1: unused_single_unit.unused_single_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:2: unused_single_param.unused_single_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:4: unused_mix.unused_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:5: unused_mix.unused_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:8: written_single_unit.written_single_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:9: written_single_param.written_single_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:11: written_mix.written_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:12: written_mix.written_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:37: partially_used_mix_1.partially_used_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:43: partially_used_mix_2.partially_used_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:47: partially_used_in_match.partially_used_in_match_unit: Not detected +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:1: unused_single_no_param.Unused_single_no_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:2: unused_single_unit.Unused_single_unit +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:3: unused_single_param.Unused_single_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:5: unused_mix.Unused_no_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:6: unused_mix.Unused_unit +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:7: unused_mix.Unused_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:9: matched_single_no_param.Matched_single_no_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:10: matched_single_unit.Matched_single_unit +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:11: matched_single_param.Matched_single_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:13: matched_mix.Matched_no_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:14: matched_mix.Matched_unit +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:15: matched_mix.Matched_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:42: partially_used_mix_1.Partially_used_no_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:48: partially_used_mix_2.Partially_used_unit +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:54: partially_used_mix_3.Partially_used_param +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:1: unused_single_unit.unused_single_unit +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:2: unused_single_param.unused_single_param +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:4: unused_mix.unused_unit +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:5: unused_mix.unused_param +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:8: written_single_unit.written_single_unit +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:9: written_single_param.written_single_param +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:11: written_mix.written_unit +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:12: written_mix.written_param +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:37: partially_used_mix_1.partially_used_unit +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:43: partially_used_mix_2.partially_used_param +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:47: partially_used_in_match.partially_used_in_match_unit + ./examples/using_make/record.mli:3: t0.unused ./examples/using_make/record.mli:4: t0.f ./examples/using_make/record.mli:10: X.t.unused @@ -566,32 +579,33 @@ Nothing else to report in this section ./examples/using_dune/unwrapped_lib/constructors_and_records/records.mli:32: externally_used_mix.externally_used_unit ./examples/using_dune/unwrapped_lib/constructors_and_records/records.mli:33: externally_used_mix.externally_used_param -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:25: internally_used_single_no_param.Internally_used_single_no_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:26: internally_used_single_unit.Internally_used_single_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:27: internally_used_single_param.Internally_used_single_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:29: internally_used_mix.Internally_used_no_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:30: internally_used_mix.Internally_used_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:31: internally_used_mix.Internally_used_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:33: externally_used_single_no_param.Externally_used_single_no_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:34: externally_used_single_unit.Externally_used_single_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:35: externally_used_single_param.Externally_used_single_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:37: externally_used_mix.Externally_used_no_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:38: externally_used_mix.Externally_used_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:39: externally_used_mix.Externally_used_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:43: partially_used_mix_1.Partially_used_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:44: partially_used_mix_1.Partially_used_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:47: partially_used_mix_2.Partially_used_no_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:49: partially_used_mix_2.Partially_used_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:52: partially_used_mix_3.Partially_used_no_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:53: partially_used_mix_3.Partially_used_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:22: internally_used_single_unit.internally_used_single_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:23: internally_used_single_param.internally_used_single_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:25: internally_used_mix.internally_used_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:26: internally_used_mix.internally_used_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:29: externally_used_single_unit.externally_used_single_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:30: externally_used_single_param.externally_used_single_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:32: externally_used_mix.externally_used_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:33: externally_used_mix.externally_used_param: Not detected +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:25: internally_used_single_no_param.Internally_used_single_no_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:26: internally_used_single_unit.Internally_used_single_unit +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:27: internally_used_single_param.Internally_used_single_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:29: internally_used_mix.Internally_used_no_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:30: internally_used_mix.Internally_used_unit +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:31: internally_used_mix.Internally_used_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:33: externally_used_single_no_param.Externally_used_single_no_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:34: externally_used_single_unit.Externally_used_single_unit +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:35: externally_used_single_param.Externally_used_single_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:37: externally_used_mix.Externally_used_no_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:38: externally_used_mix.Externally_used_unit +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:39: externally_used_mix.Externally_used_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:43: partially_used_mix_1.Partially_used_unit +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:44: partially_used_mix_1.Partially_used_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:47: partially_used_mix_2.Partially_used_no_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:49: partially_used_mix_2.Partially_used_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:52: partially_used_mix_3.Partially_used_no_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:53: partially_used_mix_3.Partially_used_unit +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:22: internally_used_single_unit.internally_used_single_unit +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:23: internally_used_single_param.internally_used_single_param +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:25: internally_used_mix.internally_used_unit +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:26: internally_used_mix.internally_used_param +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:29: externally_used_single_unit.externally_used_single_unit +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:30: externally_used_single_param.externally_used_single_param +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:32: externally_used_mix.externally_used_unit +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:33: externally_used_mix.externally_used_param + ./examples/using_make/record.mli:11: X.t.used ./examples/using_make/record.mli:18: t2.r ./examples/using_make/variant.mli:1: v.Used @@ -615,19 +629,20 @@ Nothing else to report in this section ./examples/using_dune/unwrapped_lib/constructors_and_records/records.mli:42: partially_used_mix_2.partially_used_unit ./examples/using_dune/unwrapped_lib/constructors_and_records/records.mli:48: partially_used_in_match.partially_used_in_match_param -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:17: used_single_no_param.Used_single_no_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:18: used_single_unit.Used_single_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:19: used_single_param.Used_single_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:21: used_mix.Used_no_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:22: used_mix.Used_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:23: used_mix.Used_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:15: used_single_unit.used_single_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:16: used_single_param.used_single_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:18: used_mix.used_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:19: used_mix.used_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:38: partially_used_mix_1.partially_used_param: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:42: partially_used_mix_2.partially_used_unit: Not detected -./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:48: partially_used_in_match.partially_used_in_match_param: Not detected +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:17: used_single_no_param.Used_single_no_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:18: used_single_unit.Used_single_unit +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:19: used_single_param.Used_single_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:21: used_mix.Used_no_param +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:22: used_mix.Used_unit +./examples/using_dune/wrapped_lib/constructors_and_records/constructors.mli:23: used_mix.Used_param +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:15: used_single_unit.used_single_unit +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:16: used_single_param.used_single_param +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:18: used_mix.used_unit +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:19: used_mix.used_param +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:38: partially_used_mix_1.partially_used_param +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:42: partially_used_mix_2.partially_used_unit +./examples/using_dune/wrapped_lib/constructors_and_records/records.mli:48: partially_used_in_match.partially_used_in_match_param + ./examples/using_make/record.mli:12: X.t.f ./examples/using_make/variant.mli:3: v2.Int -------- @@ -1072,6 +1087,6 @@ Nothing else to report in this section Total: 920 -Success: 730 -Failed: 190 -Ratio: 79.347826087% +Success: 920 +Failed: 0 +Ratio: 100.% diff --git a/src/deadCode.ml b/src/deadCode.ml index 1d37b48..a0456e1 100644 --- a/src/deadCode.ml +++ b/src/deadCode.ml @@ -338,21 +338,30 @@ let kind fn = let regabs state = let fn = State.File_infos.get_sourcepath state.State.file_infos in - hashtbl_add_unique_to_list abspath (unit fn) fn; + hashtbl_add_unique_to_list abspath (Utils.unit fn) fn; if !DeadCommon.declarations then - hashtbl_add_unique_to_list main_files (unit fn) () + hashtbl_add_unique_to_list main_files (Utils.unit fn) () let read_interface fn cmi_infos state = let open Cmi_format in try regabs state; - let u = unit fn in if !DeadFlag.exported.DeadFlag.print || !DeadFlag.obj.DeadFlag.print || !DeadFlag.typ.DeadFlag.print then + let u = + if State.File_infos.has_sourcepath state.file_infos then + State.File_infos.get_sourceunit state.file_infos + else + Utils.unit fn + in + let module_id = + State.File_infos.get_modname state.file_infos + |> Ident.create_persistent + in let f = - collect_export [Ident.create_persistent (String.capitalize_ascii u)] u decs + collect_export [module_id] u decs in List.iter f cmi_infos.cmi_sign; last_loc := Lexing.dummy_pos @@ -370,11 +379,11 @@ let assoc decs (loc1, loc2) = let is_implem fn = fn.[String.length fn - 1] <> 'i' in let has_iface fn = fn.[String.length fn - 1] = 'i' - || ( unit fn = sourceunit + || ( Utils.unit fn = sourceunit && DeadCommon.file_exists (fn ^ "i")) in let is_iface fn loc = - Hashtbl.mem decs loc || unit fn <> sourceunit + Hashtbl.mem decs loc || Utils.unit fn <> sourceunit || not (is_implem fn && has_iface fn) in if fn1 <> _none && fn2 <> _none && loc1 <> loc2 then begin @@ -394,7 +403,7 @@ let clean references loc = let state = State.get_current () in let sourceunit = State.File_infos.get_sourceunit state.file_infos in let fn = loc.Lexing.pos_fname in - if (fn.[String.length fn - 1] <> 'i' && unit fn = sourceunit) then + if (fn.[String.length fn - 1] <> 'i' && Utils.unit fn = sourceunit) then LocHash.remove references loc let eom loc_dep = @@ -494,7 +503,7 @@ let analyze_opt_args () = List.iter (fun f -> f ()) !DeadArg.last; let all = ref [] in let tbl = Hashtbl.create 256 in - let dec_loc loc = Hashtbl.mem main_files (unit loc.Lexing.pos_fname) in + let dec_loc loc = Hashtbl.mem main_files (Utils.unit loc.Lexing.pos_fname) in let analyze = fun opt_arg_use -> let builddir = opt_arg_use.builddir in diff --git a/src/deadCommon.ml b/src/deadCommon.ml index 81a3e0e..5ce638b 100644 --- a/src/deadCommon.ml +++ b/src/deadCommon.ml @@ -70,8 +70,6 @@ let _variant = ": variant :" (******** HELPERS ********) -let unit fn = Filename.remove_extension (Filename.basename fn) - let register_style loc msg = let state = State.get_current() in let builddir = State.File_infos.get_builddir state.file_infos in @@ -124,7 +122,7 @@ let find_path fn l = List.find (is_sub_path ~sep fn) l let find_abspath fn = - find_path fn (hashtbl_find_list abspath (unit fn)) + find_path fn (hashtbl_find_list abspath (Utils.unit fn)) let file_exists fn = match find_abspath fn with @@ -149,7 +147,7 @@ let exported (flag : DeadFlag.basic ref) loc = && (flag == DeadFlag.typ || !DeadFlag.internal || fn.[String.length fn - 1] = 'i' - || sourceunit <> unit fn + || sourceunit <> Utils.unit fn || not (file_exists (fn ^ "i"))) @@ -359,7 +357,7 @@ module VdNode = struct if not (LocSet.is_empty worklist) then let loc = LocSet.choose worklist in let wl = LocSet.remove loc worklist in - if unit loc.Lexing.pos_fname <> sourceunit then + if Utils.unit loc.Lexing.pos_fname <> sourceunit then List.iter (LocHash.remove parents) loc_list else begin LocHash.replace met loc (); @@ -391,7 +389,7 @@ let export ?(sep = ".") path u stock id loc = will create value definitions whose location is in set.mli *) if not loc.Location.loc_ghost - && (u = unit loc.Location.loc_start.Lexing.pos_fname || u == _include) + && (u = Utils.unit loc.Location.loc_start.Lexing.pos_fname || u == _include) && check_underscore (Ident.name id) then let state = State.get_current () in let builddir = State.File_infos.get_builddir state.file_infos in diff --git a/src/dune b/src/dune index d38f508..20d1c70 100644 --- a/src/dune +++ b/src/dune @@ -2,3 +2,5 @@ (public_name dead_code_analyzer) (name deadCode) (libraries compiler-libs.common)) + +(include_subdirs unqualified) diff --git a/src/state.ml b/src/state.ml deleted file mode 100644 index 79b836b..0000000 --- a/src/state.ml +++ /dev/null @@ -1,165 +0,0 @@ -module File_infos = struct - type t = { - cmti_file : string; - sourcepath : string; - builddir : string; - modname : string; - cmi_infos : Cmi_format.cmi_infos option; - cmt_infos : Cmt_format.cmt_infos option; - } - - let empty = { - cmti_file = ""; - sourcepath = "!!UNKNOWN_SOURCEPATH!!"; - builddir = "!!UNKNOWN_BUILDDIR!!"; - modname = "!!UNKNOWN_MODNAME!!"; - cmi_infos = None; - cmt_infos = None; - } - - let init_from_cmt_infos cmt_infos cmt_file = - let builddir = cmt_infos.Cmt_format.cmt_builddir in - let sourcepath = - match cmt_infos.cmt_sourcefile with - | Some sourcefile -> Filename.concat builddir sourcefile - | None -> - Printf.sprintf "!!UNKNOWN_SOURCEPATH_IN<%s>_FOR_<%s>!!" - builddir - cmt_file - in - let modname = cmt_infos.cmt_modname in - {empty with cmti_file = cmt_file; - builddir; - sourcepath; - modname; - cmt_infos = Some cmt_infos; - } - - let init_from_cmt cmt_file = - if not (Sys.file_exists cmt_file) then Result.error (cmt_file ^ ": file not found") - else - try - let cmt_infos = Cmt_format.read_cmt cmt_file in - init_from_cmt_infos cmt_infos cmt_file - |> Result.ok - with _ -> Result.error (cmt_file ^ ": cannot read cmt file") - - let init_from_cmi_infos ?with_cmt cmi_infos cmi_file = - let builddir = - match with_cmt with - | None -> "!!UNKNOWN_BUILDDIR_FOR<" ^ cmi_file ^ ">!!" - | Some {builddir; _} -> builddir - in - let sourcepath = - let unknown_sourcepath = - match with_cmt with - | None -> "!!UNKNOWN_SOURCEPATH_FOR<" ^ cmi_file ^ ">!!" - | Some {sourcepath; _} -> sourcepath - in - match cmi_infos.Cmi_format.cmi_sign with - | [] -> unknown_sourcepath - | sig_item::_ -> match sig_item with - (* assume that the first item's location points to the interface - file (.mli) if it is not a ghost location *) - | Sig_value (_, {Types.val_loc = loc; _}, _) - | Sig_type (_, {Types.type_loc = loc; _}, _, _) - | Sig_typext (_, {Types.ext_loc = loc; _}, _, _) - | Sig_module (_, _, {Types.md_loc = loc; _}, _, _) - | Sig_modtype (_, {Types.mtd_loc = loc; _}, _) - | Sig_class (_, {Types.cty_loc = loc; _}, _, _) - | Sig_class_type (_, {Types.clty_loc = loc; _}, _, _) -> - if loc.Location.loc_ghost then unknown_sourcepath - else Filename.concat builddir loc.Location.loc_start.pos_fname - in - let modname = cmi_infos.cmi_name in - {empty with cmti_file = cmi_file; - builddir; - sourcepath; - modname; - cmi_infos = Some cmi_infos; - } - - let init_from_cmi ?with_cmt cmi_file = - if not (Sys.file_exists cmi_file) then Result.error (cmi_file ^ ": file not found") - else - try - let cmi_infos = Cmi_format.read_cmi cmi_file in - init_from_cmi_infos ?with_cmt cmi_infos cmi_file - |> Result.ok - with _ -> Result.error (cmi_file ^ ": cannot read cmi file") - - let init cmti_file = - let no_ext = Filename.remove_extension cmti_file in - match Filename.extension cmti_file with - | ".cmi" -> - let with_cmt = init_from_cmt (no_ext ^ ".cmt") |> Result.to_option in - init_from_cmi ?with_cmt cmti_file - | ".cmt" -> - let with_cmi_infos with_cmt = - match init_from_cmi ~with_cmt (no_ext ^ ".cmi") with - | Error _ -> with_cmt - | Ok {cmi_infos; _} -> {with_cmt with cmi_infos} - in - init_from_cmt cmti_file |> Result.map with_cmi_infos - | _ -> Result.error (cmti_file ^ ": not a .cmi or .cmt file") - - let change_file file_infos cmti_file = - let no_ext = Filename.remove_extension cmti_file in - assert(no_ext = Filename.remove_extension file_infos.cmti_file); - match Filename.extension cmti_file, file_infos with - | ".cmi", {cmi_infos=Some cmi_infos; _} -> - let res = init_from_cmi_infos ~with_cmt:file_infos cmi_infos cmti_file in - Result.ok res - | ".cmt", {cmt_infos = Some cmt_infos; cmi_infos; _} -> - let res = init_from_cmt_infos cmt_infos cmti_file in - Result.ok {res with cmi_infos} - | ".cmi", _ - | ".cmt", _ -> (* corresponding info is None *) - init cmti_file - | _ -> Result.error (cmti_file ^ ": not a .cmi or .cmt file") - - let get_builddir t = t.builddir - - let get_sourcepath t = t.sourcepath - - let get_sourceunit t = - match t.cmt_infos with - | Some {cmt_sourcefile = Some _; _} -> - get_sourcepath t |> Filename.basename |> Filename.remove_extension - | _ -> "!!UNKNOWN_SOURCEUNIT_FOR<" ^ t.cmti_file ^ ">!!" - - let get_modname t = t.modname - -end - -type t = { - file_infos : File_infos.t; -} - -let empty = {file_infos = File_infos.empty} - -let init cmti_file = - let file_infos = File_infos.init cmti_file in - Result.map (fun file_infos -> {file_infos}) file_infos - -let change_file state cmti_file = - let file_infos = state.file_infos in - let equal_no_ext filename1 filename2 = - let no_ext1 = Filename.remove_extension filename1 in - let no_ext2 = Filename.remove_extension filename2 in - no_ext1 = no_ext2 - in - if file_infos.cmti_file = cmti_file then - Result.ok state - else if equal_no_ext file_infos.cmti_file cmti_file then - let file_infos = File_infos.change_file file_infos cmti_file in - Result.map (fun file_infos -> {file_infos}) file_infos - else - init cmti_file - - -let current = ref empty - -let get_current () = !current - -let update state = current := state diff --git a/src/state/file_infos.ml b/src/state/file_infos.ml new file mode 100644 index 0000000..6b741a8 --- /dev/null +++ b/src/state/file_infos.ml @@ -0,0 +1,200 @@ +type t = { + cmti_file : string; + sourcepath : string option; + builddir : string option; + modname : string; + cmi_infos : Cmi_format.cmi_infos option; + cmt_infos : Cmt_format.cmt_infos option; +} + +let empty = { + cmti_file = ""; + sourcepath = None; + builddir = None; + modname = "!!UNKNOWN_MODNAME!!"; + cmi_infos = None; + cmt_infos = None; +} + +(** [init_from_cmt_infos cmt_infos cmt_file] creates a [t] with: + - information from [cmt_infos]; + - [cmti_file = cmt_file]; + - [cmt_infos = Some cmt_infos]. *) +let init_from_cmt_infos cmt_infos cmt_file = + let builddir = cmt_infos.Cmt_format.cmt_builddir in + let sourcepath = + Option.map (Filename.concat builddir) cmt_infos.cmt_sourcefile + in + let modname = cmt_infos.cmt_modname in + {empty with cmti_file = cmt_file; + builddir = Some builddir; + sourcepath; + modname; + cmt_infos = Some cmt_infos; + } + +(** [init_from_cmt cmt_file] returns an [Ok t] with [t] filled using + the [cmt_file] (see [init_from_cmt_infos]). + In case the file does not exist or it cannot be read (see + [Cmt_format.read_cmt]) then it returns an [Err msg] with msg a string + describing the issue. *) +let init_from_cmt cmt_file = + if not (Sys.file_exists cmt_file) then Result.error (cmt_file ^ ": file not found") + else + try + let cmt_infos = Cmt_format.read_cmt cmt_file in + init_from_cmt_infos cmt_infos cmt_file + |> Result.ok + with _ -> Result.error (cmt_file ^ ": cannot read cmt file") + + +let sourcefname_of_cmi_infos cmi_unit cmi_infos = + let candidate_of_fname fname = + let src_unit = Utils.unit fname in + if String.equal src_unit cmi_unit then `Identical fname + else if String.ends_with ~suffix:src_unit cmi_unit then + `Suffix fname + else if String.starts_with ~prefix:src_unit cmi_unit then + `Prefix fname + else `Different fname + in + let fname_of_candidate = function + | `Default -> None + | `Identical fname + | `Suffix fname + | `Prefix fname + | `Different fname -> Some fname + in + let get_item_loc (sig_item : Types.signature_item) = + match sig_item with + | Sig_value (_, {val_loc = loc; _}, _) + | Sig_type (_, {type_loc = loc; _}, _, _) + | Sig_typext (_, {ext_loc = loc; _}, _, _) + | Sig_module (_, _, {md_loc = loc; _}, _, _) + | Sig_modtype (_, {mtd_loc = loc; _}, _) + | Sig_class (_, {cty_loc = loc; _}, _, _) + | Sig_class_type (_, {clty_loc = loc; _}, _, _) -> + loc + in + let rec find_sourcename candidate = function + | [] -> fname_of_candidate candidate + | sig_item::items -> + let loc = get_item_loc sig_item in + if loc.Location.loc_ghost then find_sourcename candidate items + else + let fname = loc.Location.loc_start.pos_fname in + match candidate, candidate_of_fname fname with + | _, `Default -> assert false + | (`Identical _ as candidate), _ + | _, (`Identical _ as candidate) -> + (* best candidate found *) + fname_of_candidate candidate + | `Default, candidate + | `Different _, candidate + | candidate, `Different _ + | `Prefix _, (`Suffix _ as candidate) + | (`Suffix _ as candidate), `Prefix _ + | _, candidate -> + find_sourcename candidate items + in + find_sourcename `Default cmi_infos.Cmi_format.cmi_sign + +(** [init_from_cmi_infos ?with_cmt cmi_infos cmi_file] creates a [t] with: + - information from [cmt_infos]; + - [cmti_file = cmt_file]; + - [cmi_infos = Some cmi_infos]. + Because the [cmi_infos] is not as complete as [cmt_infos] (e.g. it does not + specify the [builddir]), an existing [t] filled using the correpsonding + [cmt_infos] can be passed as argument. In this case, information unavailable + in the [cmi_infos] is read from [with_cmt]. Otherwise, default values are + set for [builddir] and eventually [sourcepath]. *) +let init_from_cmi_infos ?with_cmt cmi_infos cmi_file = + let builddir = Option.bind with_cmt (fun {builddir; _} -> builddir) in + let sourcepath = + let unknown_sourcepath = + Option.bind with_cmt (fun {sourcepath; _} -> sourcepath) + in + let cmi_unit = Utils.unit cmi_file in + let sourcefname = sourcefname_of_cmi_infos cmi_unit cmi_infos in + match sourcefname, builddir with + | None, _ -> unknown_sourcepath + | Some _, None -> sourcefname + | Some fname, Some builddir -> Some (Filename.concat builddir fname) + + in + let modname = cmi_infos.cmi_name in + {empty with cmti_file = cmi_file; + builddir; + sourcepath; + modname; + cmi_infos = Some cmi_infos; + } + +(** [init_from_cmi cmi_file] returns an [Ok t] with [t] filled using + the [cmi_file] (see [init_from_cmi_infos]). + In case the file does not exist or it cannot be read (see + [Cmi_format.read_cmi]) then it returns an [Err msg] with msg a string + describing the issue. *) +let init_from_cmi ?with_cmt cmi_file = + if not (Sys.file_exists cmi_file) then Result.error (cmi_file ^ ": file not found") + else + try + let cmi_infos = Cmi_format.read_cmi cmi_file in + init_from_cmi_infos ?with_cmt cmi_infos cmi_file + |> Result.ok + with _ -> Result.error (cmi_file ^ ": cannot read cmi file") + +let init cmti_file = + let no_ext = Filename.remove_extension cmti_file in + match Filename.extension cmti_file with + | ".cmi" -> + let with_cmt = init_from_cmt (no_ext ^ ".cmt") |> Result.to_option in + init_from_cmi ?with_cmt cmti_file + | ".cmt" -> + let with_cmi_infos with_cmt = + match init_from_cmi ~with_cmt (no_ext ^ ".cmi") with + | Error _ -> with_cmt + | Ok {cmi_infos; _} -> {with_cmt with cmi_infos} + in + init_from_cmt cmti_file |> Result.map with_cmi_infos + | _ -> Result.error (cmti_file ^ ": not a .cmi or .cmt file") + +let change_file file_infos cmti_file = + let no_ext = Filename.remove_extension cmti_file in + assert(no_ext = Filename.remove_extension file_infos.cmti_file); + match Filename.extension cmti_file, file_infos with + | ".cmi", {cmi_infos=Some cmi_infos; _} -> + let res = init_from_cmi_infos ~with_cmt:file_infos cmi_infos cmti_file in + Result.ok res + | ".cmt", {cmt_infos = Some cmt_infos; cmi_infos; _} -> + let res = init_from_cmt_infos cmt_infos cmti_file in + Result.ok {res with cmi_infos} + | _ -> (* corresponding info is None *) + init cmti_file + +let has_builddir file_infos = Option.is_some file_infos.builddir + +let has_sourcepath file_infos = Option.is_some file_infos.sourcepath + +let get_builddir t = + match t.builddir with + | Some builddir -> builddir + | None -> "!!UNKNOWN_BUILDDIR_FOR<" ^ t.cmti_file ^ ">!!" + +let get_sourcepath t = + match t.sourcepath with + | Some sourcepath -> sourcepath + | None -> match t.builddir with + | Some builddir -> + Printf.sprintf "!!UNKNOWN_SOURCEPATH_IN<%s>_FOR_<%s>!!" + builddir + t.cmti_file + | None -> "!!UNKNOWN_SOURCEPATH_FOR<" ^ t.cmti_file ^ ">!!" + +let get_sourceunit t = + match t.sourcepath with + | Some sourcepath -> + sourcepath |> Filename.basename |> Filename.remove_extension + | None -> "!!UNKNOWN_SOURCEUNIT_FOR<" ^ t.cmti_file ^ ">!!" + +let get_modname t = t.modname diff --git a/src/state/file_infos.mli b/src/state/file_infos.mli new file mode 100644 index 0000000..8e29bb8 --- /dev/null +++ b/src/state/file_infos.mli @@ -0,0 +1,35 @@ +(** Information about a analyzable file ([.cmi] or [.cmt] file) *) + +type t = { + cmti_file : string; (** The filepath currently analyzed *) + sourcepath : string option; (** The path to the associated source file *) + builddir : string option; (** The [cmt_builddir] *) + modname : string; (** Either [cmi_name] or [cmt_modname] *) + cmi_infos : Cmi_format.cmi_infos option; + cmt_infos : Cmt_format.cmt_infos option; +} + +val empty : t (** No file info *) + +val init : string -> (t, string) result +(** [init cmti_file] expects either a [.cmi] or [.cmt] filepath as argument and + returns an [Ok t] with [t] filled using the [cmit_file]. + In case the file does not exist, it cannot be read, or its extension is + invalid, then it returns an [Err msg] with msg a string + describing the issue. *) + +val change_file : t -> string -> (t, string) result +(** [change_file t cmti_file] expects either a [.cmi] or a [.cmt] filepath as + argument. [cmti_file] must be the same as [t.cmti_file], ignoring the + extension. + The returned value is either a simple update of [t] if the necessary + [cmi_infos] or [cmt_infos] is available. Otherwise, it is the result of + [init t] *) + +val has_builddir : t -> bool +val has_sourcepath : t -> bool + +val get_builddir : t -> string +val get_sourcepath : t -> string +val get_sourceunit : t -> string +val get_modname : t -> string diff --git a/src/state/state.ml b/src/state/state.ml new file mode 100644 index 0000000..65550e1 --- /dev/null +++ b/src/state/state.ml @@ -0,0 +1,33 @@ +module File_infos = File_infos + +type t = { + file_infos : File_infos.t; +} + +let empty = {file_infos = File_infos.empty} + +let init cmti_file = + let file_infos = File_infos.init cmti_file in + Result.map (fun file_infos -> {file_infos}) file_infos + +let change_file state cmti_file = + let file_infos = state.file_infos in + let equal_no_ext filename1 filename2 = + let no_ext1 = Filename.remove_extension filename1 in + let no_ext2 = Filename.remove_extension filename2 in + no_ext1 = no_ext2 + in + if file_infos.cmti_file = cmti_file then + Result.ok state + else if equal_no_ext file_infos.cmti_file cmti_file then + let file_infos = File_infos.change_file file_infos cmti_file in + Result.map (fun file_infos -> {file_infos}) file_infos + else + init cmti_file + +(** Analysis' state *) +let current = ref empty + +let get_current () = !current + +let update state = current := state diff --git a/src/state/state.mli b/src/state/state.mli new file mode 100644 index 0000000..a313e24 --- /dev/null +++ b/src/state/state.mli @@ -0,0 +1,23 @@ +(** Stateful info of the analysis *) + +module File_infos = File_infos + +type t = { + file_infos : File_infos.t; (** Info about the file being analyzed *) +} + +val empty : t (** The empty state *) + +val init : string -> (t, string) result +(** [init cmti_file] initialize a state to analyze [cmti_file]. + See [File_infos.init] for error cases. *) + +val change_file : t -> string -> (t, string) result +(** [cahnge_file t cmti_file] prepare the analysis to move on to [cmti_file]. + See [File_infos.change_file] for error cases. *) + +val get_current : unit -> t +(** [get_current ()] returns the state used during the analysis. *) + +val update : t -> unit +(** [update t] replaces the analysis' state with [t]. *) diff --git a/src/utils.ml b/src/utils.ml new file mode 100644 index 0000000..fb51875 --- /dev/null +++ b/src/utils.ml @@ -0,0 +1,2 @@ +let unit fn = Filename.remove_extension (Filename.basename fn) + diff --git a/src/utils.mli b/src/utils.mli new file mode 100644 index 0000000..526dc8d --- /dev/null +++ b/src/utils.mli @@ -0,0 +1 @@ +val unit : string -> string