Skip to content

Commit 179103d

Browse files
committed
Improve unused parameter location identification. Closes #243
1 parent de01261 commit 179103d

File tree

5 files changed

+56
-7
lines changed

5 files changed

+56
-7
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
##### Bug Fixes
1212

13-
- None.
13+
- Improve unused parameter location identification.
1414

1515
## 2.3.2 (2020-12-10)
1616

Sources/PeripheryKit/Syntax/UnusedParameterParser.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -232,14 +232,14 @@ struct UnusedParameterParser {
232232
metatype = metatypeSyntax.description
233233
}
234234

235-
// Position is off by one, advance forward so that we can identify the correct line of param lists that span
236-
// multiple lines.
237-
let position = AbsolutePosition(utf8Offset: syntax.position.utf8Offset + 1)
235+
let positionSyntax: SyntaxProtocol = (syntax.secondName ?? syntax.firstName) ?? syntax
236+
let absolutePosition = AbsolutePosition(utf8Offset: positionSyntax.position.utf8Offset + positionSyntax.leadingTriviaLength.utf8Length)
237+
let location = sourceLocation(of: absolutePosition)
238238

239239
return Parameter(firstName: syntax.firstName?.text,
240240
secondName: syntax.secondName?.text,
241241
metatype: metatype,
242-
location: sourceLocation(of: position))
242+
location: location)
243243
}
244244

245245
private func parse<T>(closureExpr syntax: ClosureExprSyntax, _ collector: Collector<T>?) -> Closure? {

Tests/PeripheryTests/Syntax/UnusedParameterTest.swift

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,23 @@ class UnusedParameterTest: XCTestCase {
115115
XCTAssertUsed("param", of: "init(param:)")
116116
}
117117

118+
func testParameterPosition() {
119+
analyze()
120+
let function = functions.first!
121+
122+
let param1 = function.parameters.first { $0.name == "param1" }!
123+
try XCTAssertEqual(XCTUnwrap(param1.location.line), 4)
124+
try XCTAssertEqual(XCTUnwrap(param1.location.column), 17)
125+
126+
let param2 = function.parameters.first { $0.name == "param2" }!
127+
try XCTAssertEqual(XCTUnwrap(param2.location.line), 4)
128+
try XCTAssertEqual(XCTUnwrap(param2.location.column), 38)
129+
130+
let param3 = function.parameters.first { $0.name == "param3" }!
131+
try XCTAssertEqual(XCTUnwrap(param3.location.line), 4)
132+
try XCTAssertEqual(XCTUnwrap(param3.location.column), 56)
133+
}
134+
118135
func testInitializerPosition() {
119136
analyze()
120137

@@ -134,10 +151,30 @@ class UnusedParameterTest: XCTestCase {
134151
func testMultiLineParameterPosition() {
135152
analyze()
136153
let function = functions.first!
154+
137155
let param1 = function.parameters.first { $0.name == "param1" }!
138-
let param2 = function.parameters.first { $0.name == "param2" }!
139156
try XCTAssertEqual(XCTUnwrap(param1.location.line), 4)
157+
try XCTAssertEqual(XCTUnwrap(param1.location.column), 17)
158+
159+
let param2 = function.parameters.first { $0.name == "param2" }!
140160
try XCTAssertEqual(XCTUnwrap(param2.location.line), 5)
161+
try XCTAssertEqual(XCTUnwrap(param2.location.column), 17)
162+
163+
let param3 = function.parameters.first { $0.name == "param3" }!
164+
try XCTAssertEqual(XCTUnwrap(param3.location.line), 7)
165+
try XCTAssertEqual(XCTUnwrap(param3.location.column), 17)
166+
167+
let param4 = function.parameters.first { $0.name == "param4" }!
168+
try XCTAssertEqual(XCTUnwrap(param4.location.line), 8)
169+
try XCTAssertEqual(XCTUnwrap(param4.location.column), 19)
170+
171+
let param5 = function.parameters.first { $0.name == "param5" }!
172+
try XCTAssertEqual(XCTUnwrap(param5.location.line), 9)
173+
try XCTAssertEqual(XCTUnwrap(param5.location.column), 22)
174+
175+
let param6 = function.parameters.first { $0.name == "param6" }!
176+
try XCTAssertEqual(XCTUnwrap(param6.location.line), 11)
177+
try XCTAssertEqual(XCTUnwrap(param6.location.column), 21)
141178
}
142179

143180
func testIBActionAnnotatedFunction() {

Tests/SyntaxFixtures/testMultiLineParameterPosition.swift

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,12 @@ import Foundation
22

33
class SyntaxFixture12 {
44
func myFunc(param1: String,
5-
param2: String) {}
5+
param2: String,
6+
// Some comment.
7+
param3: String,
8+
_ param4: String,
9+
with param5: String,
10+
_ // Another comment.
11+
param6: String
12+
) {}
613
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import Foundation
2+
3+
class SyntaxFixture23 {
4+
func myFunc(param1: String, with param2: String, _ param3: String) {}
5+
}

0 commit comments

Comments
 (0)