将 clang 格式与 c++20 概念一起使用



我已经查看了 clang 格式样式选项 https://clang.llvm.org/docs/ClangFormatStyleOptions.html 但没有看到任何对 c++ 概念和 require 子句的引用。 通常我可以配置 clang 格式来做我想做的事,但我无法弄清楚如何让它处理我的概念并很好地需要子句:

  1. 目前 clang 格式对我的概念这样做:
template <typename F, typename P, typename T>
concept Accumulate_Fn = Parser<P>&& std::invocable<F, T, parser_t<P>>&&
std::same_as<T, std::invoke_result_t<F, T, parser_t<P>>>;

但是我想将每个约束放在自己的行上(就像它对太长的函数参数所做的那样(,以便结果如下所示:

template <typename F, typename P, typename T>
concept Accumulate_Fn = Parser<P> &&
std::invocable<F, T, parser_t<P>> &&
std::same_as<T, std::invoke_result_t<F, T, parser_t<P>>>;
  1. 对于带有 require 子句的函数,clang 格式目前给我:
template <Parser P1, Parser P2, typename T, Accumulate_Fn<P1, parser_t<P1>> F>
requires std::same_as<T, parser_t<P1>> constexpr Parser auto
separated_by(P1&& p1, P2&& p2, T&& init, F&& f)

但我想要更接近:

template <Parser P1, Parser P2, typename T, Accumulate_Fn<P1, parser_t<P1>> F>
requires std::same_as<T, parser_t<P1>> 
constexpr Parser auto separated_by(P1&& p1, P2&& p2, T&& init, F&& f)

有什么神奇的选择可以做到这一点吗? 我目前使用的是 clang 格式 10.0。

截至 7 月 20 日,概念clang-format没有得到适当的支持。LLVM跟踪器中存在一个未解决的问题。

最新更新