Skip to content

Commit 306b299

Browse files
committed
[src][input][3/n] store uid's loc for values
Using information available in the `.cmt`, store locations of uids coming from `include`s in a new state field : `state.signature.uid_to_loc`. Using `.cmt` and `.cmti`, store locations of values' (and patterns in value bindings) uids at the same location for easier lookup. This is done as soon as the files are loaded, before the analysis. The new table tries to be semantically equivalent to the usage of `cmt_value_dependencies` instead of `cmt_declaration_dependencies` before OCaml 5.3. This fixes the FP and FN introduced when moving to OCaml 5.3.
1 parent 3ec59f0 commit 306b299

File tree

10 files changed

+428
-566
lines changed

10 files changed

+428
-566
lines changed

check/classic/classic.ref

Lines changed: 24 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,7 @@
4646

4747
./examples/using_make/advanced/inc_val.mli:1: x
4848
./examples/using_make/advanced/inc_val.mli:2: y
49-
./examples/using_make/advanced/val.mli:1: x: Should not be detected
50-
./examples/using_make/advanced/val.mli:2: y: Should not be detected
49+
5150
./examples/using_make/bar.ml:1: x
5251
./examples/using_make/bar_fn.ml:3: h
5352
./examples/using_make/baz.mli:1: z
@@ -106,7 +105,7 @@ Nothing else to report in this section
106105

107106
.> UNUSED METHODS:
108107
=================
109-
./examples/using_dune/preprocessed_lib/preprocessed.mli:6: immediate#unused: Not detected
108+
./examples/using_dune/preprocessed_lib/preprocessed.mli:6: immediate#unused
110109
./examples/using_dune/preprocessed_lib/preprocessed_no_intf.ml:12: immediate#unused
111110

112111
./examples/using_dune/unwrapped_lib/obj/with_class.mli:1: unused#unused
@@ -116,29 +115,31 @@ Nothing else to report in this section
116115
./examples/using_dune/unwrapped_lib/obj/with_class.mli:25: fun_class#unused
117116
./examples/using_dune/unwrapped_lib/obj/with_class.mli:35: _self_used#unused
118117
./examples/using_dune/unwrapped_lib/obj/with_class.mli:41: _self_used_fun_class#unused
119-
./examples/using_dune/unwrapped_lib/obj/without_class.mli:1: immediate#unused_fun: Not detected
120-
./examples/using_dune/unwrapped_lib/obj/without_class.mli:1: immediate#unused_int: Not detected
121-
./examples/using_dune/unwrapped_lib/obj/without_class.mli:11: factory#unused_fun: Not detected
122-
./examples/using_dune/unwrapped_lib/obj/without_class.mli:11: factory#unused_int: Not detected
123-
./examples/using_dune/unwrapped_lib/obj/without_class.mli:22: _self_used_immediate#unused_fun: Not detected
124-
./examples/using_dune/unwrapped_lib/obj/without_class.mli:22: _self_used_immediate#unused_int: Not detected
125-
./examples/using_dune/unwrapped_lib/obj/without_class.mli:28: _self_used_factory#unused_fun: Not detected
126-
./examples/using_dune/unwrapped_lib/obj/without_class.mli:28: _self_used_factory#unused_int: Not detected
118+
./examples/using_dune/unwrapped_lib/obj/without_class.mli:1: immediate#unused_fun
119+
./examples/using_dune/unwrapped_lib/obj/without_class.mli:1: immediate#unused_int
120+
./examples/using_dune/unwrapped_lib/obj/without_class.mli:11: factory#unused_fun
121+
./examples/using_dune/unwrapped_lib/obj/without_class.mli:11: factory#unused_int
122+
./examples/using_dune/unwrapped_lib/obj/without_class.mli:22: _self_used_immediate#unused_fun
123+
./examples/using_dune/unwrapped_lib/obj/without_class.mli:22: _self_used_immediate#unused_int
124+
./examples/using_dune/unwrapped_lib/obj/without_class.mli:28: _self_used_factory#unused_fun
125+
./examples/using_dune/unwrapped_lib/obj/without_class.mli:28: _self_used_factory#unused_int
126+
127127
./examples/using_dune/wrapped_lib/obj/with_class.mli:1: unused#unused
128128
./examples/using_dune/wrapped_lib/obj/with_class.mli:5: basics#never_used_fun
129129
./examples/using_dune/wrapped_lib/obj/with_class.mli:5: basics#never_used_int
130130
./examples/using_dune/wrapped_lib/obj/with_class.mli:23: unused_fun_class#unused
131131
./examples/using_dune/wrapped_lib/obj/with_class.mli:25: fun_class#unused
132132
./examples/using_dune/wrapped_lib/obj/with_class.mli:35: _self_used#unused
133133
./examples/using_dune/wrapped_lib/obj/with_class.mli:41: _self_used_fun_class#unused
134-
./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#unused_fun: Not detected
135-
./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#unused_int: Not detected
136-
./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#unused_fun: Not detected
137-
./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#unused_int: Not detected
138-
./examples/using_dune/wrapped_lib/obj/without_class.mli:22: _self_used_immediate#unused_fun: Not detected
139-
./examples/using_dune/wrapped_lib/obj/without_class.mli:22: _self_used_immediate#unused_int: Not detected
140-
./examples/using_dune/wrapped_lib/obj/without_class.mli:28: _self_used_factory#unused_fun: Not detected
141-
./examples/using_dune/wrapped_lib/obj/without_class.mli:28: _self_used_factory#unused_int: Not detected
134+
./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#unused_fun
135+
./examples/using_dune/wrapped_lib/obj/without_class.mli:1: immediate#unused_int
136+
./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#unused_fun
137+
./examples/using_dune/wrapped_lib/obj/without_class.mli:11: factory#unused_int
138+
./examples/using_dune/wrapped_lib/obj/without_class.mli:22: _self_used_immediate#unused_fun
139+
./examples/using_dune/wrapped_lib/obj/without_class.mli:22: _self_used_immediate#unused_int
140+
./examples/using_dune/wrapped_lib/obj/without_class.mli:28: _self_used_factory#unused_fun
141+
./examples/using_dune/wrapped_lib/obj/without_class.mli:28: _self_used_factory#unused_int
142+
142143
./examples/using_make/obj/class.mli:1: c#h
143144
./examples/using_make/obj/class_type.mli:9: c#h
144145
./examples/using_make/obj/coerce.mli:6: p#f
@@ -241,9 +242,6 @@ Nothing else to report in this section
241242
.> OPTIONAL ARGUMENTS: ALWAYS:
242243
=============================
243244
./examples/using_dune/preprocessed_lib/preprocessed.ml:53: ?always
244-
./examples/using_dune/preprocessed_lib/preprocessed.ml:53: ?internally: Should not be detected
245-
./examples/using_dune/preprocessed_lib/preprocessed.mli:31: ?always: Should not be detected
246-
./examples/using_dune/preprocessed_lib/preprocessed.mli:31: ?externally: Should not be detected
247245
./examples/using_dune/preprocessed_lib/preprocessed_no_intf.ml:53: ?always
248246

249247
./examples/using_dune/unwrapped_lib/opt_args/mixed_args.ml:1: ?always
@@ -367,8 +365,6 @@ Nothing else to report in this section
367365
./examples/using_make/if_end.ml:5: ?b
368366
./examples/using_make/letIn.mli:1: ?a
369367
./examples/using_make/let_in.ml:1: ?a
370-
./examples/using_make/opt/sig_struct.ml:6: ?x: Should not be detected
371-
./examples/using_make/opt/sig_struct.ml:11: ?x: Should not be detected
372368
./examples/using_make/opt_in_opt.ml:1: ?a
373369
./examples/using_make/opt_in_opt.ml:5: ?a
374370
./examples/using_make/partial_opt.ml:1: ?a
@@ -382,11 +378,8 @@ Nothing else to report in this section
382378

383379
.> OPTIONAL ARGUMENTS: NEVER:
384380
============================
385-
./examples/using_dune/preprocessed_lib/preprocessed.ml:53: ?externally: Should not be detected
386381
./examples/using_dune/preprocessed_lib/preprocessed.ml:53: ?never
387382
./examples/using_dune/preprocessed_lib/preprocessed.ml:65: ?opt
388-
./examples/using_dune/preprocessed_lib/preprocessed.mli:31: ?internally: Should not be detected
389-
./examples/using_dune/preprocessed_lib/preprocessed.mli:31: ?never: Should not be detected
390383
./examples/using_dune/preprocessed_lib/preprocessed_no_intf.ml:53: ?never
391384
./examples/using_dune/preprocessed_lib/preprocessed_no_intf.ml:65: ?opt
392385

@@ -483,7 +476,6 @@ Nothing else to report in this section
483476
./examples/using_make/foo.ml:1: ?a
484477
./examples/using_make/letIn.mli:1: ?b
485478
./examples/using_make/let_in.ml:1: ?c
486-
./examples/using_make/opt/sig_struct.ml:2: ?x: Should not be detected
487479
./examples/using_make/opt_in_opt.ml:2: ?a
488480
./examples/using_make/opt_in_opt.ml:2: ?b
489481
./examples/using_make/record.ml:12: ?b
@@ -541,7 +533,7 @@ Nothing else to report in this section
541533
--------------------------------------------------------------------------------
542534

543535

544-
Total: 471
545-
Success: 440
546-
Failed: 31
547-
Ratio: 93.4182590234%
536+
Total: 460
537+
Success: 457
538+
Failed: 3
539+
Ratio: 99.347826087%

0 commit comments

Comments
 (0)