LibFormat

LibFormat 是一个基于 Clang 实现自动源代码格式化的库。本文档介绍了 LibFormat 的接口和设计,以及一些基本风格讨论。

如果你只想将 clang-format 作为工具使用或集成到编辑器中,请查看 ClangFormat

设计

待办事项:编写设计文档。

接口

LibFormat 的核心例程是 reformat()

tooling::Replacements reformat(const FormatStyle &Style, Lexer &Lex,
                               SourceManager &SourceMgr,
                               std::vector<CharSourceRange> Ranges);

它从词法分析器 Lex 中读取标记流,并重新格式化 Ranges 中的所有代码范围。 FormatStyle 控制格式化期间做出的基本决策。可以在 风格选项 中找到选项列表。

风格选项在 Clang-Format 风格选项 中描述。

风格选项

风格选项描述了可以用来使 ClangFormat 符合不同风格指南的特定格式化选项。目前,几种风格指南是硬编码的。

/// Returns a format style complying with the LLVM coding standards:
/// https://llvm.net.cn/docs/CodingStandards.html.
FormatStyle getLLVMStyle();

/// Returns a format style complying with Google's C++ style guide:
/// http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml.
FormatStyle getGoogleStyle();

/// Returns a format style complying with Chromium's style guide:
/// https://chromium.googlesource.com/chromium/src/+/refs/heads/main/styleguide/styleguide.md
FormatStyle getChromiumStyle();

/// Returns a format style complying with the GNU coding standards:
/// https://www.gnu.org/prep/standards/standards.html
FormatStyle getGNUStyle();

/// Returns a format style complying with Mozilla's style guide
/// https://firefox-source-docs.mozilla.org/code-quality/coding-style/index.html
FormatStyle getMozillaStyle();

/// Returns a format style complying with Webkit's style guide:
/// https://webkit.org/code-style-guidelines/
FormatStyle getWebkitStyle();

/// Returns a format style complying with Microsoft's style guide:
/// https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference
FormatStyle getMicrosoftStyle();

这些选项也通过 -style 选项在 独立工具 中公开。

将来,我们计划使它可配置。