From ab51d5fc454fb306aebb247b83293b2063d8b7bb Mon Sep 17 00:00:00 2001 From: John Szumski Date: Tue, 11 Feb 2025 12:16:38 -0500 Subject: [PATCH] Add the ability to add comment commands on the same line as an import statement --- .../SyntaxAnalysis/ImportSyntaxVisitor.swift | 2 +- .../ImportFixture.swift | 4 ++ .../Syntax/ImportVisitTest.swift | 39 +++++++++++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 Tests/Fixtures/Sources/DeclarationVisitorFixtures/ImportFixture.swift create mode 100644 Tests/PeripheryTests/Syntax/ImportVisitTest.swift diff --git a/Sources/SyntaxAnalysis/ImportSyntaxVisitor.swift b/Sources/SyntaxAnalysis/ImportSyntaxVisitor.swift index e8b4cc05c..25985eb97 100644 --- a/Sources/SyntaxAnalysis/ImportSyntaxVisitor.swift +++ b/Sources/SyntaxAnalysis/ImportSyntaxVisitor.swift @@ -27,7 +27,7 @@ public final class ImportSyntaxVisitor: PeripherySyntaxVisitor { isTestable: attributes.contains("testable"), isExported: attributes.contains("_exported") || node.modifiers.contains { $0.name.text == "public" }, location: location, - commentCommands: CommentCommand.parseCommands(in: node.leadingTrivia) + commentCommands: CommentCommand.parseCommands(in: node.leadingTrivia.merging(node.trailingTrivia)) ) importStatements.append(statement) } diff --git a/Tests/Fixtures/Sources/DeclarationVisitorFixtures/ImportFixture.swift b/Tests/Fixtures/Sources/DeclarationVisitorFixtures/ImportFixture.swift new file mode 100644 index 000000000..22137fe8c --- /dev/null +++ b/Tests/Fixtures/Sources/DeclarationVisitorFixtures/ImportFixture.swift @@ -0,0 +1,4 @@ +import Foundation +// periphery:ignore +import CoreFoundation +import Swift // periphery:ignore diff --git a/Tests/PeripheryTests/Syntax/ImportVisitTest.swift b/Tests/PeripheryTests/Syntax/ImportVisitTest.swift new file mode 100644 index 000000000..1414218c5 --- /dev/null +++ b/Tests/PeripheryTests/Syntax/ImportVisitTest.swift @@ -0,0 +1,39 @@ +import Foundation +@testable import SourceGraph +@testable import SyntaxAnalysis +@testable import TestShared +import XCTest + +final class ImportVisitTest: XCTestCase { + private var results: [ImportStatement]! + + override func setUpWithError() throws { + try super.setUpWithError() + let multiplexingVisitor = try MultiplexingSyntaxVisitor(file: fixturePath) + let visitor = multiplexingVisitor.add(ImportSyntaxVisitor.self) + multiplexingVisitor.visit() + results = visitor.importStatements + } + + override func tearDown() { + results = nil + super.tearDown() + } + + func testCommentCommands() { + let expectedIgnored = ["CoreFoundation", "Swift"] + let actualIgnored = results.filter { $0.commentCommands.contains(.ignore) }.map(\.module) + XCTAssertEqual(actualIgnored, expectedIgnored, "Ignored modules did not match the expected set") + + let actualUnignored = results.filter { !$0.commentCommands.contains(.ignore) }.map(\.module) + let expectedUnignored = ["Foundation"] + XCTAssertEqual(actualUnignored, expectedUnignored, "Unignored modules did not match the expected set") + } + + // MARK: - Private + + private var fixturePath: SourceFile { + let path = FixturesProjectPath.appending("Sources/DeclarationVisitorFixtures/ImportFixture.swift") + return SourceFile(path: path, modules: ["DeclarationVisitorFixtures"]) + } +}