diff --git a/CHANGELOG.md b/CHANGELOG.md index b644b07cd..b9814e441 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,8 @@ #### Enhancements -* None. +* Add support for params files for file paths. + [keith](https://github.com/keith) #### Bug Fixes diff --git a/Source/swiftlint/Helpers/LintableFilesVisitor.swift b/Source/swiftlint/Helpers/LintableFilesVisitor.swift index f536fc560..71cf15753 100644 --- a/Source/swiftlint/Helpers/LintableFilesVisitor.swift +++ b/Source/swiftlint/Helpers/LintableFilesVisitor.swift @@ -28,6 +28,16 @@ enum LintOrAnalyzeModeWithCompilerArguments { case analyze(allCompilerInvocations: CompilerInvocations) } +private func resolveParamsFiles(args: [String]) -> [String] { + return args.reduce(into: []) { allArgs, arg in + if arg.hasPrefix("@"), let contents = try? String(contentsOfFile: String(arg.dropFirst())) { + allArgs += resolveParamsFiles(args: contents.split(separator: "\n").map(String.init)) + } else if !arg.isEmpty { + allArgs.append(arg) + } + } +} + struct LintableFilesVisitor { let paths: [String] let action: String @@ -44,7 +54,7 @@ struct LintableFilesVisitor { init(paths: [String], action: String, useSTDIN: Bool, quiet: Bool, useScriptInputFiles: Bool, forceExclude: Bool, cache: LinterCache?, parallel: Bool, allowZeroLintableFiles: Bool, block: @escaping (CollectedLinter) -> Void) { - self.paths = paths + self.paths = resolveParamsFiles(args: paths) self.action = action self.useSTDIN = useSTDIN self.quiet = quiet @@ -61,7 +71,7 @@ struct LintableFilesVisitor { useScriptInputFiles: Bool, forceExclude: Bool, cache: LinterCache?, compilerInvocations: CompilerInvocations?, allowZeroLintableFiles: Bool, block: @escaping (CollectedLinter) -> Void) { - self.paths = paths + self.paths = resolveParamsFiles(args: paths) self.action = action self.useSTDIN = useSTDIN self.quiet = quiet