Skip to content

Commit 1d71bab

Browse files
committed
SuggestUseAutoProperty: don't apply to structs
Don't apply rule to types with `[<Struct>]` annotation, because such types cannot have auto-properties. Fixes #755
1 parent e8701e1 commit 1d71bab

File tree

1 file changed

+31
-15
lines changed

1 file changed

+31
-15
lines changed

src/FSharpLint.Core/Rules/Conventions/SuggestUseAutoProperty.fs

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,18 @@ and isImmutableSequentialExpression args expression =
4444
|| isImmutableValueExpression args expr2)
4545
| _ -> false
4646

47+
let private hasStructAttribute node =
48+
match node with
49+
| AstNode.TypeDefinition(SynTypeDefn(SynComponentInfo(attributes, _, _, _, _, _, _, _), _, _, _, _, _)) ->
50+
attributes
51+
|> extractAttributes
52+
|> List.exists
53+
(fun attribute ->
54+
match List.tryLast attribute.TypeName.LongIdent with
55+
| Some(ident) -> ident.idText = "Struct" || ident.idText = "StructAttribute"
56+
| None -> false)
57+
| _ -> false
58+
4759
let private runner (args: AstNodeRuleParams) =
4860
match args.AstNode with
4961
| MemberDefinition
@@ -73,21 +85,25 @@ let private runner (args: AstNodeRuleParams) =
7385
| _, SynArgPats.Pats pats when pats.Length > 0 -> // non-property member
7486
Array.empty
7587
| expression, _ when isImmutableValueExpression args expression ->
76-
let suggestedFix =
77-
lazy
78-
(match memberIdentifier.LongIdent with
79-
| [ _; memberName ] ->
80-
Some
81-
{ FromText = args.FileContent
82-
FromRange = memberIdentifier.Range
83-
ToText = $"val {memberName.idText}" }
84-
| _ -> None)
85-
86-
{ Range = memberRange
87-
Message = Resources.GetString "RulesSuggestUseAutoProperty"
88-
SuggestedFix = Some suggestedFix
89-
TypeChecks = List.Empty }
90-
|> Array.singleton
88+
match args.GetParents args.NodeIndex with
89+
| parentNode :: _ when hasStructAttribute parentNode ->
90+
Array.empty
91+
| _ ->
92+
let suggestedFix =
93+
lazy
94+
(match memberIdentifier.LongIdent with
95+
| [ _; memberName ] ->
96+
Some
97+
{ FromText = args.FileContent
98+
FromRange = memberIdentifier.Range
99+
ToText = $"val {memberName.idText}" }
100+
| _ -> None)
101+
102+
{ Range = memberRange
103+
Message = Resources.GetString "RulesSuggestUseAutoProperty"
104+
SuggestedFix = Some suggestedFix
105+
TypeChecks = List.Empty }
106+
|> Array.singleton
91107
| _ -> Array.empty
92108
| _ -> Array.empty
93109

0 commit comments

Comments
 (0)