Модуль clang-tidy readability-identifier-naming не может правильно обрабатывать атрибуты класса и методы класса

Я хотел бы использовать модуль 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  --

У меня clang 5.0 и clang 3.8 установлены из пакетов на Ubuntu 16.04.

Что я делаю неправильно?

0 ответов

Вы не делаете ничего плохого. clang-tidy просто не охватывает этот случай по какой-то причине. Это может быть просто ошибка, хотя, если это так, она кажется довольно явной.

что интересно clang-rename может сделать такие переименования правильно, и показывает, что отказ Clang-Tidy не из-за технической осуществимости.

Возможно, стоит сообщить об ошибке здесь: https://bugs.llvm.org/enter_bug.cgi?product=clang-tools-extra

Хотя есть связанная ошибка, на которую вы должны обратить внимание, чтобы уделить больше внимания этой проблеме.

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

Другие вопросы по тегам