【问题标题】:Can Uncrustify be configured to align braces in one-line functions in header files?可以将 Uncrustify 配置为对齐头文件中的单行函数中的大括号吗?
【发布时间】:2020-07-23 23:27:25
【问题描述】:

场景:C++,在头文件中内联了一堆单行的setter和getter,如下:

    bool hasVoices(int staffIdx) const                  { return m_mstaves[staffIdx]->hasVoices(); }
    void setHasVoices(int staffIdx, bool v)             { return m_mstaves[staffIdx]->setHasVoices(v); }

    StaffLines* staffLines(int staffIdx)                { return m_mstaves[staffIdx]->lines(); }

    Spacer* vspacerDown(int staffIdx) const             { return m_mstaves[staffIdx]->vspacerDown(); }
    Spacer* vspacerUp(int staffIdx) const               { return m_mstaves[staffIdx]->vspacerUp(); }
    void setStaffVisible(int staffIdx, bool visible)    { m_mstaves[staffIdx]->setVisible(visible); }
    void setStaffStemless(int staffIdx, bool stemless)  { m_mstaves[staffIdx]->setStemless(stemless); }
    bool corrupted(int staffIdx) const                  { return m_mstaves[staffIdx]->corrupted(); }
    void setCorrupted(int staffIdx, bool val)           { m_mstaves[staffIdx]->setCorrupted(val); }
    MeasureNumber* noText(int staffIdx) const           { return m_mstaves[staffIdx]->noText(); }
    void setNoText(int staffIdx, MeasureNumber* t)      { m_mstaves[staffIdx]->setNoText(t); }

    MeasureNumberMode measureNumberMode() const         { return m_noMode; }
    void setMeasureNumberMode(MeasureNumberMode v)      { m_noMode = v; }

    Fraction timesig() const                            { return m_timesig; }
    void setTimesig(const Fraction& f)                  { m_timesig = f; }
    bool isIrregular() const                            { return m_timesig != _len; }

    int size() const                                    { return m_segments.size(); }
    Segment* first() const                              { return m_segments.first(); }
    Segment* first(SegmentType t) const                 { return m_segments.first(t); }
    Segment* firstEnabled() const                       { return m_segments.first(ElementFlag::ENABLED); }
    Segment* last() const                               { return m_segments.last(); }
    SegmentList& segments()                             { return m_segments; }
    const SegmentList& segments() const                 { return m_segments; }

    void setUserStretch(qreal v)                        { m_userStretch = v; }

为了便于阅读,函数体是对齐的。我贡献的存储库刚刚开始使用 Uncrustify 并添加了一个测试来强制执行新拉取请求的代码样式。 Uncrustify 按照当前配置将其更改为:

    bool hasVoices(int staffIdx) const { return m_mstaves[staffIdx]->hasVoices(); }
    void setHasVoices(int staffIdx, bool v) { return m_mstaves[staffIdx]->setHasVoices(v); }

    StaffLines* staffLines(int staffIdx) { return m_mstaves[staffIdx]->lines(); }

    Spacer* vspacerDown(int staffIdx) const { return m_mstaves[staffIdx]->vspacerDown(); }
    Spacer* vspacerUp(int staffIdx) const { return m_mstaves[staffIdx]->vspacerUp(); }
    void setStaffVisible(int staffIdx, bool visible) { m_mstaves[staffIdx]->setVisible(visible); }
    void setStaffStemless(int staffIdx, bool stemless) { m_mstaves[staffIdx]->setStemless(stemless); }
    bool corrupted(int staffIdx) const { return m_mstaves[staffIdx]->corrupted(); }
    void setCorrupted(int staffIdx, bool val) { m_mstaves[staffIdx]->setCorrupted(val); }
    MeasureNumber* noText(int staffIdx) const { return m_mstaves[staffIdx]->noText(); }
    void setNoText(int staffIdx, MeasureNumber* t) { m_mstaves[staffIdx]->setNoText(t); }

    MeasureNumberMode measureNumberMode() const { return m_noMode; }
    void setMeasureNumberMode(MeasureNumberMode v) { m_noMode = v; }

    Fraction timesig() const { return m_timesig; }
    void setTimesig(const Fraction& f) { m_timesig = f; }
    bool isIrregular() const { return m_timesig != _len; }

    int size() const { return m_segments.size(); }
    Segment* first() const { return m_segments.first(); }
    Segment* first(SegmentType t) const { return m_segments.first(t); }
    Segment* firstEnabled() const { return m_segments.first(ElementFlag::ENABLED); }
    Segment* last() const { return m_segments.last(); }
    SegmentList& segments() { return m_segments; }
    const SegmentList& segments() const { return m_segments; }

    void setUserStretch(qreal v) { m_userStretch = v; }

可以将 Uncrustify 配置为生成更像第一个示例的东西吗?

【问题讨论】:

    标签: uncrustify


    【解决方案1】:

    你可以使用:

    # Don't split one-line function definitions, as in 'int foo() { return 0; }'.
    # might modify nl_func_type_name
    nl_func_leave_one_liners        = true     # true/false
    

    但是对于成员函数中有 const 的情况,这对您的间距没有帮助。打开一个 bug 票,看看我们能做些什么 / 为您指明方向以为此创建 PR。

    【讨论】:

    • 谢谢,您能给我指出您的错误跟踪器和报告指南吗?
    猜你喜欢
    • 1970-01-01
    • 2010-10-30
    • 2013-06-19
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 2016-08-31
    • 2013-12-18
    相关资源
    最近更新 更多