将 clang-format 与 c++20 概念一起使用

Using clang-format with c++20 concepts

我查看了 clang-format 样式选项 https://clang.llvm.org/docs/ClangFormatStyleOptions.html 但没有看到任何对 c++ 概念和 requires 子句的引用。通常我可以配置 clang-format 来做我想做的事,但我不知道如何让它很好地处理我的概念和 requires 子句:

  1. 目前 clang-format 对我的概念执行此操作:
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. 对于带有 requires 子句的函数,clang-format 目前给我:
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-format 10.0.

自 Jul/20 起,概念未得到 clang-format 的正确支持。 LLVM 跟踪器中有一个open issue