File tree Expand file tree Collapse file tree 2 files changed +22
-1
lines changed
Sources/SyntaxSparrow/Internal/Resolvers/Declaration
Tests/SyntaxSparrowTests/Declarations Expand file tree Collapse file tree 2 files changed +22
-1
lines changed Original file line number Diff line number Diff line change @@ -116,6 +116,9 @@ struct VariableSemanticsResolver: SemanticsResolving {
116
116
// Resolver accessors for assessment
117
117
let accessors = resolveAccessors ( )
118
118
let accessorKinds = accessors. compactMap ( \. kind)
119
+ // Only getter accessors mean that there is no setters
120
+ guard accessorKinds != [ . get] else { return false }
121
+ // General setter check
119
122
let hasSetterAccessor = accessorKinds. contains ( where: { [ . set, . willSet, . didSet] . contains ( $0) } )
120
123
let hasEffectGetter = accessors. contains ( where: {
121
124
let hasSpecifier = ( $0. effectSpecifiers? . throwsSpecifier != nil || $0. effectSpecifiers? . asyncSpecifier != nil )
@@ -125,7 +128,7 @@ struct VariableSemanticsResolver: SemanticsResolving {
125
128
guard !hasEffectGetter else { return false }
126
129
// If setter exists in accessors can return true (usually protocol context or manually written will/did/set accessor).
127
130
if hasSetterAccessor { return true }
128
- // If no accessors, but a direct return/code block, can assume there is no setter
131
+ // If no accessors, but a direct return/code block, can assume there is no setter. (computed var)
129
132
if accessors. isEmpty, resolveHasCodeBlockItems ( ) { return false }
130
133
// Otherwise if the keyword is not `let` (immutable)
131
134
guard resolveKeyword ( ) != " let " else { return false }
Original file line number Diff line number Diff line change @@ -66,6 +66,24 @@ final class VariableTests: XCTestCase {
66
66
XCTAssertFalse ( variable. hasSetter)
67
67
}
68
68
69
+ func test_variable_mutable_onlyGetter_willReturnFalseForHasSetter( ) {
70
+ let source = #"""
71
+ var name: String {
72
+ get { "test" }
73
+ }
74
+ var other: String {
75
+ "test"
76
+ }
77
+ """#
78
+ instanceUnderTest. updateToSource ( source)
79
+ XCTAssertTrue ( instanceUnderTest. isStale)
80
+ instanceUnderTest. collectChildren ( )
81
+ XCTAssertFalse ( instanceUnderTest. isStale)
82
+ XCTAssertEqual ( instanceUnderTest. variables. count, 2 )
83
+ XCTAssertFalse ( instanceUnderTest. variables [ 0 ] . hasSetter)
84
+ XCTAssertFalse ( instanceUnderTest. variables [ 1 ] . hasSetter)
85
+ }
86
+
69
87
func test_variable_multiplePatternBindings_willResolveExpectedValues( ) {
70
88
let source = #"""
71
89
var firstName, lastName: String
You can’t perform that action at this time.
0 commit comments