Refactor SyntaxMapBuilder

This commit is contained in:
1024jp 2023-08-16 16:26:46 +09:00
parent 8e23b2ce70
commit 94b9d7ed53
5 changed files with 21 additions and 18 deletions

View File

@ -2766,7 +2766,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${BUILT_PRODUCTS_DIR}/SyntaxMapBuilder\" \"${SCRIPT_INPUT_FILE_0}\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
shellScript = "\"${BUILT_PRODUCTS_DIR}/SyntaxMapBuilder\" \"${SCRIPT_INPUT_FILE_0}\" \"${SCRIPT_OUTPUT_FILE_0}\"\n";
};
2A53326426799B3B000DE73D /* Build Syntax Map */ = {
isa = PBXShellScriptBuildPhase;
@ -2786,7 +2786,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${BUILT_PRODUCTS_DIR}/SyntaxMapBuilder\" \"${SCRIPT_INPUT_FILE_0}\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
shellScript = "\"${BUILT_PRODUCTS_DIR}/SyntaxMapBuilder\" \"${SCRIPT_INPUT_FILE_0}\" \"${SCRIPT_OUTPUT_FILE_0}\"\n";
};
2ACC21B81E5445BA0078241F /* Lint Swift Code */ = {
isa = PBXShellScriptBuildPhase;

View File

@ -805,4 +805,4 @@
]
}
}
}

View File

@ -1,4 +1,4 @@
// swift-tools-version:5.7
// swift-tools-version:5.9
import PackageDescription
@ -7,8 +7,11 @@ let package = Package(
platforms: [
.macOS(.v13),
],
products: [
.executable(name: "SyntaxMapBuilder", targets: ["SyntaxMapBuilder"]),
],
dependencies: [
.package(url: "https://github.com/apple/swift-argument-parser", from: Version(1, 1, 0)),
.package(url: "https://github.com/apple/swift-argument-parser", from: Version(1, 2, 0)),
.package(url: "https://github.com/jpsim/Yams", from: Version(5, 0, 0)),
],
targets: [

View File

@ -24,7 +24,6 @@
//
import Foundation
import UniformTypeIdentifiers
import ArgumentParser
import Yams
@ -45,23 +44,25 @@ private struct Syntax: Codable {
struct Command: ParsableCommand {
@Argument(help: "A path to the Syntaxes directory.")
var url: URL
var input: URL
@Argument(help: "The path to the result JSON file.")
var output: URL
func run() throws {
let json = try buildSyntaxMap(directoryURL: self.url)
print(json)
try buildSyntaxMap(directoryURL: self.input)
.write(to: self.output)
}
}
func buildSyntaxMap(directoryURL: URL) throws -> String {
func buildSyntaxMap(directoryURL: URL) throws -> Data {
// find syntax files
let urls = try FileManager.default.contentsOfDirectory(at: directoryURL, includingPropertiesForKeys: [.contentTypeKey])
.filter { try $0.resourceValues(forKeys: [.contentTypeKey]).contentType?.conforms(to: .yaml) == true }
let urls = try FileManager.default.contentsOfDirectory(at: directoryURL, includingPropertiesForKeys: nil)
.filter { $0.pathExtension == "yml" }
// build syntaxMap from syntax files
let decoder = YAMLDecoder()
@ -81,10 +82,8 @@ func buildSyntaxMap(directoryURL: URL) throws -> String {
// encode syntaxMap to JSON style
let encoder = JSONEncoder()
encoder.outputFormatting = [.prettyPrinted, .sortedKeys]
let data = try encoder.encode(syntaxMap)
let json = String(data: data, encoding: .utf8)!
return json
return try encoder.encode(syntaxMap)
}

View File

@ -8,7 +8,7 @@
//
// ---------------------------------------------------------------------------
//
// © 2020-2022 1024jp
// © 2020-2023 1024jp
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@ -61,6 +61,7 @@ final class SyntaxMapBuilderTests: XCTestCase {
}
"""
XCTAssertEqual(try buildSyntaxMap(directoryURL: syntaxesURL), expectedResult)
let data = try buildSyntaxMap(directoryURL: syntaxesURL)
XCTAssertEqual(String(data: data, encoding: .utf8), expectedResult)
}
}