Skip to content

Commit b721569

Browse files
authored
Merge pull request #631 from 417-72KI/dupulicated-imports
2 parents eac3e07 + 702b171 commit b721569

8 files changed

+103
-4
lines changed

DangerfileExtensions/ChangelogCheck.swift

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import Danger
2+
13
func checkChangelog() {
24
let allSourceFiles = danger.git.modifiedFiles + danger.git.createdFiles
35

Sources/RunnerLib/Files Import/DangerFileGenerator.swift

+19
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,25 @@ public final class DangerFileGenerator {
2525
dangerContent.replaceSubrange(replacementRange, with: fileContent)
2626
})
2727

28+
mergeImports(in: &dangerContent)
29+
2830
try dangerContent.write(toFile: fileName, atomically: false, encoding: .utf8)
2931
}
3032
}
33+
34+
private extension DangerFileGenerator {
35+
func mergeImports(in content: inout String) {
36+
var lines = content
37+
.split(separator: "\n",
38+
omittingEmptySubsequences: false)
39+
.map(String.init)
40+
41+
let imports = Set(
42+
lines.map { $0.trimmingCharacters(in: .whitespaces) }
43+
.filter { $0.hasPrefix("import ") }
44+
)
45+
lines.removeAll { imports.contains($0.trimmingCharacters(in: .whitespaces)) }
46+
lines.insert(contentsOf: imports.sorted(), at: 0)
47+
content = lines.joined(separator: "\n")
48+
}
49+
}

Tests/RunnerLibTests/DangerFileGeneratorTests.swift

+46-4
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,11 @@ final class DangerFileGeneratorTests: XCTestCase {
4343
}
4444

4545
func testItGeneratesTheCorrectFileWhenThereAreNoImports() throws {
46-
try generator.generateDangerFile(fromContent: contentWithoutImports, fileName: generatedFilePath, logger: logger)
46+
try generator.generateDangerFile(
47+
fromContent: headerForContentWithoutImports + contentWithoutImports,
48+
fileName: generatedFilePath,
49+
logger: logger
50+
)
4751

4852
try assertSnapshot(matching: generatedContent(), as: .lines)
4953
}
@@ -83,9 +87,29 @@ final class DangerFileGeneratorTests: XCTestCase {
8387

8488
try assertSnapshot(matching: generatedContent(), as: .lines)
8589
}
90+
91+
func testItGeneratesTheCorrectFileWhenThereIsAreImportsWithIndent() throws {
92+
try? file2Content.write(toFile: file2Path, atomically: true, encoding: .utf8)
93+
try? file3Content.write(toFile: file3Path, atomically: true, encoding: .utf8)
94+
95+
createdFiles.append(file2Path)
96+
createdFiles.append(file3Path)
97+
98+
try generator.generateDangerFile(fromContent: contentWithImportsWithIndent, fileName: generatedFilePath, logger: logger)
99+
100+
try assertSnapshot(matching: generatedContent(), as: .lines)
101+
}
86102
}
87103

88104
extension DangerFileGeneratorTests {
105+
private var headerForContentWithoutImports: String {
106+
"""
107+
import Danger
108+
109+
let danger = Danger()
110+
""" + "\n\n"
111+
}
112+
89113
private var contentWithoutImports: String {
90114
"""
91115
message("Text")
@@ -94,12 +118,25 @@ extension DangerFileGeneratorTests {
94118
}
95119

96120
private var contentWithOneImport: String {
97-
"// fileImport: " + file1Path + "\n" + contentWithoutImports
121+
headerForContentWithoutImports
122+
+ "// fileImport: " + file1Path + "\n"
123+
+ contentWithoutImports
98124
}
99125

100126
private var contentWithMultipleImports: String {
101-
"// fileImport: " + file2Path + "\n\n" +
102-
"// fileImport: " + file3Path + "\n" + contentWithOneImport
127+
"// fileImport: " + file2Path + "\n\n"
128+
+ "// fileImport: " + file3Path + "\n"
129+
+ contentWithOneImport
130+
}
131+
132+
private var contentWithImportsWithIndent: String {
133+
headerForContentWithoutImports
134+
+ "if flag {\n"
135+
+ " // fileImport: " + file2Path + "\n"
136+
+ "} else {\n"
137+
+ " // fileImport: " + file3Path + "\n"
138+
+ "}\n"
139+
+ contentWithoutImports
103140
}
104141

105142
private var file1Content: String {
@@ -111,12 +148,17 @@ extension DangerFileGeneratorTests {
111148

112149
private var file2Content: String {
113150
"""
151+
import Danger
152+
114153
file2Content ⚠️
115154
"""
116155
}
117156

118157
private var file3Content: String {
119158
"""
159+
import Danger
160+
import Foundation
161+
120162
file3Content 👩‍👩‍👦‍👦
121163
secondLine
122164
really really really really really really really really really really really really \

Tests/RunnerLibTests/__Snapshots__/DangerFileGeneratorTests/testItGeneratesTheCorrectFileWhenOneOfTheImportedFilesIsMissing.1.txt

+5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
1+
import Danger
2+
13
file2Content ⚠️
24

35
// fileImport: GeneratedTestFile3.swift
6+
7+
let danger = Danger()
8+
49
file1Content 👍🏻
510
secondLine
611
message("Text")
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,6 @@
1+
import Danger
2+
3+
let danger = Danger()
4+
15
message("Text")
26
message("Another Text")

Tests/RunnerLibTests/__Snapshots__/DangerFileGeneratorTests/testItGeneratesTheCorrectFileWhenThereIsASingleImport.1.txt

+4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
import Danger
2+
3+
let danger = Danger()
4+
15
file1Content 👍🏻
26
secondLine
37
message("Text")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import Danger
2+
import Foundation
3+
4+
let danger = Danger()
5+
6+
if flag {
7+
8+
file2Content ⚠️
9+
} else {
10+
11+
file3Content 👩‍👩‍👦‍👦
12+
secondLine
13+
really really really really really really really really really really really really really really really really really really really really really really long text
14+
}
15+
message("Text")
16+
message("Another Text")

Tests/RunnerLibTests/__Snapshots__/DangerFileGeneratorTests/testItGeneratesTheCorrectFileWhenThereIsAreMultipleImports.1.txt

+7
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
1+
import Danger
2+
import Foundation
3+
14
file2Content ⚠️
25

6+
37
file3Content 👩‍👩‍👦‍👦
48
secondLine
59
really really really really really really really really really really really really really really really really really really really really really really long text
10+
11+
let danger = Danger()
12+
613
file1Content 👍🏻
714
secondLine
815
message("Text")

0 commit comments

Comments
 (0)