@@ -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+
4759let 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