mirror of
https://github.com/coteditor/CotEditor.git
synced 2024-09-20 15:47:57 +03:00
Refactor SyntaxMapBuilder
This commit is contained in:
parent
8e23b2ce70
commit
94b9d7ed53
@ -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;
|
||||
|
@ -805,4 +805,4 @@
|
||||
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
@ -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: [
|
||||
|
@ -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)
|
||||
}
|
||||
|
||||
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user