From e658abc3b11589d5e018fcb6009bf8e2419dbdf4 Mon Sep 17 00:00:00 2001 From: 417-72KI <417.72ki@gmail.com> Date: Tue, 12 Nov 2024 02:05:17 +0900 Subject: [PATCH 1/6] add initial Dangerfile content as a header for test --- .../RunnerLibTests/DangerFileGeneratorTests.swift | 14 +++++++++++++- ...eratesTheCorrectFileWhenThereAreNoImports.1.txt | 4 ++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/Tests/RunnerLibTests/DangerFileGeneratorTests.swift b/Tests/RunnerLibTests/DangerFileGeneratorTests.swift index 2bbc661a..b40a33fe 100644 --- a/Tests/RunnerLibTests/DangerFileGeneratorTests.swift +++ b/Tests/RunnerLibTests/DangerFileGeneratorTests.swift @@ -43,7 +43,11 @@ final class DangerFileGeneratorTests: XCTestCase { } func testItGeneratesTheCorrectFileWhenThereAreNoImports() throws { - try generator.generateDangerFile(fromContent: contentWithoutImports, fileName: generatedFilePath, logger: logger) + try generator.generateDangerFile( + fromContent: headerForContentWithoutImports + contentWithoutImports, + fileName: generatedFilePath, + logger: logger + ) try assertSnapshot(matching: generatedContent(), as: .lines) } @@ -86,6 +90,14 @@ final class DangerFileGeneratorTests: XCTestCase { } extension DangerFileGeneratorTests { + private var headerForContentWithoutImports: String { + """ + import Danger + + let danger = Danger() + """ + "\n\n" + } + private var contentWithoutImports: String { """ message("Text") diff --git a/Tests/RunnerLibTests/__Snapshots__/DangerFileGeneratorTests/testItGeneratesTheCorrectFileWhenThereAreNoImports.1.txt b/Tests/RunnerLibTests/__Snapshots__/DangerFileGeneratorTests/testItGeneratesTheCorrectFileWhenThereAreNoImports.1.txt index 9a29625b..117d3cea 100644 --- a/Tests/RunnerLibTests/__Snapshots__/DangerFileGeneratorTests/testItGeneratesTheCorrectFileWhenThereAreNoImports.1.txt +++ b/Tests/RunnerLibTests/__Snapshots__/DangerFileGeneratorTests/testItGeneratesTheCorrectFileWhenThereAreNoImports.1.txt @@ -1,2 +1,6 @@ +import Danger + +let danger = Danger() + message("Text") message("Another Text") \ No newline at end of file From 995a2084aae302b3bf6d2cb6a2a66ba2dce9935d Mon Sep 17 00:00:00 2001 From: 417-72KI <417.72ki@gmail.com> Date: Tue, 12 Nov 2024 02:07:04 +0900 Subject: [PATCH 2/6] add header on single import pattern --- Tests/RunnerLibTests/DangerFileGeneratorTests.swift | 4 +++- ...estItGeneratesTheCorrectFileWhenThereIsASingleImport.1.txt | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Tests/RunnerLibTests/DangerFileGeneratorTests.swift b/Tests/RunnerLibTests/DangerFileGeneratorTests.swift index b40a33fe..7827e6e6 100644 --- a/Tests/RunnerLibTests/DangerFileGeneratorTests.swift +++ b/Tests/RunnerLibTests/DangerFileGeneratorTests.swift @@ -106,7 +106,9 @@ extension DangerFileGeneratorTests { } private var contentWithOneImport: String { - "// fileImport: " + file1Path + "\n" + contentWithoutImports + headerForContentWithoutImports + + "// fileImport: " + file1Path + "\n" + + contentWithoutImports } private var contentWithMultipleImports: String { diff --git a/Tests/RunnerLibTests/__Snapshots__/DangerFileGeneratorTests/testItGeneratesTheCorrectFileWhenThereIsASingleImport.1.txt b/Tests/RunnerLibTests/__Snapshots__/DangerFileGeneratorTests/testItGeneratesTheCorrectFileWhenThereIsASingleImport.1.txt index ed92390e..1503398e 100644 --- a/Tests/RunnerLibTests/__Snapshots__/DangerFileGeneratorTests/testItGeneratesTheCorrectFileWhenThereIsASingleImport.1.txt +++ b/Tests/RunnerLibTests/__Snapshots__/DangerFileGeneratorTests/testItGeneratesTheCorrectFileWhenThereIsASingleImport.1.txt @@ -1,3 +1,7 @@ +import Danger + +let danger = Danger() + file1Content 👍🏻 secondLine message("Text") From 0a4e2a678c9a70e5d5c3bd23e02fcb5a3948f3fc Mon Sep 17 00:00:00 2001 From: 417-72KI <417.72ki@gmail.com> Date: Tue, 12 Nov 2024 02:09:24 +0900 Subject: [PATCH 3/6] add `import` in `fileImport` contents --- Tests/RunnerLibTests/DangerFileGeneratorTests.swift | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Tests/RunnerLibTests/DangerFileGeneratorTests.swift b/Tests/RunnerLibTests/DangerFileGeneratorTests.swift index 7827e6e6..24179876 100644 --- a/Tests/RunnerLibTests/DangerFileGeneratorTests.swift +++ b/Tests/RunnerLibTests/DangerFileGeneratorTests.swift @@ -112,8 +112,9 @@ extension DangerFileGeneratorTests { } private var contentWithMultipleImports: String { - "// fileImport: " + file2Path + "\n\n" + - "// fileImport: " + file3Path + "\n" + contentWithOneImport + "// fileImport: " + file2Path + "\n\n" + + "// fileImport: " + file3Path + "\n" + + contentWithOneImport } private var file1Content: String { @@ -125,12 +126,17 @@ extension DangerFileGeneratorTests { private var file2Content: String { """ + import Danger + file2Content ⚠️ """ } private var file3Content: String { """ + import Danger + import Foundation + file3Content 👩‍👩‍👦‍👦 secondLine really really really really really really really really really really really really \ From dbc576ea154f02459ec8da30054289bfd7a4207e Mon Sep 17 00:00:00 2001 From: 417-72KI <417.72ki@gmail.com> Date: Tue, 12 Nov 2024 02:22:33 +0900 Subject: [PATCH 4/6] merge imports in `_tmp_dangerfile.swift` --- .../Files Import/DangerFileGenerator.swift | 13 +++++++++++++ ...rectFileWhenOneOfTheImportedFilesIsMissing.1.txt | 5 +++++ ...heCorrectFileWhenThereIsAreMultipleImports.1.txt | 7 +++++++ 3 files changed, 25 insertions(+) diff --git a/Sources/RunnerLib/Files Import/DangerFileGenerator.swift b/Sources/RunnerLib/Files Import/DangerFileGenerator.swift index 632d3e80..f1b56830 100644 --- a/Sources/RunnerLib/Files Import/DangerFileGenerator.swift +++ b/Sources/RunnerLib/Files Import/DangerFileGenerator.swift @@ -25,6 +25,19 @@ public final class DangerFileGenerator { dangerContent.replaceSubrange(replacementRange, with: fileContent) }) + mergeImports(in: &dangerContent) + try dangerContent.write(toFile: fileName, atomically: false, encoding: .utf8) } } + +private extension DangerFileGenerator { + func mergeImports(in content: inout String) { + var lines = content.split(separator: "\n", + omittingEmptySubsequences: false) + let imports = Set(lines.filter { $0.hasPrefix("import ") }) + lines.removeAll { imports.contains($0) } + lines.insert(contentsOf: imports.sorted(), at: 0) + content = lines.joined(separator: "\n") + } +} diff --git a/Tests/RunnerLibTests/__Snapshots__/DangerFileGeneratorTests/testItGeneratesTheCorrectFileWhenOneOfTheImportedFilesIsMissing.1.txt b/Tests/RunnerLibTests/__Snapshots__/DangerFileGeneratorTests/testItGeneratesTheCorrectFileWhenOneOfTheImportedFilesIsMissing.1.txt index a0323262..2069fa4f 100644 --- a/Tests/RunnerLibTests/__Snapshots__/DangerFileGeneratorTests/testItGeneratesTheCorrectFileWhenOneOfTheImportedFilesIsMissing.1.txt +++ b/Tests/RunnerLibTests/__Snapshots__/DangerFileGeneratorTests/testItGeneratesTheCorrectFileWhenOneOfTheImportedFilesIsMissing.1.txt @@ -1,6 +1,11 @@ +import Danger + file2Content ⚠️ // fileImport: GeneratedTestFile3.swift + +let danger = Danger() + file1Content 👍🏻 secondLine message("Text") diff --git a/Tests/RunnerLibTests/__Snapshots__/DangerFileGeneratorTests/testItGeneratesTheCorrectFileWhenThereIsAreMultipleImports.1.txt b/Tests/RunnerLibTests/__Snapshots__/DangerFileGeneratorTests/testItGeneratesTheCorrectFileWhenThereIsAreMultipleImports.1.txt index 90316515..8eb6ab7e 100644 --- a/Tests/RunnerLibTests/__Snapshots__/DangerFileGeneratorTests/testItGeneratesTheCorrectFileWhenThereIsAreMultipleImports.1.txt +++ b/Tests/RunnerLibTests/__Snapshots__/DangerFileGeneratorTests/testItGeneratesTheCorrectFileWhenThereIsAreMultipleImports.1.txt @@ -1,8 +1,15 @@ +import Danger +import Foundation + file2Content ⚠️ + file3Content 👩‍👩‍👦‍👦 secondLine really really really really really really really really really really really really really really really really really really really really really really long text + +let danger = Danger() + file1Content 👍🏻 secondLine message("Text") From f88b65992444e61291066f9a799bb50ff6ce1f8e Mon Sep 17 00:00:00 2001 From: 417-72KI <417.72ki@gmail.com> Date: Tue, 12 Nov 2024 02:28:26 +0900 Subject: [PATCH 5/6] add import on extension to enable build in `danger-swift edit` --- DangerfileExtensions/ChangelogCheck.swift | 2 ++ 1 file changed, 2 insertions(+) diff --git a/DangerfileExtensions/ChangelogCheck.swift b/DangerfileExtensions/ChangelogCheck.swift index d17c7da9..ccc657d3 100644 --- a/DangerfileExtensions/ChangelogCheck.swift +++ b/DangerfileExtensions/ChangelogCheck.swift @@ -1,3 +1,5 @@ +import Danger + func checkChangelog() { let allSourceFiles = danger.git.modifiedFiles + danger.git.createdFiles From 702b1712996e052537276948ebf884d2ebf7837a Mon Sep 17 00:00:00 2001 From: 417-72KI <417.72ki@gmail.com> Date: Tue, 12 Nov 2024 04:10:52 +0900 Subject: [PATCH 6/6] add `fileImport` with indent pattern --- .../Files Import/DangerFileGenerator.swift | 14 ++++++++---- .../DangerFileGeneratorTests.swift | 22 +++++++++++++++++++ ...tFileWhenThereIsAreImportsWithIndent.1.txt | 16 ++++++++++++++ 3 files changed, 48 insertions(+), 4 deletions(-) create mode 100644 Tests/RunnerLibTests/__Snapshots__/DangerFileGeneratorTests/testItGeneratesTheCorrectFileWhenThereIsAreImportsWithIndent.1.txt diff --git a/Sources/RunnerLib/Files Import/DangerFileGenerator.swift b/Sources/RunnerLib/Files Import/DangerFileGenerator.swift index f1b56830..2bc20834 100644 --- a/Sources/RunnerLib/Files Import/DangerFileGenerator.swift +++ b/Sources/RunnerLib/Files Import/DangerFileGenerator.swift @@ -33,10 +33,16 @@ public final class DangerFileGenerator { private extension DangerFileGenerator { func mergeImports(in content: inout String) { - var lines = content.split(separator: "\n", - omittingEmptySubsequences: false) - let imports = Set(lines.filter { $0.hasPrefix("import ") }) - lines.removeAll { imports.contains($0) } + var lines = content + .split(separator: "\n", + omittingEmptySubsequences: false) + .map(String.init) + + let imports = Set( + lines.map { $0.trimmingCharacters(in: .whitespaces) } + .filter { $0.hasPrefix("import ") } + ) + lines.removeAll { imports.contains($0.trimmingCharacters(in: .whitespaces)) } lines.insert(contentsOf: imports.sorted(), at: 0) content = lines.joined(separator: "\n") } diff --git a/Tests/RunnerLibTests/DangerFileGeneratorTests.swift b/Tests/RunnerLibTests/DangerFileGeneratorTests.swift index 24179876..dfc7fe87 100644 --- a/Tests/RunnerLibTests/DangerFileGeneratorTests.swift +++ b/Tests/RunnerLibTests/DangerFileGeneratorTests.swift @@ -87,6 +87,18 @@ final class DangerFileGeneratorTests: XCTestCase { try assertSnapshot(matching: generatedContent(), as: .lines) } + + func testItGeneratesTheCorrectFileWhenThereIsAreImportsWithIndent() throws { + try? file2Content.write(toFile: file2Path, atomically: true, encoding: .utf8) + try? file3Content.write(toFile: file3Path, atomically: true, encoding: .utf8) + + createdFiles.append(file2Path) + createdFiles.append(file3Path) + + try generator.generateDangerFile(fromContent: contentWithImportsWithIndent, fileName: generatedFilePath, logger: logger) + + try assertSnapshot(matching: generatedContent(), as: .lines) + } } extension DangerFileGeneratorTests { @@ -117,6 +129,16 @@ extension DangerFileGeneratorTests { + contentWithOneImport } + private var contentWithImportsWithIndent: String { + headerForContentWithoutImports + + "if flag {\n" + + " // fileImport: " + file2Path + "\n" + + "} else {\n" + + " // fileImport: " + file3Path + "\n" + + "}\n" + + contentWithoutImports + } + private var file1Content: String { """ file1Content 👍🏻 diff --git a/Tests/RunnerLibTests/__Snapshots__/DangerFileGeneratorTests/testItGeneratesTheCorrectFileWhenThereIsAreImportsWithIndent.1.txt b/Tests/RunnerLibTests/__Snapshots__/DangerFileGeneratorTests/testItGeneratesTheCorrectFileWhenThereIsAreImportsWithIndent.1.txt new file mode 100644 index 00000000..a400ab9a --- /dev/null +++ b/Tests/RunnerLibTests/__Snapshots__/DangerFileGeneratorTests/testItGeneratesTheCorrectFileWhenThereIsAreImportsWithIndent.1.txt @@ -0,0 +1,16 @@ +import Danger +import Foundation + +let danger = Danger() + +if flag { + +file2Content ⚠️ +} else { + +file3Content 👩‍👩‍👦‍👦 +secondLine +really really really really really really really really really really really really really really really really really really really really really really long text +} +message("Text") +message("Another Text") \ No newline at end of file