diff --git a/Sources/SwiftComplexityCore/Analysis/FunctionDetector.swift b/Sources/SwiftComplexityCore/Analysis/FunctionDetector.swift index f12e160..a54f411 100644 --- a/Sources/SwiftComplexityCore/Analysis/FunctionDetector.swift +++ b/Sources/SwiftComplexityCore/Analysis/FunctionDetector.swift @@ -26,6 +26,10 @@ class FunctionDetector: SyntaxVisitor { return detectedFunctions } + override func visit(_ node: ProtocolDeclSyntax) -> SyntaxVisitorContinueKind { + return .skipChildren + } + public override func visit(_ node: FunctionDeclSyntax) -> SyntaxVisitorContinueKind { let name = extractFunctionName(from: node) let signature = extractFunctionSignature(from: node) diff --git a/Tests/SwiftComplexityCoreTests/Fixtures/protocol_decl.swift b/Tests/SwiftComplexityCoreTests/Fixtures/protocol_decl.swift new file mode 100644 index 0000000..e7fc7e9 --- /dev/null +++ b/Tests/SwiftComplexityCoreTests/Fixtures/protocol_decl.swift @@ -0,0 +1,11 @@ +// +// protocol.swift +// swift-complexity +// +// Created by Fumiya Tanaka on 2025/10/18. +// + +protocol P { + var foo: String { get } + func bar() +} diff --git a/Tests/SwiftComplexityCoreTests/Fixtures/protocol_extension_decl.swift b/Tests/SwiftComplexityCoreTests/Fixtures/protocol_extension_decl.swift new file mode 100644 index 0000000..95e50c8 --- /dev/null +++ b/Tests/SwiftComplexityCoreTests/Fixtures/protocol_extension_decl.swift @@ -0,0 +1,10 @@ +// +// protocol_extension_decl.swift +// swift-complexity +// +// Created by Fumiya Tanaka on 2025/10/18. +// + +extension P { + func foo() {} +} diff --git a/Tests/SwiftComplexityCoreTests/SwiftComplexityTests.swift b/Tests/SwiftComplexityCoreTests/SwiftComplexityTests.swift index a87cb23..39c5077 100644 --- a/Tests/SwiftComplexityCoreTests/SwiftComplexityTests.swift +++ b/Tests/SwiftComplexityCoreTests/SwiftComplexityTests.swift @@ -251,6 +251,34 @@ struct FunctionDetectionTests { #expect(names.contains("method1")) #expect(names.contains("method2")) } + + @Test("protocol") + func protocolDeclTests() async throws { + // Given + let code = try loadFixture("protocol_decl") + let sourceFile = Parser.parse(source: code) + let detector = FunctionDetector(viewMode: .sourceAccurate) + + // When + let functions = detector.detectFunctions(in: sourceFile) + + // Then + #expect(functions.count == 0) + } + + @Test("protocol_extension") + func protocolExtensionDeclTests() async throws { + // Given + let code = try loadFixture("protocol_extension_decl") + let sourceFile = Parser.parse(source: code) + let detector = FunctionDetector(viewMode: .sourceAccurate) + + // When + let functions = detector.detectFunctions(in: sourceFile) + + // Then + #expect(functions.count == 1) + } } // MARK: - Output Formatter Tests