diff --git a/CHANGELOG.md b/CHANGELOG.md index 8aae634cc..a8555688e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -124,6 +124,9 @@ * Fix `variable_name` and `type_name` rules on Linux. [Marcelo Fabri](https://github.com/marcelofabri) +* Fix linting directories with names ending with `.swift`. + [JP Simard](https://github.com/jpsim) + ## 0.15.0: Hand Washable Holiday Linens 🎄 ##### Breaking diff --git a/Source/SwiftLintFramework/Models/Configuration.swift b/Source/SwiftLintFramework/Models/Configuration.swift index b6ceae622..8a309efd7 100644 --- a/Source/SwiftLintFramework/Models/Configuration.swift +++ b/Source/SwiftLintFramework/Models/Configuration.swift @@ -9,6 +9,20 @@ import Foundation import SourceKittenFramework +extension String { + fileprivate var isFile: Bool { + var isDirectoryObjC: ObjCBool = false + if FileManager.default.fileExists(atPath: self, isDirectory: &isDirectoryObjC) { +#if os(Linux) + return !isDirectoryObjC +#else + return !isDirectoryObjC.boolValue +#endif + } + return false + } +} + private let fileManager = FileManager.default private enum ConfigurationKey: String { @@ -170,7 +184,7 @@ public struct Configuration: Equatable { public func lintablePathsForPath(_ path: String, fileManager: LintableFileManager = fileManager) -> [String] { // If path is a Swift file, skip filtering with excluded/included paths - if path.bridge().isSwiftFile() { + if path.bridge().isSwiftFile() && path.isFile { return [path] } let pathsForPath = included.isEmpty ? fileManager.filesToLintAtPath(path, rootDirectory: nil) : []