diff --git a/Package.resolved b/Package.resolved index 76b38d452..af79943a9 100644 --- a/Package.resolved +++ b/Package.resolved @@ -57,10 +57,10 @@ { "identity" : "swift-syntax", "kind" : "remoteSourceControl", - "location" : "https://github.com/peripheryapp/swift-syntax", + "location" : "https://github.com/apple/swift-syntax", "state" : { - "revision" : "56ef324e094ad1e655ae7d8c8dabadc7e6bd64e9", - "version" : "1.0.2" + "revision" : "74203046135342e4a4a627476dd6caf8b28fe11b", + "version" : "509.0.0" } }, { @@ -77,8 +77,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/tuist/xcodeproj", "state" : { - "revision" : "6e60fb55271c80f83a186c9b1b4982fd991cfc0a", - "version" : "8.13.0" + "revision" : "3797181813ee963fe305d939232bc576d23ddbb0", + "version" : "8.15.0" } }, { diff --git a/Package.swift b/Package.swift index 1e6db5ae3..a56a70ba4 100644 --- a/Package.swift +++ b/Package.swift @@ -7,7 +7,7 @@ var dependencies: [Package.Dependency] = [ .package(url: "https://github.com/tadija/AEXML", from: "4.0.0"), .package(url: "https://github.com/apple/swift-argument-parser", from: "1.0.0"), .package(url: "https://github.com/ileitch/swift-indexstore", from: "9.0.3"), - .package(url: "https://github.com/peripheryapp/swift-syntax", exact: "1.0.2"), + .package(url: "https://github.com/apple/swift-syntax", from: "509.0.0"), .package(url: "https://github.com/ileitch/swift-filename-matcher", from: "0.0.0"), ] diff --git a/Sources/PeripheryKit/Syntax/DeclarationSyntaxVisitor.swift b/Sources/PeripheryKit/Syntax/DeclarationSyntaxVisitor.swift index fbd166d6d..dc3a08b2a 100644 --- a/Sources/PeripheryKit/Syntax/DeclarationSyntaxVisitor.swift +++ b/Sources/PeripheryKit/Syntax/DeclarationSyntaxVisitor.swift @@ -46,7 +46,7 @@ final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor { genericParameterClause: node.genericParameterClause, genericWhereClause: node.genericWhereClause, consumeCapitalSelfFunctionCalls: true, - at: node.identifier.positionAfterSkippingLeadingTrivia + at: node.name.positionAfterSkippingLeadingTrivia ) } @@ -57,7 +57,7 @@ final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor { trivia: node.leadingTrivia, inheritanceClause: node.inheritanceClause, genericWhereClause: node.genericWhereClause, - at: node.identifier.positionAfterSkippingLeadingTrivia + at: node.name.positionAfterSkippingLeadingTrivia ) } @@ -70,7 +70,7 @@ final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor { genericParameterClause: node.genericParameterClause, genericWhereClause: node.genericWhereClause, consumeCapitalSelfFunctionCalls: true, - at: node.identifier.positionAfterSkippingLeadingTrivia + at: node.name.positionAfterSkippingLeadingTrivia ) } @@ -82,7 +82,7 @@ final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor { inheritanceClause: node.inheritanceClause, genericParameterClause: node.genericParameterClause, genericWhereClause: node.genericWhereClause, - at: node.identifier.positionAfterSkippingLeadingTrivia + at: node.name.positionAfterSkippingLeadingTrivia ) } @@ -92,8 +92,8 @@ final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor { modifiers: node.modifiers, attributes: node.attributes, trivia: node.leadingTrivia, - enumCaseParameterClause: element.associatedValue, - at: element.identifier.positionAfterSkippingLeadingTrivia + enumCaseParameterClause: element.parameterClause, + at: element.name.positionAfterSkippingLeadingTrivia ) } } @@ -101,7 +101,7 @@ final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor { func visitPost(_ node: ExtensionDeclSyntax) { var position = node.extendedType.positionAfterSkippingLeadingTrivia - if let memberType = node.extendedType.as(MemberTypeIdentifierSyntax.self) { + if let memberType = node.extendedType.as(MemberTypeSyntax.self) { position = memberType.name.positionAfterSkippingLeadingTrivia } @@ -121,11 +121,11 @@ final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor { modifiers: node.modifiers, attributes: node.attributes, trivia: node.leadingTrivia, - parameterClause: node.signature.input, - returnClause: node.signature.output, + parameterClause: node.signature.parameterClause, + returnClause: node.signature.returnClause, genericParameterClause: node.genericParameterClause, genericWhereClause: node.genericWhereClause, - at: node.identifier.positionAfterSkippingLeadingTrivia + at: node.name.positionAfterSkippingLeadingTrivia ) } @@ -134,7 +134,7 @@ final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor { modifiers: node.modifiers, attributes: node.attributes, trivia: node.leadingTrivia, - parameterClause: node.signature.input, + parameterClause: node.signature.parameterClause, genericParameterClause: node.genericParameterClause, genericWhereClause: node.genericWhereClause, at: node.initKeyword.positionAfterSkippingLeadingTrivia @@ -155,8 +155,8 @@ final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor { modifiers: node.modifiers, attributes: node.attributes, trivia: node.leadingTrivia, - parameterClause: node.indices, - returnClause: node.result, + parameterClause: node.parameterClause, + returnClause: node.returnClause, genericParameterClause: node.genericParameterClause, genericWhereClause: node.genericWhereClause, at: node.subscriptKeyword.positionAfterSkippingLeadingTrivia @@ -167,7 +167,7 @@ final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor { for binding in node.bindings { if binding.pattern.is(IdentifierPatternSyntax.self) { let closureSignature = binding.initializer?.value.as(ClosureExprSyntax.self)?.signature - let closureParameters = closureSignature?.input?.as(ClosureParameterClauseSyntax.self) + let closureParameters = closureSignature?.parameterClause?.as(ClosureParameterClauseSyntax.self) let functionCallExpr = binding.initializer?.value.as(FunctionCallExprSyntax.self) parse( modifiers: node.modifiers, @@ -175,7 +175,7 @@ final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor { trivia: node.leadingTrivia, variableType: binding.typeAnnotation?.type, closureParameterClause: closureParameters, - returnClause: closureSignature?.output, + returnClause: closureSignature?.returnClause, variableInitFunctionCallExpr: functionCallExpr, at: binding.positionAfterSkippingLeadingTrivia ) @@ -184,7 +184,7 @@ final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor { node: node, pattern: tuplePatternSyntax, typeTuple: binding.typeAnnotation?.type.as(TupleTypeSyntax.self)?.elements, - initializerTuple: binding.initializer?.value.as(TupleExprSyntax.self)?.elementList) + initializerTuple: binding.initializer?.value.as(TupleExprSyntax.self)?.elements) } else { parse( modifiers: node.modifiers, @@ -196,15 +196,15 @@ final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor { } } - func visitVariableTupleBinding(node: VariableDeclSyntax, pattern: TuplePatternSyntax, typeTuple: TupleTypeElementListSyntax?, initializerTuple: TupleExprElementListSyntax?) { + func visitVariableTupleBinding(node: VariableDeclSyntax, pattern: TuplePatternSyntax, typeTuple: TupleTypeElementListSyntax?, initializerTuple: LabeledExprListSyntax?) { let elements = pattern.elements.map { $0 } let types: [TupleTypeElementSyntax?] = typeTuple?.map { $0 } ?? Array(repeating: nil, count: elements.count) - let initializers: [TupleExprElementSyntax?] = initializerTuple?.map { $0 } ?? Array(repeating: nil, count: elements.count) + let initializers: [LabeledExprSyntax?] = initializerTuple?.map { $0 } ?? Array(repeating: nil, count: elements.count) for (element, (type, initializer)) in zip(elements, zip(types, initializers)) { if let elementTuplePattern = element.pattern.as(TuplePatternSyntax.self) { let typeTuple = type?.type.as(TupleTypeSyntax.self)?.elements - let initializerTuple = initializer?.expression.as(TupleExprSyntax.self)?.elementList + let initializerTuple = initializer?.expression.as(TupleExprSyntax.self)?.elements visitVariableTupleBinding( node: node, @@ -223,7 +223,7 @@ final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor { } } - func visitPost(_ node: TypealiasDeclSyntax) { + func visitPost(_ node: TypeAliasDeclSyntax) { parse( modifiers: node.modifiers, attributes: node.attributes, @@ -231,27 +231,27 @@ final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor { variableType: node.initializer.value, genericParameterClause: node.genericParameterClause, genericWhereClause: node.genericWhereClause, - at: node.identifier.positionAfterSkippingLeadingTrivia + at: node.name.positionAfterSkippingLeadingTrivia ) } - func visitPost(_ node: AssociatedtypeDeclSyntax) { + func visitPost(_ node: AssociatedTypeDeclSyntax) { parse( modifiers: node.modifiers, attributes: node.attributes, trivia: node.leadingTrivia, inheritanceClause: node.inheritanceClause, genericWhereClause: node.genericWhereClause, - at: node.identifier.positionAfterSkippingLeadingTrivia + at: node.name.positionAfterSkippingLeadingTrivia ) } func visitPost(_ node: OperatorDeclSyntax) { parse( - modifiers: node.modifiers, - attributes: node.attributes, + modifiers: nil, + attributes: nil, trivia: node.leadingTrivia, - at: node.identifier.positionAfterSkippingLeadingTrivia + at: node.name.positionAfterSkippingLeadingTrivia ) } @@ -260,13 +260,13 @@ final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor { modifiers: node.modifiers, attributes: node.attributes, trivia: node.leadingTrivia, - at: node.identifier.positionAfterSkippingLeadingTrivia + at: node.name.positionAfterSkippingLeadingTrivia ) } func visit(_ node: FunctionCallExprSyntax) { - if let identifierExpr = node.calledExpression.as(IdentifierExprSyntax.self), - identifierExpr.identifier.tokenKind == .keyword(.Self) { + if let identifierExpr = node.calledExpression.as(DeclReferenceExprSyntax.self), + identifierExpr.baseName.tokenKind == .keyword(.Self) { didVisitCapitalSelfFunctionCall = true } } @@ -274,15 +274,15 @@ final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor { // MARK: - Private private func parse( - modifiers: ModifierListSyntax?, + modifiers: DeclModifierListSyntax?, attributes: AttributeListSyntax?, trivia: Trivia?, variableType: TypeSyntax? = nil, - parameterClause: ParameterClauseSyntax? = nil, + parameterClause: FunctionParameterClauseSyntax? = nil, closureParameterClause: ClosureParameterClauseSyntax? = nil, enumCaseParameterClause: EnumCaseParameterClauseSyntax? = nil, returnClause: ReturnClauseSyntax? = nil, - inheritanceClause: TypeInheritanceClauseSyntax? = nil, + inheritanceClause: InheritanceClauseSyntax? = nil, genericParameterClause: GenericParameterClauseSyntax? = nil, genericWhereClause: GenericWhereClauseSyntax? = nil, variableInitFunctionCallExpr: FunctionCallExprSyntax? = nil, @@ -303,9 +303,9 @@ final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor { } let returnClauseTypeLocations = typeNameLocations(for: returnClause) - let parameterClauseTypes = parameterClause?.parameterList.map { $0.type } ?? [] - let closureParameterClauseTypes = closureParameterClause?.parameterList.compactMap { $0.type } ?? [] - let enumCaseParameterClauseTypes = enumCaseParameterClause?.parameterList.map { $0.type } ?? [] + let parameterClauseTypes = parameterClause?.parameters.map { $0.type } ?? [] + let closureParameterClauseTypes = closureParameterClause?.parameters.compactMap { $0.type } ?? [] + let enumCaseParameterClauseTypes = enumCaseParameterClause?.parameters.map { $0.type } ?? [] let hasGenericFunctionReturnedMetatypeParameters = hasGenericFunctionReturnedMetatypeParameters( genericParameterClause: genericParameterClause, parameterClauseTypes: parameterClauseTypes + closureParameterClauseTypes + enumCaseParameterClauseTypes, @@ -347,7 +347,7 @@ final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor { guard let genericParameterClause else { return false } let genericParameterNames = genericParameterClause - .genericParameterList + .parameters .mapSet { $0.name.trimmedDescription } return parameterClauseTypes @@ -373,10 +373,10 @@ final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor { return typeSyntaxInspector.typeLocations(for: typeSyntax) } - private func typeLocations(for clause: ParameterClauseSyntax?) -> Set { + private func typeLocations(for clause: FunctionParameterClauseSyntax?) -> Set { guard let clause = clause else { return [] } - return clause.parameterList.reduce(into: .init(), { result, param in + return clause.parameters.reduce(into: .init(), { result, param in result.formUnion(typeSyntaxInspector.typeLocations(for: param.type)) }) } @@ -384,7 +384,7 @@ final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor { private func typeLocations(for clause: ClosureParameterClauseSyntax?) -> Set { guard let clause = clause else { return [] } - return clause.parameterList.reduce(into: .init(), { result, param in + return clause.parameters.reduce(into: .init(), { result, param in if let type = param.type { result.formUnion(typeSyntaxInspector.typeLocations(for: type)) } @@ -394,16 +394,16 @@ final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor { private func typeLocations(for clause: EnumCaseParameterClauseSyntax?) -> Set { guard let clause = clause else { return [] } - return clause.parameterList.reduce(into: .init(), { result, param in + return clause.parameters.reduce(into: .init(), { result, param in result.formUnion(typeSyntaxInspector.typeLocations(for: param.type)) }) } private func typeNameLocations(for clause: ReturnClauseSyntax?) -> Set { - guard let returnTypeSyntax = clause?.returnType else { return [] } + guard let returnTypeSyntax = clause?.type else { return [] } - if let someReturnType = returnTypeSyntax.as(ConstrainedSugarTypeSyntax.self) { - return typeSyntaxInspector.typeNameLocations(for: someReturnType.baseType) + if let someReturnType = returnTypeSyntax.as(SomeOrAnyTypeSyntax.self) { + return typeSyntaxInspector.typeNameLocations(for: someReturnType.constraint) } return typeSyntaxInspector.typeNameLocations(for: returnTypeSyntax) @@ -412,7 +412,7 @@ final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor { private func typeLocations(for clause: GenericParameterClauseSyntax?) -> Set { guard let clause = clause else { return [] } - return clause.genericParameterList.reduce(into: .init()) { result, param in + return clause.parameters.reduce(into: .init()) { result, param in if let inheritedType = param.inheritedType { result.formUnion(typeSyntaxInspector.typeLocations(for: inheritedType)) } @@ -422,18 +422,18 @@ final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor { private func typeLocations(for clause: GenericWhereClauseSyntax?) -> Set { guard let clause = clause else { return [] } - return clause.requirementList.reduce(into: .init()) { result, requirement in - if let conformanceRequirementType = requirement.body.as(ConformanceRequirementSyntax.self) { - result.formUnion(typeSyntaxInspector.typeLocations(for: conformanceRequirementType.rightTypeIdentifier)) + return clause.requirements.reduce(into: .init()) { result, requirement in + if let conformanceRequirementType = requirement.requirement.as(ConformanceRequirementSyntax.self) { + result.formUnion(typeSyntaxInspector.typeLocations(for: conformanceRequirementType.rightType)) } } } - private func typeLocations(for clause: TypeInheritanceClauseSyntax?) -> Set { + private func typeLocations(for clause: InheritanceClauseSyntax?) -> Set { guard let clause = clause else { return [] } - return clause.inheritedTypeCollection.reduce(into: .init()) { result, type in - result.formUnion(typeSyntaxInspector.typeLocations(for: type.typeName)) + return clause.inheritedTypes.reduce(into: .init()) { result, type in + result.formUnion(typeSyntaxInspector.typeLocations(for: type.type)) } } @@ -447,11 +447,11 @@ final class DeclarationSyntaxVisitor: PeripherySyntaxVisitor { guard let call else { return [] } return call - .argumentList + .arguments .reduce(into: .init(), { result, argument in if let memberExpr = argument.expression.as(MemberAccessExprSyntax.self), - memberExpr.name.tokenKind == .keyword(.`self`), - let baseIdentifier = memberExpr.base?.as(IdentifierExprSyntax.self) + memberExpr.declName.baseName.tokenKind == .keyword(.`self`), + let baseIdentifier = memberExpr.base?.as(DeclReferenceExprSyntax.self) { let location = sourceLocationBuilder.location(at: baseIdentifier.positionAfterSkippingLeadingTrivia) result.insert(location) diff --git a/Sources/PeripheryKit/Syntax/ImportSyntaxVisitor.swift b/Sources/PeripheryKit/Syntax/ImportSyntaxVisitor.swift index cad0323a3..5ff471c19 100644 --- a/Sources/PeripheryKit/Syntax/ImportSyntaxVisitor.swift +++ b/Sources/PeripheryKit/Syntax/ImportSyntaxVisitor.swift @@ -10,7 +10,7 @@ final class ImportSyntaxVisitor: PeripherySyntaxVisitor { func visit(_ node: ImportDeclSyntax) { let parts = node.path.map { $0.name.text } - let attributes = node.attributes?.compactMap { $0.as(AttributeSyntax.self)?.attributeName.trimmedDescription } ?? [] + let attributes = node.attributes.compactMap { $0.as(AttributeSyntax.self)?.attributeName.trimmedDescription } importStatements.append((parts, attributes.contains("testable"))) } } diff --git a/Sources/PeripheryKit/Syntax/MultiplexingSyntaxVisitor.swift b/Sources/PeripheryKit/Syntax/MultiplexingSyntaxVisitor.swift index 65e744ea7..d4d928d31 100644 --- a/Sources/PeripheryKit/Syntax/MultiplexingSyntaxVisitor.swift +++ b/Sources/PeripheryKit/Syntax/MultiplexingSyntaxVisitor.swift @@ -17,8 +17,8 @@ protocol PeripherySyntaxVisitor { func visit(_ node: DeinitializerDeclSyntax) func visit(_ node: SubscriptDeclSyntax) func visit(_ node: VariableDeclSyntax) - func visit(_ node: TypealiasDeclSyntax) - func visit(_ node: AssociatedtypeDeclSyntax) + func visit(_ node: TypeAliasDeclSyntax) + func visit(_ node: AssociatedTypeDeclSyntax) func visit(_ node: OperatorDeclSyntax) func visit(_ node: PrecedenceGroupDeclSyntax) func visit(_ node: ImportDeclSyntax) @@ -36,8 +36,8 @@ protocol PeripherySyntaxVisitor { func visitPost(_ node: DeinitializerDeclSyntax) func visitPost(_ node: SubscriptDeclSyntax) func visitPost(_ node: VariableDeclSyntax) - func visitPost(_ node: TypealiasDeclSyntax) - func visitPost(_ node: AssociatedtypeDeclSyntax) + func visitPost(_ node: TypeAliasDeclSyntax) + func visitPost(_ node: AssociatedTypeDeclSyntax) func visitPost(_ node: OperatorDeclSyntax) func visitPost(_ node: PrecedenceGroupDeclSyntax) func visitPost(_ node: ImportDeclSyntax) @@ -57,8 +57,8 @@ extension PeripherySyntaxVisitor { func visit(_ node: DeinitializerDeclSyntax) { } func visit(_ node: SubscriptDeclSyntax) { } func visit(_ node: VariableDeclSyntax) { } - func visit(_ node: TypealiasDeclSyntax) { } - func visit(_ node: AssociatedtypeDeclSyntax) { } + func visit(_ node: TypeAliasDeclSyntax) { } + func visit(_ node: AssociatedTypeDeclSyntax) { } func visit(_ node: OperatorDeclSyntax) { } func visit(_ node: PrecedenceGroupDeclSyntax) { } func visit(_ node: ImportDeclSyntax) { } @@ -76,8 +76,8 @@ extension PeripherySyntaxVisitor { func visitPost(_ node: DeinitializerDeclSyntax) {} func visitPost(_ node: SubscriptDeclSyntax) {} func visitPost(_ node: VariableDeclSyntax) {} - func visitPost(_ node: TypealiasDeclSyntax) {} - func visitPost(_ node: AssociatedtypeDeclSyntax) {} + func visitPost(_ node: TypeAliasDeclSyntax) {} + func visitPost(_ node: AssociatedTypeDeclSyntax) {} func visitPost(_ node: OperatorDeclSyntax) {} func visitPost(_ node: PrecedenceGroupDeclSyntax) {} func visitPost(_ node: ImportDeclSyntax) {} @@ -95,7 +95,7 @@ final class MultiplexingSyntaxVisitor: SyntaxVisitor { required init(file: SourceFile) throws { let source = try String(contentsOf: file.path.url) self.syntax = Parser.parse(source: source) - self.locationConverter = SourceLocationConverter(file: file.path.string, tree: syntax) + self.locationConverter = SourceLocationConverter(fileName: file.path.string, tree: syntax) self.sourceLocationBuilder = SourceLocationBuilder(file: file, locationConverter: locationConverter) super.init(viewMode: .sourceAccurate) } @@ -165,12 +165,12 @@ final class MultiplexingSyntaxVisitor: SyntaxVisitor { return .visitChildren } - override func visit(_ node: TypealiasDeclSyntax) -> SyntaxVisitorContinueKind { + override func visit(_ node: TypeAliasDeclSyntax) -> SyntaxVisitorContinueKind { visitors.forEach { $0.visit(node) } return .visitChildren } - override func visit(_ node: AssociatedtypeDeclSyntax) -> SyntaxVisitorContinueKind { + override func visit(_ node: AssociatedTypeDeclSyntax) -> SyntaxVisitorContinueKind { visitors.forEach { $0.visit(node) } return .visitChildren } @@ -244,11 +244,11 @@ final class MultiplexingSyntaxVisitor: SyntaxVisitor { visitors.forEach { $0.visitPost(node) } } - override func visitPost(_ node: TypealiasDeclSyntax) { + override func visitPost(_ node: TypeAliasDeclSyntax) { visitors.forEach { $0.visitPost(node) } } - override func visitPost(_ node: AssociatedtypeDeclSyntax) { + override func visitPost(_ node: AssociatedTypeDeclSyntax) { visitors.forEach { $0.visitPost(node) } } diff --git a/Sources/PeripheryKit/Syntax/TypeSyntaxInspector.swift b/Sources/PeripheryKit/Syntax/TypeSyntaxInspector.swift index 48163e0ce..88b4e7de8 100644 --- a/Sources/PeripheryKit/Syntax/TypeSyntaxInspector.swift +++ b/Sources/PeripheryKit/Syntax/TypeSyntaxInspector.swift @@ -28,14 +28,14 @@ struct TypeSyntaxInspector { // MARK: - Private func types(for typeSyntax: TypeSyntax) -> Set { - if let simpleType = typeSyntax.as(SimpleTypeIdentifierSyntax.self) { + if let identifierType = typeSyntax.as(IdentifierTypeSyntax.self) { // Simple type. - var result = simpleType.genericArgumentClause?.arguments.flatMapSet { types(for: $0.argumentType) } ?? [] - return result.inserting(simpleType.name) + var result = identifierType.genericArgumentClause?.arguments.flatMapSet { types(for: $0.argument) } ?? [] + return result.inserting(identifierType.name) } else if let optionalType = typeSyntax.as(OptionalTypeSyntax.self) { // Optional type. return types(for: optionalType.wrappedType) - } else if let memberType = typeSyntax.as(MemberTypeIdentifierSyntax.self) { + } else if let memberType = typeSyntax.as(MemberTypeSyntax.self) { // Member type. return types(for: memberType.baseType).union([memberType.name]) } else if let tuple = typeSyntax.as(TupleTypeSyntax.self) { @@ -43,17 +43,17 @@ struct TypeSyntaxInspector { return tuple.elements.flatMapSet { types(for: $0.type) } } else if let funcType = typeSyntax.as(FunctionTypeSyntax.self) { // Function type. - let argumentTypes = funcType.arguments.flatMapSet { types(for: $0.type) } - return types(for: funcType.output.returnType).union(argumentTypes) + let argumentTypes = funcType.parameters.flatMapSet { types(for: $0.type) } + return types(for: funcType.returnClause.type).union(argumentTypes) } else if let arrayType = typeSyntax.as(ArrayTypeSyntax.self) { // Array type. - return types(for: arrayType.elementType) + return types(for: arrayType.element) } else if let dictType = typeSyntax.as(DictionaryTypeSyntax.self) { // Dictionary type. - return types(for: dictType.keyType).union(types(for: dictType.valueType)) - } else if let someType = typeSyntax.as(ConstrainedSugarTypeSyntax.self) { + return types(for: dictType.key).union(types(for: dictType.value)) + } else if let someType = typeSyntax.as(SomeOrAnyTypeSyntax.self) { // Some type. - return types(for: someType.baseType) + return types(for: someType.constraint) } else if let implicitUnwrappedOptionalType = typeSyntax.as(ImplicitlyUnwrappedOptionalTypeSyntax.self) { // Implicitly unwrapped optional type. return types(for: implicitUnwrappedOptionalType.wrappedType) diff --git a/Sources/PeripheryKit/Syntax/UnusedParameterAnalyzer.swift b/Sources/PeripheryKit/Syntax/UnusedParameterAnalyzer.swift index ac707cc28..1b2a2e322 100644 --- a/Sources/PeripheryKit/Syntax/UnusedParameterAnalyzer.swift +++ b/Sources/PeripheryKit/Syntax/UnusedParameterAnalyzer.swift @@ -112,7 +112,7 @@ final class UnusedParameterAnalyzer { } case let item as Identifier: return item.name == param.name ? .used : .unused - case let item as GenericItem where item.node.is(TupleExprElementListSyntax.self): // function call arguments + case let item as GenericItem where item.node.is(LabeledExprListSyntax.self): // function call arguments for item in item.items { if isParam(param, usedIn: item) { return .used diff --git a/Sources/PeripheryKit/Syntax/UnusedParameterParser.swift b/Sources/PeripheryKit/Syntax/UnusedParameterParser.swift index 721f35c5f..8973da668 100644 --- a/Sources/PeripheryKit/Syntax/UnusedParameterParser.swift +++ b/Sources/PeripheryKit/Syntax/UnusedParameterParser.swift @@ -142,7 +142,7 @@ struct UnusedParameterParser { static func parse(file: SourceFile, parseProtocols: Bool) throws -> [Function] { let source = try String(contentsOf: file.path.url) let syntax = Parser.parse(source: source) - let locationConverter = SourceLocationConverter(file: file.path.string, tree: syntax) + let locationConverter = SourceLocationConverter(fileName: file.path.string, tree: syntax) return parse( file: file, syntax: syntax, @@ -189,14 +189,14 @@ struct UnusedParameterParser { parsed = parse(node: node.base, collector) } else if let node = node.as(CodeBlockItemSyntax.self) { parsed = parse(node: node.item, collector) - } else if let node = node.as(ParameterClauseSyntax.self) { - parsed = parse(node: node.parameterList, collector) + } else if let node = node.as(FunctionParameterClauseSyntax.self) { + parsed = parse(node: node.parameters, collector) } else if let node = node.as(VariableDeclSyntax.self) { parsed = parse(variableDecl: node, collector) } else if let node = node.as(ClosureExprSyntax.self) { parsed = parse(closureExpr: node, collector) - } else if let node = node.as(IdentifierExprSyntax.self) { - parsed = parse(identifier: node.identifier) + } else if let node = node.as(DeclReferenceExprSyntax.self) { + parsed = parse(identifier: node.baseName) } else if let node = node.as(FunctionParameterSyntax.self) { parsed = parse(functionParameter: node) } else if let node = node.as(FunctionDeclSyntax.self) { @@ -258,7 +258,7 @@ struct UnusedParameterParser { private func parse(closureExpr syntax: ClosureExprSyntax, _ collector: Collector?) -> Closure? { let signature = syntax.children(viewMode: .sourceAccurate).mapFirst { $0.as(ClosureSignatureSyntax.self) } - let rawParams = signature?.input?.children(viewMode: .sourceAccurate).compactMap { $0.as(ClosureParamSyntax.self) } + let rawParams = signature?.parameterClause?.children(viewMode: .sourceAccurate).compactMap { $0.as(ClosureShorthandParameterSyntax.self) } let params = rawParams?.map { $0.name.text } ?? [] let items = syntax.statements.compactMap { parse(node: $0.item, collector) } return Closure(params: params, items: items) @@ -284,7 +284,7 @@ struct UnusedParameterParser { let items = bindings.flatMap { let initializerItems = $0.initializer?.children(viewMode: .sourceAccurate).compactMap { parse(node: $0, collector) } ?? [] - let accessorItems = $0.accessor?.children(viewMode: .sourceAccurate).compactMap { parse(node: $0, collector) } ?? [] + let accessorItems = $0.accessorBlock?.children(viewMode: .sourceAccurate).compactMap { parse(node: $0, collector) } ?? [] return initializerItems + accessorItems } @@ -302,8 +302,8 @@ struct UnusedParameterParser { attributes: syntax.attributes, genericParams: syntax.genericParameterClause, body: syntax.body, - named: syntax.identifier.text, - position: syntax.identifier.positionAfterSkippingLeadingTrivia, + named: syntax.name.text, + position: syntax.name.positionAfterSkippingLeadingTrivia, collector) } @@ -335,7 +335,7 @@ struct UnusedParameterParser { let params = parse(children: syntax.children(viewMode: .sourceAccurate), collecting: Parameter.self) let items = parse(node: body, collector)?.items ?? [] let fullName = buildFullName(for: name, with: params) - let genericParamNames = genericParams?.genericParameterList.compactMap { $0.name.text } ?? [] + let genericParamNames = genericParams?.parameters.compactMap { $0.name.text } ?? [] let attributeNames = attributes?.children(viewMode: .sourceAccurate).compactMap { AttributeSyntax($0)?.attributeName.trimmedDescription } ?? [] let function = Function(