Skip to content

Support @dead and @live annotations on inline records. #859

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Dec 7, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 18 additions & 2 deletions analysis/reanalyze/examples/deadcode/expected/deadcode.txt
Original file line number Diff line number Diff line change
Expand Up @@ -256,15 +256,23 @@
addRecordLabelDeclaration IR.a DeadTest.res:182:24 path:+DeadTest.inlineRecord
addRecordLabelDeclaration IR.b DeadTest.res:182:32 path:+DeadTest.inlineRecord
addRecordLabelDeclaration IR.c DeadTest.res:182:40 path:+DeadTest.inlineRecord
addRecordLabelDeclaration IR.d DeadTest.res:182:51 path:+DeadTest.inlineRecord
addRecordLabelDeclaration IR.e DeadTest.res:182:65 path:+DeadTest.inlineRecord
addVariantCaseDeclaration IR DeadTest.res:182:20 path:+DeadTest.inlineRecord
addValueDeclaration +_ DeadTest.res:185:0 path:+DeadTest
addTypeReference DeadTest.res:187:20 --> DeadTest.res:182:20
addValueReference DeadTest.res:187:27 --> DeadTest.res:184:4
addTypeReference DeadTest.res:187:35 --> DeadTest.res:182:32
addValueReference DeadTest.res:187:35 --> DeadTest.res:187:7
addValueReference DeadTest.res:187:43 --> DeadTest.res:187:8
addValueReference DeadTest.res:187:40 --> DeadTest.res:187:8
addTypeReference DeadTest.res:187:7 --> DeadTest.res:182:40
addValueReference DeadTest.res:186:9 --> DeadTest.res:185:8
addRecordLabelDeclaration IR2.a DeadTest.res:191:26 path:+DeadTest.inlineRecord2
addRecordLabelDeclaration IR2.b DeadTest.res:191:34 path:+DeadTest.inlineRecord2
addVariantCaseDeclaration IR2 DeadTest.res:191:21 path:+DeadTest.inlineRecord2
addRecordLabelDeclaration IR3.a DeadTest.res:193:34 path:+DeadTest.inlineRecord3
addRecordLabelDeclaration IR3.b DeadTest.res:193:42 path:+DeadTest.inlineRecord3
addVariantCaseDeclaration IR3 DeadTest.res:193:21 path:+DeadTest.inlineRecord3
addValueReference DeadTest.res:28:2 --> DeadTest.res:31:6
addValueReference DeadTest.res:36:2 --> DeadTest.res:39:6
addValueReference DeadTest.res:60:2 --> DeadTest.res:64:6
Expand Down Expand Up @@ -2024,8 +2032,16 @@ File References
Live VariantCase DeadRT.moduleAccessPath.Root: 1 references (DeadTest.res:106:16) [1]
Live VariantCase +DeadRT.moduleAccessPath.Root: 1 references (DeadRT.resi:2:2) [0]
Live VariantCase DeadRT.moduleAccessPath.Kaboom: 1 references (DeadRT.res:3:2) [0]
Dead RecordLabel +DeadTest.inlineRecord3.IR3.b: 0 references () [0]
Dead RecordLabel +DeadTest.inlineRecord3.IR3.a: 0 references () [0]
Dead VariantCase +DeadTest.inlineRecord3.IR3: 0 references () [0]
Dead RecordLabel +DeadTest.inlineRecord2.IR2.b: 0 references () [0]
Dead RecordLabel +DeadTest.inlineRecord2.IR2.a: 0 references () [0]
Dead VariantCase +DeadTest.inlineRecord2.IR2: 0 references () [0]
Dead Value +DeadTest.+_: 0 references () [0]
Live Value +DeadTest.+ira: 1 references (DeadTest.res:187:27) [0]
Live RecordLabel +DeadTest.inlineRecord.IR.e: 0 references () [0]
Dead RecordLabel +DeadTest.inlineRecord.IR.d: 0 references () [0]
Live RecordLabel +DeadTest.inlineRecord.IR.c: 1 references (DeadTest.res:187:7) [0]
Live RecordLabel +DeadTest.inlineRecord.IR.b: 1 references (DeadTest.res:187:35) [0]
Dead RecordLabel +DeadTest.inlineRecord.IR.a: 0 references () [0]
Expand Down Expand Up @@ -3113,7 +3129,7 @@ File References
DeadTest.res:182:25-30
inlineRecord.IR.a is a record label never used to read a value
<-- line 182
type inlineRecord = IR({@dead("inlineRecord.IR.a") a: int, b: int, c: string})
type inlineRecord = IR({@dead("inlineRecord.IR.a") a: int, b: int, c: string, @dead d: int, @live e: int})

Warning Dead Module
DeadTestBlacklist.res:0:1
Expand Down
9 changes: 7 additions & 2 deletions analysis/reanalyze/examples/deadcode/src/DeadTest.res
Original file line number Diff line number Diff line change
Expand Up @@ -179,10 +179,15 @@ let deadIncorrect = 34

let _ = deadIncorrect

type inlineRecord = IR({a: int, b: int, c: string})
type inlineRecord = IR({a: int, b: int, c: string, @dead d: int, @live e: int})

let ira = 10
let _ = ir =>
switch ir {
| IR({c} as r) => IR({a: ira, b: r.b, c: c})
| IR({c} as r) => IR({a: ira, b: r.b, c, d: 0, e: 0})
}

@dead
type inlineRecord2 = IR2({a: int, b: int})

type inlineRecord3 = | @dead IR3({a: int, b: int})
16 changes: 15 additions & 1 deletion analysis/reanalyze/src/DeadCommon.ml
Original file line number Diff line number Diff line change
Expand Up @@ -266,8 +266,22 @@ module ProcessDeadAnnotations = struct
| Ttype_variant constructorDeclarations ->
constructorDeclarations
|> List.iter
(fun ({cd_attributes; cd_loc} : Typedtree.constructor_declaration)
(fun
({cd_attributes; cd_loc; cd_args} :
Typedtree.constructor_declaration)
->
let _process_inline_records =
match cd_args with
| Cstr_record flds ->
List.iter
(fun ({ld_attributes; ld_loc} :
Typedtree.label_declaration) ->
toplevelAttrs @ cd_attributes @ ld_attributes
|> processAttributes ~doGenType:false ~name:""
~pos:ld_loc.loc_start)
flds
| Cstr_tuple _ -> ()
in
toplevelAttrs @ cd_attributes
|> processAttributes ~doGenType:false ~name:""
~pos:cd_loc.loc_start)
Expand Down
4 changes: 2 additions & 2 deletions analysis/src/SharedTypes.ml
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ module Module = struct
docstring: string list;
exported: Exported.t;
items: item list;
deprecated: string option
deprecated: string option;
}

and t = Ident of Path.t | Structure of structure | Constraint of t * t
Expand Down Expand Up @@ -259,7 +259,7 @@ module File = struct
docstring = [];
exported = Exported.init ();
items = [];
deprecated = None
deprecated = None;
};
}
end
Expand Down