Prettier

Swift 编写的 Prettier 代码格式化工具的包装器。该包在 Apple 的 JavaScriptCore 中运行代码格式化工具。所有必要的 JavaScript 文件都与此包捆绑在一起。

此包可以在生产环境中使用吗?

可能可以。该包使用了所有依赖项的稳定版本,我计划在即将到来的项目中使用它。但使用风险自负。

安装

Prettier 使用 Swift Package Manager 分发。通过在您的 Package.swift 清单文件中将其添加为依赖项,或通过项目设置中的“Package Dependencies”来在您的项目中安装它。

let package = Package(
    dependencies: [
        .package(url: "git@github.com:simonbs/Prettier.git", from: "0.1.0")
    ]
)

用法

要开始使用 Prettier,您必须首先导入模块。

import Prettier

现在您可以创建 PrettierFormatter 的实例。

let formatter = PrettierFormatter(plugins: [BabelPlugin()], parser: BabelParser())

我们需要传递要与 Prettier 一起使用的插件。有些文档可以使用单个插件进行格式化,而有些文档如果包含多种语言的混合,则可能需要多个解析器。HTML 文档就是一个例子,它可能包含 HTML、CSS 和 JavaScript。

接下来,我们传递要用于格式化代码的解析器。

要格式化 HTML,我们将如下所示创建 PrettierFormatter。

let formatter = PrettierFormatter(plugins: [HTMLPlugin(), PostCSSPlugin(), BabelPlugin()] , parser: HTMLParser())

请参阅支持的语言列表,查看所有插件和解析器。

创建 PrettierFormatter 的实例后,您必须在格式化代码之前准备格式化器。

formatter.prepare()

这通过从磁盘加载捆绑的 JavaScript 文件并在 JavaScriptCore 中评估它们来准备实例。建议尽早执行此操作,以便您准备好稍后格式化代码。

准备好 PrettierFormatter 实例后,您可以开始格式化代码。

// 💩 This is some poorly formatted JavaScript that we'll format.
let script = """
if(hello=="world"){
return"Hello world"
}
"""
// Earlier we have created and prepared our instance of Prettier. We're ready to format the JavaScript code.
let result = formatter.format(script)
switch result {
case .success(let formattedCode):
    print(formattedCode)
    // ✨ Here's our formatted code. Looks great!
    // if (hello == "world") {
    //   return "Hello world";
    // }
case .failure(let error):
    // Perform proper error handling.
    print(error)
}

可以通过调用 -format(:limitedTo:) 来仅格式化输入字符串中的特定范围。

let result = formatter.format(script, limitedTo: 20 ... 39)
switch result {
case .success(let formattedCode):
    break
case .failure(let error):
    // Perform proper error handling.
    print(error)
}

您还可以指定要从未格式化的代码转换为格式化代码的位置。这对于在开发文本编辑器时移动光标很有用。

let result = formatter.format(script, withCursorAtLocation: 38)
switch result {
case .success(let formatResult):
    print(formatResult.formattedString)
    print(formatResult.cursorOffset)
case .failure(let error):
    // Perform proper error handling.
    print(error)
}

请注意,-format(:withCursorAtLocation:) 返回的结果与 -format()-format(:limitedTo:) 返回的结果不同,因为此结果包含格式化字符串中的位置。

有几个属性可以用来调整格式化后的代码。这些选项与 JavaScript 实现的 Prettier 中的选项 1:1 映射。有关选项的更多信息,请查看 PrettierFormatter.swift 以及 JavaScript 实现的 Prettier 的文档

支持的语言

此包捆绑了 Prettier 库以及对以下语言和框架的支持。下表显示了语言名称和要用于格式化该语言代码的解析器。一个解析器可以支持多种语言。

解析器
PrettierBabel BabelFlowParser, BabelParser, BabelTSParser, JSON5Parser, JSONParser, JSONStringifyParser BabelParser 可用于解析 JavaScript。
PrettierEspree EspreeParser
PrettierFlow FlowParser
PrettierGlimmer GlimmerParser 用于 Handlebars。
PrettierGraphQL GraphQLParser
PrettierHTML AngularParser, HTMLParser, LWCParser, VueParser 包含 BabelParser 和 CSSParser 以解析整个 HTML 文档。HTMLParser 可用于解析 Vue。
PrettierMarkdown MarkdownParser, MDXParser
PrettierMeriyah MeriyahParser
PrettierPHP PHPParser
PrettierPostCSS CSSParser, LessParser, SCSSParser
PrettierTypeScript TypeScriptParser
PrettierYAML YAMLParser

致谢

该包使用以下依赖项。

许可证

MIT