Skip to content

Commit 6585672

Browse files
Response to pull request review
Update documentation to make it more future-proof Make `url(forConfigurationFileApplyingTo:)` able to handle directories Use better names
1 parent 00df0a9 commit 6585672

File tree

2 files changed

+17
-15
lines changed

2 files changed

+17
-15
lines changed

Sources/SwiftFormatConfiguration/Configuration.swift

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,8 @@ public struct Configuration: Codable, Equatable {
120120
self.version = highestSupportedConfigurationVersion
121121
}
122122

123-
/// Constructs a Configuration using values from a JSON config file
124-
public init(configFile url: URL) throws {
123+
/// Constructs a Configuration by loading it from a configuration file.
124+
public init(contentsOf url: URL) throws {
125125
let data = try Data(contentsOf: url)
126126
self = try JSONDecoder().decode(Configuration.self, from: data)
127127
}
@@ -196,16 +196,18 @@ public struct Configuration: Codable, Equatable {
196196
try container.encode(rules, forKey: .rules)
197197
}
198198

199-
/// Configuration file associated with a swift file.
200-
///
201-
/// Looks for a ".swift-format" file in the same directory as the swift file, or its nearest parent.
202-
/// If one is not found, returns "nil".
203-
public static func configurationFile(forSwiftFile url: URL) -> URL? {
199+
/// Returns the URL of the configuration file that applies to the given file or directory.
200+
public static func url(forConfigurationFileApplyingTo url: URL) -> URL? {
204201
var path = url.absoluteURL
205202
let configFilename = ".swift-format"
206-
203+
var isDirectory: ObjCBool = false
204+
if FileManager.default.fileExists(atPath: path.path, isDirectory: &isDirectory),
205+
isDirectory.boolValue {
206+
// will be deleted in a loop
207+
path.appendPathComponent("placeholder")
208+
}
207209
repeat {
208-
path = path.deletingLastPathComponent()
210+
path.deleteLastPathComponent()
209211
let candidateFile = path.appendingPathComponent(configFilename)
210212
if FileManager.default.isReadableFile(atPath: candidateFile.path) {
211213
return candidateFile

Sources/swift-format/main.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -88,13 +88,13 @@ fileprivate func processSources(
8888
fileprivate func loadConfiguration(
8989
forSwiftFile swiftFilePath: String?, configFilePath: String?
9090
) -> Configuration {
91-
if let path = configFilePath {
92-
return decodedConfiguration(fromFile: URL(fileURLWithPath: path))
91+
if let configFilePath = configFilePath {
92+
return decodedConfiguration(fromFile: URL(fileURLWithPath: configFilePath))
9393
}
9494

95-
if let swiftFileUrl = swiftFilePath.map(URL.init(fileURLWithPath:)),
96-
let configFileUrl = Configuration.configurationFile(forSwiftFile: swiftFileUrl) {
97-
return decodedConfiguration(fromFile: configFileUrl)
95+
if let swiftFileURL = swiftFilePath.map(URL.init(fileURLWithPath:)),
96+
let configFileURL = Configuration.url(forConfigurationFileApplyingTo: swiftFileURL) {
97+
return decodedConfiguration(fromFile: configFileURL)
9898
}
9999

100100
return Configuration()
@@ -106,7 +106,7 @@ fileprivate func loadConfiguration(
106106
/// code.
107107
fileprivate func decodedConfiguration(fromFile url: Foundation.URL) -> Configuration {
108108
do {
109-
return try Configuration(configFile: url)
109+
return try Configuration(contentsOf: url)
110110
} catch {
111111
// TODO: Improve error message, write to stderr.
112112
print("Could not load configuration at \(url): \(error)")

0 commit comments

Comments
 (0)