8

clang-tidy 'readability-identifier-naming' モジュールを使用してコードをクリーンアップしたいのですが、クラス属性とメソッドを使用した短い例で適切に使用できませんでした。

次の .clang-tidy ファイルを使用しました。

Checks: '-*,readability-identifier-naming'
CheckOptions:
  - { key: readability-identifier-naming.ClassCase,     value: CamelCase  }
  - { key: readability-identifier-naming.VariableCase,  value: lower_case }
  - { key: readability-identifier-naming.FunctionCase,  value: lower_case }
  - { key: readability-identifier-naming.MemberPrefix,  value: m_         }
  - { key: readability-identifier-naming.ParameterCase, value: lower_case }

このコードで:

class one_class
{
public:
    int OneMethod(int OneArgument);

    int OneAttribute;
};

int one_class::OneMethod(int OneArgument)
{
    OneAttribute = 42;
    return OneArgument + 1;
}

int main(void)
{
    int OneVariable = 0;

    one_class c;
    OneVariable = c.OneMethod(OneVariable);
    c.OneAttribute = 21;

    return 0;
}

結果は次のコードです。

class OneClass
{
public:
    int one_method(int one_argument);

    int m_OneAttribute;
};

int OneClass::one_method(int one_argument)
{
    OneAttribute = 42; // must be m_OneAttribute =
    return one_argument + 1;
}

int main(void)
{
    int one_variable = 0;

    OneClass c;
    one_variable = c.OneMethod(one_variable); // must be c.one_method(...)
    c.OneAttribute = 21; // must be c.m_OneAttribute = ...

    return 0;
}

クラス メソッド OneMethod() の宣言と定義は適切に変換されていますが、main() 関数でのメソッド呼び出しは変換されていません。クラス属性 OneAttribute についても同様です。結果のコードはもうコンパイルされません。

このコマンドラインで clang-tidy を呼び出しました:

clang-tidy-5.0  -checks='readability-identifier-naming'  -fix  test.cpp  --

Ubuntu 16.04のパッケージからclang 5.0とclang 3.8をインストールしました。

私は何を間違っていますか?

4

1 に答える 1

7

あなたは何も悪いことをしていません。clang-tidy何らかの理由でこのケースをカバーしていません。それはただのバグかもしれませんが、もしそうなら、それはかなり明白なもののようです.

興味深いことにclang-rename、このような名前変更を正しく行うことができ、clang-tidy の失敗が技術的な実現可能性によるものではないことを示しています。

これについてバグを報告する価値があるかもしれません: https://bugs.llvm.org/enter_bug.cgi?product=clang-tools-extra

問題にもっと注意を払うために自分自身をCCする必要がある関連するバグがありますが

https://bugs.llvm.org/show_bug.cgi?id=41122

2020-01 に修正された可能性があるようです。

https://bugs.llvm.org/show_bug.cgi?id=41122#c2

しかし、それはおそらく、バックポートされない限り、Clang バージョン < 11 には修正がないことを意味します。

于 2019-04-19T04:42:26.163 に答える