Skip to content

Commit

Permalink
Don't report on module bindings coming from the type of first-class m…
Browse files Browse the repository at this point in the history
…odules.

Fixes #85
  • Loading branch information
cristianoc committed Jan 5, 2021
1 parent 84888be commit 3224b40
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 1 deletion.
1 change: 1 addition & 0 deletions Changes.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# master
- Don't report on module bindings coming from the type of first-class modules (see https://github.com/reason-association/reanalyze/issues/107).
- Fix issue where `emptyArray` was reported unused for lowercase components without children. (See https://github.com/reason-association/reanalyze/issues/85).

# 2.12.0
Expand Down
14 changes: 14 additions & 0 deletions examples/deadcode/src/FC.bs.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 11 additions & 0 deletions examples/deadcode/src/FC.re
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
module type ReplacebleComponent = {
[@react.component]
let make: unit => React.element;
};

let foo = (~impl: (module ReplacebleComponent)) => {
let (module X) = impl;
X.make;
};

Js.log(foo);
8 changes: 8 additions & 0 deletions examples/deadcode/src/deadcode.txt
Original file line number Diff line number Diff line change
Expand Up @@ -425,6 +425,12 @@
addValueDeclaration +x EverythingLiveHere.re:1:4 path:+EverythingLiveHere
addValueDeclaration +y EverythingLiveHere.re:3:4 path:+EverythingLiveHere
addValueDeclaration +z EverythingLiveHere.re:5:4 path:+EverythingLiveHere
Scanning FC.cmt Source:FC.re
addValueDeclaration +foo FC.re:6:4 path:+FC
addValueReference FC.re:7:14 --> FC.re:6:12
addValueReference FC.re:6:4 --> FC.re:2:2
addValueReference FC.re:6:4 --> FC.re:7:6
addValueReference FC.re:11:7 --> FC.re:6:4
Scanning FirstClassModules.cmt Source:FirstClassModules.re
addValueDeclaration +y FirstClassModules.re:17:6 path:+FirstClassModules.M
addValueDeclaration +k FirstClassModules.re:21:8 path:+FirstClassModules.M.InnerModule2
Expand Down Expand Up @@ -1889,6 +1895,7 @@ File References
ErrorHandler.re -->>
ErrorHandler.rei -->> ErrorHandler.re
EverythingLiveHere.re -->>
FC.re -->>
FirstClassModules.re -->>
FirstClassModulesInterface.re -->>
FirstClassModulesInterface.rei -->> FirstClassModulesInterface.re
Expand Down Expand Up @@ -2102,6 +2109,7 @@ File References
Dead Value +EverythingLiveHere.+z: 0 references () [0]
Dead Value +EverythingLiveHere.+y: 0 references () [0]
Dead Value +EverythingLiveHere.+x: 0 references () [0]
Live Value +FC.+foo: 1 references (FC.re:11:7) [0]
Live Value +FirstClassModules.+someFunctorAsFunction: 0 references () [0]
Live Value +FirstClassModules.SomeFunctor.+ww: 1 references (FirstClassModules.re:46:20) [0]
Live Value +FirstClassModules.+testConvert: 0 references () [0]
Expand Down
8 changes: 7 additions & 1 deletion src/DeadValue.re
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,13 @@ let collectValueBinding = (super, self, vb: Typedtree.value_binding) => {
};
let currentModulePath = ModulePath.getCurrent();
let path = currentModulePath.path @ [Common.currentModuleName^];
if (!exists) {

let isFirstClassModule =
switch (vb.vb_expr.exp_type.desc) {
| Tpackage(_) => true
| _ => false
};
if (!exists && !isFirstClassModule) {
// This is never toplevel currently
let isToplevel = oldLastBinding == Location.none;
let sideEffects = SideEffects.checkExpr(vb.vb_expr);
Expand Down

0 comments on commit 3224b40

Please sign in to comment.