通过Clang-Format Style Options搜索,我似乎无法找到控制C ++属性放置行为的方法。
作为一个例子,请使用这两个声明,第一个声明不会溢出列限制,第二个声明表示:
template <typename TChar>
[[gnu::always_inline]]
static ptr<TChar> within_limit(ptr<TChar> first, ptr<TChar> last);
template <typename TChar, typename FApply, typename... FApplyRest>
[[gnu::always_inline]]
static ptr<TChar> overflow(ptr<TChar> first, ptr<TChar> last, const FApply& apply, const FApplyRest&... apply_rest);
无论我如何调整.clang-format
,输出都是这个的变体:
[[gnu::always_inline]] static ptr<TChar> within_limit(ptr<TChar> first, ptr<TChar> last);
[[gnu::always_inline]] static ptr<TChar>
overflow(ptr<TChar> first, ptr<TChar> last, const FApply& apply, const FApplyRest&... apply_rest);
将属性与类型放在同一行是不可读的(对我而言),所以我更希望clang-format
不要这样做。使用__attribute__((always_inline))
表现出相同的行为。在单个列表([[noreturn, gnu::cold]]
)中指定多个属性会导致重新格式化([[ noreturn, gnu::cold ]]
,原因我不清楚)。格式化程序至少对属性有一些基本的了解。
SO:有没有办法让clang-format
将属性放在他们自己的行上(C ++相当于BreakAfterJavaFieldAnnotations
)?
尝试的变通办法
使用// clang-format off
/ // clang-format on
是一个好的权宜之计,但对于永久性解决方案来说,这绝对太过分了。我仍然希望声明格式正确。除此之外,该项目需要使用大量属性,因此在任何地方都有clang-format
条评论可读性较差。
理论上使用CommentPragmas
会让我在禁用时更加本地化,但输出仍然很奇怪:
template <typename TChar>
[[gnu::always_inline]] // NO-FORMAT: Attribute
static ptr<TChar>
within_limit(ptr<TChar> first, ptr<TChar> last);