Skip to content

Commit 7352ec5

Browse files
committed
Do not report empty modules when transitive reporting is off.
As the only way for a module to be dead would be for it to be empty.
1 parent 7f3d3e7 commit 7352ec5

File tree

3 files changed

+10
-108
lines changed

3 files changed

+10
-108
lines changed

analysis/reanalyze/examples/deadcode/expected/deadcode.txt

Lines changed: 1 addition & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -2662,10 +2662,6 @@ File References
26622662
File "OptArg.res", line 1, characters 1-49
26632663
optional argument z of function foo is never used
26642664

2665-
Warning Dead Module
2666-
File "AutoAnnotate.res", line 0, characters 1-1
2667-
AutoAnnotate is a dead module as all its items are dead.
2668-
26692665
Warning Dead Type
26702666
File "AutoAnnotate.res", line 1, characters 16-22
26712667
variant.R is a variant case which is never constructed
@@ -2708,10 +2704,6 @@ File References
27082704
<-- line 15
27092705
| @dead("annotatedVariant.R4") R4(r4)
27102706

2711-
Warning Dead Module
2712-
File "BucklescriptAnnotations.res", line 0, characters 1-1
2713-
BucklescriptAnnotations is a dead module as all its items are dead.
2714-
27152707
Warning Dead Value
27162708
File "BucklescriptAnnotations.res", line 25, characters 1-71
27172709
bar is never used
@@ -2730,20 +2722,12 @@ File References
27302722
<-- line 8
27312723
@dead("eToplevel") let eToplevel = Etoplevel
27322724

2733-
Warning Dead Module
2734-
File "DeadMl.ml", line 1, characters 1-121
2735-
DeadMl.QQ is a dead module as all its items are dead.
2736-
27372725
Warning Dead Value
27382726
File "DeadMl.ml", line 3, characters 5-94
27392727
QQ.thisSpansSeveralLines is never used
27402728
<-- line 3
27412729
x + y : int -> int -> int) [@@dead "QQ.thisSpansSeveralLines"]
27422730

2743-
Warning Dead Module
2744-
File "DeadMl.ml", line 8, characters 1-104
2745-
DeadMl.AA is a dead module as all its items are dead.
2746-
27472731
Warning Dead Value
27482732
File "DeadMl.ml", line 9, characters 3-41
27492733
AA.thisIsInInterface is never used
@@ -2774,10 +2758,6 @@ File References
27742758
<-- line 17
27752759
type thisIsDead = | DeadA [@dead "thisIsDead.DeadA"] | DeadB [@dead "thisIsDead.DeadB"]
27762760

2777-
Warning Dead Module
2778-
File "DeadMl.ml", line 25, characters 1-257
2779-
DeadMl.Bs_version is a dead module as all its items are dead.
2780-
27812761
Warning Dead Value
27822762
File "DeadMl.ml", line 26, characters 7-27
27832763
Bs_version.version is never used
@@ -2916,10 +2896,6 @@ File References
29162896
<-- line 2
29172897
@dead("fortytwo") let fortytwo = 42
29182898

2919-
Warning Dead Module
2920-
File "DeadTest.res", line 27, characters 8-98
2921-
DeadTest.M is a dead module as all its items are dead.
2922-
29232899
Warning Dead Value
29242900
File "DeadTest.res", line 31, characters 3-35
29252901
M.thisSignatureItemIsDead is never used
@@ -2974,10 +2950,6 @@ File References
29742950
<-- line 96
29752951
@dead("withDefaultValue") let withDefaultValue = (~paramWithDefault=3, y) => paramWithDefault + y
29762952

2977-
Warning Dead Module
2978-
File "DeadTest.res", line 110, characters 8-414
2979-
DeadTest.LazyDynamicallyLoadedComponent2 is a dead module as all its items are dead.
2980-
29812953
Warning Dead Value
29822954
File "DeadTest.res", line 114, characters 3-55
29832955
LazyDynamicallyLoadedComponent2.makeProps is never used
@@ -3024,20 +2996,12 @@ File References
30242996
<-- line 175
30252997
type rc = {@dead("rc.a") a: int}
30262998

3027-
Warning Dead Module
3028-
File "DeadTestBlacklist.res", line 0, characters 1-1
3029-
DeadTestBlacklist is a dead module as all its items are dead.
3030-
30312999
Warning Dead Value
30323000
File "DeadTestBlacklist.res", line 1, characters 1-11
30333001
x is never used
30343002
<-- line 1
30353003
@dead("x") let x = 34
30363004

3037-
Warning Dead Module
3038-
File "DeadTestWithInterface.res", line 1, characters 8-55
3039-
DeadTestWithInterface.Ext_buffer is a dead module as all its items are dead.
3040-
30413005
Warning Dead Value
30423006
File "DeadTestWithInterface.res", line 2, characters 3-13
30433007
Ext_buffer.x is never used
@@ -3104,20 +3068,12 @@ File References
31043068
<-- line 61
31053069
| @dead("t.B") B
31063070

3107-
Warning Dead Module
3108-
File "ErrorHandler.resi", line 0, characters 1-1
3109-
ErrorHandler is a dead module as all its items are dead.
3110-
31113071
Warning Dead Value
31123072
File "ErrorHandler.resi", line 10, characters 1-11
31133073
x is never used
31143074
<-- line 10
31153075
@dead("x") let x: int
31163076

3117-
Warning Dead Module
3118-
File "EverythingLiveHere.res", line 0, characters 1-1
3119-
EverythingLiveHere is a dead module as all its items are dead.
3120-
31213077
Warning Dead Value
31223078
File "EverythingLiveHere.res", line 1, characters 1-10
31233079
x is never used
@@ -3136,10 +3092,6 @@ File References
31363092
<-- line 5
31373093
@dead("z") let z = 4
31383094

3139-
Warning Dead Module
3140-
File "FirstClassModulesInterface.res", line 0, characters 1-1
3141-
FirstClassModulesInterface is a dead module as all its items are dead.
3142-
31433095
Warning Dead Type
31443096
File "FirstClassModulesInterface.res", line 2, characters 3-9
31453097
record.x is a record label never used to read a value
@@ -3152,10 +3104,6 @@ File References
31523104
<-- line 3
31533105
@dead("record.y") y: string,
31543106

3155-
Warning Dead Module
3156-
File "FirstClassModulesInterface.resi", line 0, characters 1-1
3157-
FirstClassModulesInterface is a dead module as all its items are dead.
3158-
31593107
Warning Dead Type
31603108
File "FirstClassModulesInterface.resi", line 3, characters 3-9
31613109
record.x is a record label never used to read a value
@@ -3588,40 +3536,24 @@ File References
35883536
<-- line 12
35893537
@dead("make") let make = make
35903538

3591-
Warning Dead Module
3592-
File "JsxV4.res", line 3, characters 8-62
3593-
JsxV4.C is a dead module as all its items are dead.
3594-
35953539
Warning Dead Value
35963540
File "JsxV4.res", line 4, characters 20-47
35973541
C.make is never used
35983542
<-- line 4
35993543
@react.component @dead("C.make") let make = () => React.null
36003544

3601-
Warning Dead Module
3602-
File "ModuleAliases.res", line 2, characters 10-57
3603-
ModuleAliases.Outer.Inner is a dead module as all its items are dead.
3604-
36053545
Warning Dead Type
36063546
File "ModuleAliases.res", line 3, characters 20-33
36073547
Outer.Inner.innerT.inner is a record label never used to read a value
36083548
<-- line 3
36093549
type innerT = {@dead("Outer.Inner.innerT.inner") inner: string}
36103550

3611-
Warning Dead Module
3612-
File "ModuleAliases.res", line 10, characters 12-62
3613-
ModuleAliases.Outer2.Inner2.InnerNested is a dead module as all its items are dead.
3614-
36153551
Warning Dead Type
36163552
File "ModuleAliases.res", line 11, characters 17-28
36173553
Outer2.Inner2.InnerNested.t.nested is a record label never used to read a value
36183554
<-- line 11
36193555
type t = {@dead("Outer2.Inner2.InnerNested.t.nested") nested: int}
36203556

3621-
Warning Dead Module
3622-
File "ModuleAliases2.res", line 0, characters 1-1
3623-
ModuleAliases2 is a dead module as all its items are dead.
3624-
36253557
Warning Dead Type
36263558
File "ModuleAliases2.res", line 3, characters 3-9
36273559
record.x is a record label never used to read a value
@@ -3634,20 +3566,12 @@ File References
36343566
<-- line 4
36353567
@dead("record.y") y: string,
36363568

3637-
Warning Dead Module
3638-
File "ModuleAliases2.res", line 7, characters 8-131
3639-
ModuleAliases2.Outer is a dead module as all its items are dead.
3640-
36413569
Warning Dead Type
36423570
File "ModuleAliases2.res", line 9, characters 17-30
36433571
Outer.outer.outer is a record label never used to read a value
36443572
<-- line 9
36453573
type outer = {@dead("Outer.outer.outer") outer: string}
36463574

3647-
Warning Dead Module
3648-
File "ModuleAliases2.res", line 11, characters 10-69
3649-
ModuleAliases2.Outer.Inner is a dead module as all its items are dead.
3650-
36513575
Warning Dead Type
36523576
File "ModuleAliases2.res", line 13, characters 19-32
36533577
Outer.Inner.inner.inner is a record label never used to read a value
@@ -3660,10 +3584,6 @@ File References
36603584
<-- line 21
36613585
@dead("q") let q = 42
36623586

3663-
Warning Dead Module
3664-
File "ModuleExceptionBug.res", line 1, characters 8-53
3665-
ModuleExceptionBug.Dep is a dead module as all its items are dead.
3666-
36673587
Warning Dead Value
36683588
File "ModuleExceptionBug.res", line 2, characters 3-36
36693589
Dep.customDouble is never used
@@ -3730,10 +3650,6 @@ File References
37303650
<-- line 47
37313651
| @dead("Universe.variant.B") B(string)
37323652

3733-
Warning Dead Module
3734-
File "Newsyntax.res", line 0, characters 1-1
3735-
Newsyntax is a dead module as all its items are dead.
3736-
37373653
Warning Dead Value
37383654
File "Newsyntax.res", line 1, characters 1-11
37393655
x is never used
@@ -3914,10 +3830,6 @@ File References
39143830
<-- line 11
39153831
type toPayload = {@dead("toPayload.result") result: string}
39163832

3917-
Warning Dead Module
3918-
File "TransitiveType2.res", line 0, characters 1-1
3919-
TransitiveType2 is a dead module as all its items are dead.
3920-
39213833
Warning Dead Value
39223834
File "TransitiveType2.res", line 7, characters 1-29
39233835
convertT2 is never used
@@ -3936,20 +3848,12 @@ File References
39363848
<-- line 4
39373849
@dead("t3.s") s: string,
39383850

3939-
Warning Dead Module
3940-
File "TypeParams1.res", line 0, characters 1-1
3941-
TypeParams1 is a dead module as all its items are dead.
3942-
39433851
Warning Dead Value
39443852
File "TypeParams1.res", line 4, characters 1-25
39453853
exportSomething is never used
39463854
<-- line 4
39473855
@dead("exportSomething") let exportSomething = 10
39483856

3949-
Warning Dead Module
3950-
File "TypeParams2.res", line 0, characters 1-1
3951-
TypeParams2 is a dead module as all its items are dead.
3952-
39533857
Warning Dead Type
39543858
File "TypeParams2.res", line 2, characters 14-21
39553859
item.id is a record label never used to read a value
@@ -4010,10 +3914,6 @@ File References
40103914
<-- line 133
40113915
type someRecord = {@dead("someRecord.id") id: int}
40123916

4013-
Warning Dead Module
4014-
File "Types.res", line 161, characters 8-80
4015-
Types.ObjectId is a dead module as all its items are dead.
4016-
40173917
Warning Dead Value
40183918
File "Types.res", line 166, characters 3-12
40193919
ObjectId.x is never used
@@ -4122,4 +4022,4 @@ File References
41224022
<-- line 96
41234023
type variant1Object = | @dead("variant1Object.R") R(payload)
41244024

4125-
Analysis reported 269 issues (Incorrect Dead Annotation:1, Warning Dead Exception:2, Warning Dead Module:25, Warning Dead Type:89, Warning Dead Value:135, Warning Dead Value With Side Effects:1, Warning Redundant Optional Argument:5, Warning Unused Argument:11)
4025+
Analysis reported 244 issues (Incorrect Dead Annotation:1, Warning Dead Exception:2, Warning Dead Type:89, Warning Dead Value:135, Warning Dead Value With Side Effects:1, Warning Redundant Optional Argument:5, Warning Unused Argument:11)

analysis/reanalyze/src/DeadCommon.ml

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -406,9 +406,10 @@ let emitWarning ~decl ~message deadWarning =
406406
WriteDeadAnnotations.addLineAnnotation ~decl
407407
else None
408408
in
409-
decl.path
410-
|> Path.toModuleName ~isType:(decl.declKind |> DeclKind.isType)
411-
|> DeadModules.checkModuleDead ~fileName:decl.pos.pos_fname;
409+
if Config.reportTransitive then
410+
decl.path
411+
|> Path.toModuleName ~isType:(decl.declKind |> DeclKind.isType)
412+
|> DeadModules.checkModuleDead ~fileName:decl.pos.pos_fname;
412413
Log_.warning ~loc
413414
(DeadWarning
414415
{
@@ -555,9 +556,10 @@ module Decl = struct
555556
&& (Config.reportTransitive || not (hasRefBelow ()))
556557
in
557558
if shouldEmitWarning then (
558-
decl.path
559-
|> Path.toModuleName ~isType:(decl.declKind |> DeclKind.isType)
560-
|> DeadModules.checkModuleDead ~fileName:decl.pos.pos_fname;
559+
if Config.reportTransitive then
560+
decl.path
561+
|> Path.toModuleName ~isType:(decl.declKind |> DeclKind.isType)
562+
|> DeadModules.checkModuleDead ~fileName:decl.pos.pos_fname;
561563
emitWarning ~decl ~message name)
562564
end
563565

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
DCE src/Dce.res
2-
issues:2
2+
issues:0
33

0 commit comments

Comments
 (0)