clang-format:设置控制C ++属性

时间:2017-08-17 16:26:25

标签: clang-format

通过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);

0 个答案:

没有答案