Skip to content

Commit

Permalink
Merge pull request #3 from mackoj/feat/improveErrorHandling
Browse files Browse the repository at this point in the history
Improve errors handling
  • Loading branch information
mackoj committed Oct 27, 2022
2 parents bf86811 + f347b41 commit b3e7854
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 37 deletions.
6 changes: 0 additions & 6 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,5 @@ let package = Package(
.product(name: "ArgumentParser", package: "swift-argument-parser"),
]
),
.testTarget(
name: "PackageGeneratorCLITests",
dependencies: [
"PackageGeneratorCLI"
]
),
]
)
87 changes: 67 additions & 20 deletions Sources/PackageGeneratorCLI/cli.swift
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,46 @@ struct PackageGeneratorCLI: AsyncParsableCommand {
var verbose: Bool = false


func generateParsedPackages() async throws -> [ParsedPackage] {
let sourceCodeFolder = try Folder(path: packageDirectory.path)
func generateParsedPackages() async -> [ParsedPackage] {


var sourceCodeFolder: Folder
do {
sourceCodeFolder = try Folder(path: packageDirectory.path)
} catch {
fatalError("Failed to create Folder with \(packageDirectory.path)")
}

var parsedPackages: [ParsedPackage] = []
let fileData = try Data(contentsOf: inputFileURL)
let lines = try JSONDecoder().decode([String].self, from: fileData)
var fileData: Data
do {
fileData = try Data(contentsOf: inputFileURL)
} catch {
fatalError("Failed to create Data from \(inputFileURL.path)")
}

var lines: [String] = []
do {
lines = try JSONDecoder().decode([String].self, from: fileData)
} catch {
fatalError("Failed to JSONDecoder Data from \(inputFileURL.path) in [String].self")
}

for packagePath in lines {
print("packagePath:", packagePath)
let folder = try Folder(path: packagePath)
let (f, ti) = try getImportsFromTarget(folder)
let parsedPackage = try getTargetOutputFrom(f, ti, sourceCodeFolder)
if FileManager.default.fileExists(atPath: packagePath) == false {
print("\(packagePath) not found")
continue
}

var folder: Folder
do {
folder = try Folder(path: packagePath)
} catch {
fatalError("Failed to create Folder with \(packagePath)")
}

let (f, ti) = getImportsFromTarget(folder)
let parsedPackage = getTargetOutputFrom(f, ti, sourceCodeFolder)
parsedPackages.append(parsedPackage)
}
return parsedPackages
Expand All @@ -38,7 +68,7 @@ struct PackageGeneratorCLI: AsyncParsableCommand {
return folder.subfolders.recursive.filter { $0.name == "Resources" }.first
}

func getTargetOutputFrom(_ packageFolder: Folder, _ imports: [String], _ rootFolder : Folder) throws -> ParsedPackage {
func getTargetOutputFrom(_ packageFolder: Folder, _ imports: [String], _ rootFolder : Folder) -> ParsedPackage {
let hasR = hasRessources(packageFolder)
return ParsedPackage(
name: packageFolder.name,
Expand All @@ -49,23 +79,40 @@ struct PackageGeneratorCLI: AsyncParsableCommand {
)
}

func getImportsFromTarget(_ folder: Folder) throws -> (Folder, [String]) {
return (folder, try folder.files.recursive.flatMap(getImportsFromFile).unique())
func getImportsFromTarget(_ folder: Folder) -> (Folder, [String]) {
return (folder, folder.files.recursive.flatMap(getImportsFromFile).unique())
}

func getImportsFromFile(_ file: File) throws -> [String] {
let syntaxTree = try SyntaxParser.parse(file.url, diagnosticEngine: .none)
let visitor = GetImportVisitor()
_ = visitor.visit(syntaxTree)
return visitor.drain()
func getImportsFromFile(_ file: File) -> [String] {
do {
let syntaxTree = try SyntaxParser.parse(file.url, diagnosticEngine: .none)
let visitor = GetImportVisitor()
_ = visitor.visit(syntaxTree)
return visitor.drain()
} catch {
print("💥 Failed to extract imports from \(file)")
}
return []
}

mutating func run() async throws {
let parsedPackages = try await generateParsedPackages()
let parsedPackages = await generateParsedPackages()
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
let data = try encoder.encode(parsedPackages)
try data.write(to: outputFileURL, options: [.atomic])
if verbose { encoder.outputFormatting = .prettyPrinted }

var data: Data
do {
data = try encoder.encode(parsedPackages)
} catch {
fatalError("Failed to encode parsedPackages")
}

do {
try data.write(to: outputFileURL, options: [.atomic])
} catch {
fatalError("Failed to write parsedPackages in \(outputFileURL.path)")
}
print("package-generator-cli has finished")
}
}

Expand Down
11 changes: 0 additions & 11 deletions Tests/PackageGeneratorCLITests/PackageGeneratorCLITests.swift

This file was deleted.

0 comments on commit b3e7854

Please sign in to comment.