JP Simard 2023-04-13 14:04:43 -04:00 committed by GitHub
parent 409f117da9
commit 70a56a1420
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
34 changed files with 79 additions and 96 deletions

View File

@ -32,8 +32,8 @@
"kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-syntax.git",
"state" : {
"revision" : "07c08da983b2815a0acc8e3a477573e4c663b158",
"version" : "509.0.0-swift-DEVELOPMENT-SNAPSHOT-2023-03-17-a"
"revision" : "2a9988f32c3439b1c850673cfccb085ddcde1395",
"version" : "509.0.0-swift-5.9-DEVELOPMENT-SNAPSHOT-2023-04-10-a"
}
},
{

View File

@ -31,7 +31,7 @@ let package = Package(
],
dependencies: [
.package(url: "https://github.com/apple/swift-argument-parser.git", .upToNextMinor(from: "1.2.1")),
.package(url: "https://github.com/apple/swift-syntax.git", exact: "509.0.0-swift-DEVELOPMENT-SNAPSHOT-2023-03-17-a"),
.package(url: "https://github.com/apple/swift-syntax.git", exact: "509.0.0-swift-5.9-DEVELOPMENT-SNAPSHOT-2023-04-10-a"),
.package(url: "https://github.com/jpsim/SourceKitten.git", .upToNextMinor(from: "0.34.1")),
.package(url: "https://github.com/jpsim/Yams.git", from: "5.0.5"),
.package(url: "https://github.com/scottrhoyt/SwiftyTextTable.git", from: "0.9.0"),

View File

@ -231,7 +231,7 @@ extension FunctionDeclSyntax {
name += "("
let params = signature.input.parameterList.compactMap { param in
(param.firstName ?? param.secondName)?.text.appending(":")
param.firstName.text.appending(":")
}
name += params.joined()

View File

@ -8,7 +8,7 @@ extension SyntaxClassification {
return true
case .none, .keyword, .identifier, .typeIdentifier, .operatorIdentifier, .dollarIdentifier, .integerLiteral,
.floatingLiteral, .stringLiteral, .stringInterpolationAnchor, .poundDirectiveKeyword, .buildConfigId,
.attribute, .objectLiteral, .editorPlaceholder:
.attribute, .objectLiteral, .editorPlaceholder, .regexLiteral:
return false
}
}

View File

@ -82,8 +82,8 @@ enum LegacyFunctionRuleHelper {
}
return expr
.with(\.leadingTrivia, node.leadingTrivia ?? .zero)
.with(\.trailingTrivia, node.trailingTrivia ?? .zero)
.with(\.leadingTrivia, node.leadingTrivia)
.with(\.trailingTrivia, node.trailingTrivia)
}
}
}

View File

@ -47,13 +47,13 @@ private extension BlockBasedKVORule {
case let parameterList = node.signature.input.parameterList,
parameterList.count == 4,
node.identifier.text == "observeValue",
parameterList.compactMap(\.firstName?.text) == ["forKeyPath", "of", "change", "context"]
parameterList.map(\.firstName.text) == ["forKeyPath", "of", "change", "context"]
else {
return
}
let types = parameterList
.compactMap { $0.type?.trimmedDescription.replacingOccurrences(of: " ", with: "") }
.map { $0.type.trimmedDescription.replacingOccurrences(of: " ", with: "") }
let firstTypes = ["String?", "Any?", "[NSKeyValueChangeKey:Any]?", "UnsafeMutableRawPointer?"]
let secondTypes = ["String?", "Any?", "Dictionary<NSKeyValueChangeKey,Any>?", "UnsafeMutableRawPointer?"]
if types == firstTypes || types == secondTypes {

View File

@ -104,20 +104,20 @@ private extension FunctionSignatureSyntax {
private extension FunctionParameterSyntax {
var isClosure: Bool {
if isEscaping || type?.as(FunctionTypeSyntax.self) != nil {
if isEscaping || type.is(FunctionTypeSyntax.self) {
return true
}
if let optionalType = type?.as(OptionalTypeSyntax.self),
if let optionalType = type.as(OptionalTypeSyntax.self),
let tuple = optionalType.wrappedType.as(TupleTypeSyntax.self) {
return tuple.elements.onlyElement?.type.as(FunctionTypeSyntax.self) != nil
}
if let tuple = type?.as(TupleTypeSyntax.self) {
if let tuple = type.as(TupleTypeSyntax.self) {
return tuple.elements.onlyElement?.type.as(FunctionTypeSyntax.self) != nil
}
if let attrType = type?.as(AttributedTypeSyntax.self) {
if let attrType = type.as(AttributedTypeSyntax.self) {
return attrType.baseType.is(FunctionTypeSyntax.self)
}
@ -125,7 +125,7 @@ private extension FunctionParameterSyntax {
}
var isEscaping: Bool {
guard let attrType = type?.as(AttributedTypeSyntax.self) else {
guard let attrType = type.as(AttributedTypeSyntax.self) else {
return false
}

View File

@ -63,8 +63,8 @@ private extension LegacyConstantRule {
correctionPositions.append(node.positionAfterSkippingLeadingTrivia)
return ("\(raw: correction)" as ExprSyntax)
.with(\.leadingTrivia, node.leadingTrivia ?? .zero)
.with(\.trailingTrivia, node.trailingTrivia ?? .zero)
.with(\.leadingTrivia, node.leadingTrivia)
.with(\.trailingTrivia, node.trailingTrivia)
}
override func visit(_ node: FunctionCallExprSyntax) -> ExprSyntax {
@ -78,8 +78,8 @@ private extension LegacyConstantRule {
correctionPositions.append(node.positionAfterSkippingLeadingTrivia)
return ("\(raw: calledExpression.identifier.text).pi" as ExprSyntax)
.with(\.leadingTrivia, node.leadingTrivia ?? .zero)
.with(\.trailingTrivia, node.trailingTrivia ?? .zero)
.with(\.leadingTrivia, node.leadingTrivia)
.with(\.trailingTrivia, node.trailingTrivia)
}
}
}

View File

@ -80,8 +80,8 @@ private extension PreferZeroOverExplicitInitRule {
.with(\.base, "\(raw: name)")
return super.visit(
newNode
.with(\.leadingTrivia, node.leadingTrivia ?? .zero)
.with(\.trailingTrivia, node.trailingTrivia ?? .zero)
.with(\.leadingTrivia, node.leadingTrivia)
.with(\.trailingTrivia, node.trailingTrivia)
)
}
}

View File

@ -252,8 +252,8 @@ private extension ModifierListSyntax {
\.name,
.keyword(
.private,
leadingTrivia: fileprivateModifier.leadingTrivia ?? .zero,
trailingTrivia: fileprivateModifier.trailingTrivia ?? .zero
leadingTrivia: fileprivateModifier.leadingTrivia,
trailingTrivia: fileprivateModifier.trailingTrivia
)
)
)

View File

@ -170,9 +170,9 @@ private extension RedundantOptionalInitializationRule {
return newBinding
}
if binding.trailingComma != nil {
return newBinding.with(\.typeAnnotation, binding.typeAnnotation?.with(\.trailingTrivia, .zero))
return newBinding.with(\.typeAnnotation, binding.typeAnnotation?.with(\.trailingTrivia, Trivia()))
}
return newBinding.with(\.trailingTrivia, binding.initializer?.trailingTrivia ?? .zero)
return newBinding.with(\.trailingTrivia, binding.initializer?.trailingTrivia ?? Trivia())
})
return super.visit(node.with(\.bindings, newBindings))

View File

@ -122,7 +122,7 @@ private class Rewriter: SyntaxRewriter, ViolationsSyntaxRewriter {
correctionPositions.append(node.positionAfterSkippingLeadingTrivia)
let newNode = node
.with(\.initializer, nil)
.with(\.pattern, node.pattern.with(\.trailingTrivia, node.trailingTrivia ?? .zero))
.with(\.pattern, node.pattern.with(\.trailingTrivia, node.trailingTrivia))
return super.visit(newNode)
}
}

View File

@ -79,8 +79,8 @@ private extension ToggleBoolRule {
)
.removingLast()
.removingLast()
.with(\.leadingTrivia, node.leadingTrivia ?? .zero)
.with(\.trailingTrivia, node.trailingTrivia ?? .zero)
.with(\.leadingTrivia, node.leadingTrivia)
.with(\.trailingTrivia, node.trailingTrivia)
return super.visit(newNode)
}

View File

@ -66,7 +66,7 @@ private extension TrailingSemicolonRule {
}
correctionPositions.append(node.positionAfterSkippingLeadingTrivia)
return .unknown("").with(\.trailingTrivia, node.trailingTrivia ?? .zero)
return .unknown("").with(\.trailingTrivia, node.trailingTrivia)
}
}
}

View File

@ -87,8 +87,8 @@ private extension AnyObjectProtocolRule {
\.typeName,
TypeSyntax(
SimpleTypeIdentifierSyntax(name: .identifier("AnyObject"), genericArgumentClause: nil)
.with(\.leadingTrivia, typeName.leadingTrivia ?? .zero)
.with(\.trailingTrivia, typeName.trailingTrivia ?? .zero)
.with(\.leadingTrivia, typeName.leadingTrivia)
.with(\.trailingTrivia, typeName.trailingTrivia)
)
)
)

View File

@ -104,9 +104,9 @@ private extension ClosureSignatureSyntax {
func singleInputParamText() -> String? {
if let list = input?.as(ClosureParamListSyntax.self), list.count == 1 {
return list.onlyElement?.name.text
} else if let clause = input?.as(ParameterClauseSyntax.self), clause.parameterList.count == 1,
} else if let clause = input?.as(ClosureParameterClauseSyntax.self), clause.parameterList.count == 1,
clause.parameterList.first?.secondName == nil {
return clause.parameterList.first?.firstName?.text
return clause.parameterList.first?.firstName.text
} else {
return nil
}

View File

@ -125,13 +125,13 @@ private extension LowerACLThanParentRule {
let newNode: DeclModifierSyntax
if node.name.tokenKind == .keyword(.open) {
newNode = DeclModifierSyntax(
leadingTrivia: node.leadingTrivia ?? .zero,
leadingTrivia: node.leadingTrivia,
name: .keyword(.public),
trailingTrivia: .space
)
} else {
newNode = DeclModifierSyntax(
leadingTrivia: node.leadingTrivia ?? .zero,
leadingTrivia: node.leadingTrivia,
name: .identifier("")
)
}

View File

@ -56,11 +56,9 @@ private extension FunctionDeclSyntax {
parameterList.count == 2,
let lhs = parameterList.first,
let rhs = parameterList.last,
lhs.firstName?.text == "lhs",
rhs.firstName?.text == "rhs",
let lhsTypeDescription = lhs.type?.trimmedDescription,
let rhsTypeDescription = rhs.type?.trimmedDescription,
lhsTypeDescription == rhsTypeDescription
lhs.firstName.text == "lhs",
rhs.firstName.text == "rhs",
lhs.type.trimmedDescription == rhs.type.trimmedDescription
else {
return false
}

View File

@ -224,17 +224,17 @@ private class Rewriter: SyntaxRewriter, ViolationsSyntaxRewriter {
return (nil, declKeyword)
}
var filteredModifiers = [DeclModifierSyntax]()
var leadingTrivia = Trivia.zero
var leadingTrivia = Trivia()
for modifier in modifiers {
let accumulatedLeadingTrivia = leadingTrivia + (modifier.leadingTrivia ?? .zero)
let accumulatedLeadingTrivia = leadingTrivia + (modifier.leadingTrivia)
if modifier.name.tokenKind == .keyword(.private) {
leadingTrivia = accumulatedLeadingTrivia
} else {
filteredModifiers.append(modifier.with(\.leadingTrivia, accumulatedLeadingTrivia))
leadingTrivia = .zero
leadingTrivia = Trivia()
}
}
let declKeyword = declKeyword.with(\.leadingTrivia, leadingTrivia + (declKeyword.leadingTrivia ?? .zero))
let declKeyword = declKeyword.with(\.leadingTrivia, leadingTrivia + (declKeyword.leadingTrivia))
return (ModifierListSyntax(filteredModifiers), declKeyword)
}
}

View File

@ -69,16 +69,13 @@ private extension UnusedClosureParameterRule {
.walk(tree: node.statements, handler: \.identifiers)
guard let params = input.as(ClosureParamListSyntax.self) else {
guard let params = input.as(ParameterClauseSyntax.self) else {
guard let params = input.as(ClosureParameterClauseSyntax.self) else {
return super.visit(node)
}
var newParams = params
for (index, param) in params.parameterList.enumerated() {
guard let name = param.firstName else {
continue
}
let name = param.firstName
if name.tokenKind == .wildcard {
continue
} else if referencedIdentifiers.contains(name.text.removingDollarsAndBackticks) {
@ -148,17 +145,15 @@ private extension ClosureExprSyntax {
name: param.name.text.removingDollarsAndBackticks
)
}
} else if let params = signature?.input?.as(ParameterClauseSyntax.self)?.parameterList {
} else if let params = signature?.input?.as(ClosureParameterClauseSyntax.self)?.parameterList {
return params.compactMap { param in
if param.firstName?.tokenKind == .wildcard {
if param.firstName.tokenKind == .wildcard {
return nil
}
return param.firstName.map { name in
ClosureParam(
position: name.positionAfterSkippingLeadingTrivia,
name: name.text.removingDollarsAndBackticks
)
}
return ClosureParam(
position: param.firstName.positionAfterSkippingLeadingTrivia,
name: param.firstName.text.removingDollarsAndBackticks
)
}
} else {
return []

View File

@ -122,7 +122,7 @@ private extension UnusedControlFlowLabelRule {
return super.visit(node)
}
let newNode = node.statement.with(\.leadingTrivia, node.leadingTrivia ?? .zero)
let newNode = node.statement.with(\.leadingTrivia, node.leadingTrivia)
correctionPositions.append(violationPosition)
return visit(newNode).as(StmtSyntax.self) ?? newNode
}

View File

@ -68,10 +68,10 @@ private extension AttributesRule {
}
let hasMultipleNewlines = node.children(viewMode: .sourceAccurate).enumerated().contains { index, element in
if index > 0 && element.leadingTrivia?.hasMultipleNewlines == true {
if index > 0 && element.leadingTrivia.hasMultipleNewlines == true {
return true
} else {
return element.trailingTrivia?.hasMultipleNewlines == true
return element.trailingTrivia.hasMultipleNewlines == true
}
}

View File

@ -63,7 +63,7 @@ private extension ClosingBraceRule {
}
correctionPositions.append(node.positionAfterSkippingLeadingTrivia)
return super.visit(node.with(\.trailingTrivia, .zero))
return super.visit(node.with(\.trailingTrivia, Trivia()))
}
}
}

View File

@ -140,7 +140,7 @@ private extension ClosureSignatureSyntax {
if let input = input?.as(ClosureParamListSyntax.self) {
positions.append(contentsOf: input.map(\.positionAfterSkippingLeadingTrivia))
} else if let input = input?.as(ParameterClauseSyntax.self) {
} else if let input = input?.as(ClosureParameterClauseSyntax.self) {
positions.append(contentsOf: input.parameterList.map(\.positionAfterSkippingLeadingTrivia))
}

View File

@ -245,9 +245,9 @@ private class Rewriter: SyntaxRewriter, ViolationsSyntaxRewriter {
item: .stmt(StmtSyntax(returnStmt.with(\.expression, initExpression)))
))
} else {
let leadingTrivia = (varDecl.leadingTrivia?.withoutTrailingIndentation ?? .zero)
+ (varDecl.trailingTrivia ?? .zero)
+ (returnStmt.leadingTrivia?.withFirstEmptyLineRemoved ?? .zero)
let leadingTrivia = varDecl.leadingTrivia.withoutTrailingIndentation +
varDecl.trailingTrivia +
returnStmt.leadingTrivia.withFirstEmptyLineRemoved
newStmtList.append(
CodeBlockItemSyntax(
item: .stmt(

View File

@ -222,7 +222,7 @@ private extension FunctionCallExprSyntax {
if argumentList.allSatisfy({ $0.expression.is(DiscardAssignmentExprSyntax.self) }) {
let newCalledExpression = calledExpression
.with(\.trailingTrivia, rightParen?.trailingTrivia ?? .zero)
.with(\.trailingTrivia, rightParen?.trailingTrivia ?? Trivia())
let newExpression = self
.with(\.calledExpression, ExprSyntax(newCalledExpression))
.with(\.leftParen, nil)

View File

@ -94,7 +94,7 @@ private extension InclusiveLanguageRule {
}
override func visitPost(_ node: FunctionParameterSyntax) {
if let name = node.firstName, let violation = violation(for: name) {
if let violation = violation(for: node.firstName) {
violations.append(violation)
}

View File

@ -194,9 +194,7 @@ private extension MultilineArgumentsBracketsRule {
}
private func hasLeadingNewline(_ syntax: SyntaxProtocol) -> Bool {
guard let leadingTrivia = syntax.leadingTrivia else { return false }
return leadingTrivia.pieces.contains { $0.isNewline }
syntax.leadingTrivia.contains(where: \.isNewline)
}
}
}

View File

@ -98,13 +98,8 @@ private extension NoSpaceInMethodCallRule {
private extension FunctionCallExprSyntax {
var hasNoSpaceInMethodCallViolation: Bool {
guard leftParen != nil,
!calledExpression.is(TupleExprSyntax.self),
let trailingTrivia = calledExpression.trailingTrivia,
trailingTrivia.isNotEmpty else {
return false
}
return true
leftParen != nil &&
!calledExpression.is(TupleExprSyntax.self) &&
calledExpression.trailingTrivia.isNotEmpty
}
}

View File

@ -149,8 +149,8 @@ private extension PreferSelfTypeOverTypeOfSelfRule {
let base = IdentifierExprSyntax(identifier: "Self")
let baseWithTrivia = base
.with(\.leadingTrivia, function.leadingTrivia ?? .zero)
.with(\.trailingTrivia, function.trailingTrivia ?? .zero)
.with(\.leadingTrivia, function.leadingTrivia)
.with(\.trailingTrivia, function.trailingTrivia)
return super.visit(node.with(\.base, ExprSyntax(baseWithTrivia)))
}
}

View File

@ -142,7 +142,7 @@ private final class SelfBindingRuleRewriter: SyntaxRewriter, ViolationsSyntaxRew
identifier: .keyword(
.`self`,
leadingTrivia: .space,
trailingTrivia: identifierPattern.trailingTrivia ?? .space
trailingTrivia: identifierPattern.trailingTrivia
)
)
)

View File

@ -135,7 +135,7 @@ private extension TrailingCommaRule {
switch (lastElement.trailingComma, mandatoryComma) {
case (let commaToken?, false):
correctionPositions.append(commaToken.positionAfterSkippingLeadingTrivia)
let newTrailingTrivia = (lastElement.valueExpression.trailingTrivia ?? .zero)
let newTrailingTrivia = (lastElement.valueExpression.trailingTrivia)
.appending(trivia: commaToken.leadingTrivia)
.appending(trivia: commaToken.trailingTrivia)
let newNode = node
@ -154,7 +154,7 @@ private extension TrailingCommaRule {
with: lastElement
.with(\.trailingTrivia, [])
.with(\.trailingComma, .commaToken())
.with(\.trailingTrivia, lastElement.trailingTrivia ?? .zero)
.with(\.trailingTrivia, lastElement.trailingTrivia)
)
return super.visit(newNode)
case (_, true), (nil, false):
@ -177,7 +177,7 @@ private extension TrailingCommaRule {
with: lastElement
.with(\.trailingComma, nil)
.with(\.trailingTrivia,
(lastElement.expression.trailingTrivia ?? .zero)
(lastElement.expression.trailingTrivia)
.appending(trivia: commaToken.leadingTrivia)
.appending(trivia: commaToken.trailingTrivia)
)
@ -190,7 +190,7 @@ private extension TrailingCommaRule {
with: lastElement
.with(\.expression, lastElement.expression.with(\.trailingTrivia, []))
.with(\.trailingComma, .commaToken())
.with(\.trailingTrivia, lastElement.expression.trailingTrivia ?? .zero)
.with(\.trailingTrivia, lastElement.expression.trailingTrivia)
)
return super.visit(newNode)
case (_, true), (nil, false):

View File

@ -89,9 +89,9 @@ struct UnneededParenthesesInClosureArgumentRule: ConfigurationProviderRule,
private final class Visitor: ViolationsSyntaxVisitor {
override func visitPost(_ node: ClosureSignatureSyntax) {
guard let clause = node.input?.as(ParameterClauseSyntax.self),
!clause.parameterList.contains(where: { $0.type != nil }),
clause.parameterList.isNotEmpty else {
guard let clause = node.input?.as(ClosureParameterClauseSyntax.self),
clause.parameterList.isNotEmpty,
clause.parameterList.allSatisfy({ $0.type == nil }) else {
return
}
@ -111,19 +111,16 @@ private final class Rewriter: SyntaxRewriter, ViolationsSyntaxRewriter {
override func visit(_ node: ClosureSignatureSyntax) -> ClosureSignatureSyntax {
guard
let clause = node.input?.as(ParameterClauseSyntax.self),
!clause.parameterList.contains(where: { $0.type != nil }),
let clause = node.input?.as(ClosureParameterClauseSyntax.self),
clause.parameterList.isNotEmpty,
clause.parameterList.allSatisfy({ $0.type == nil }),
!node.isContainedIn(regions: disabledRegions, locationConverter: locationConverter)
else {
return super.visit(node)
}
let items = clause.parameterList.enumerated().compactMap { idx, param -> ClosureParamSyntax? in
guard let name = param.firstName else {
return nil
}
let name = param.firstName
let isLast = idx == clause.parameterList.count - 1
return ClosureParamSyntax(
name: name,

View File

@ -20,10 +20,10 @@ def swiftlint_repos(bzlmod = False):
http_archive(
name = "com_github_apple_swift_syntax",
sha256 = "0698b10d5784bc91fc60cd740f8c16dbe7debcea67759fdf293bb1c8bdb6eedc", # SwiftSyntax sha256
sha256 = "3b9380abc9a3d15fc718d87f1c278d978078d777bb03e3861b904aad6ef6bb54", # SwiftSyntax sha256
build_file = "@SwiftLint//bazel:SwiftSyntax.BUILD",
strip_prefix = "swift-syntax-509.0.0-swift-DEVELOPMENT-SNAPSHOT-2023-03-17-a",
url = "https://github.com/apple/swift-syntax/archive/refs/tags/509.0.0-swift-DEVELOPMENT-SNAPSHOT-2023-03-17-a.tar.gz",
strip_prefix = "swift-syntax-509.0.0-swift-5.9-DEVELOPMENT-SNAPSHOT-2023-04-10-a",
url = "https://github.com/apple/swift-syntax/archive/refs/tags/509.0.0-swift-5.9-DEVELOPMENT-SNAPSHOT-2023-04-10-a.tar.gz",
)
http_archive(