-
Notifications
You must be signed in to change notification settings - Fork 1
Запуск OCLint и конфигурация
oclint [options] <source0> [... <sourceN>]
При таком запуске OCLint ищет compile_commands.json
, после чего проверяет переданные ему файлы на ошибки.
compile_commands.json
содержит флаги сборки и прочую информацию для каждого из файлов <source0>
… <sourceN>
. Это дает OCLint`у дополнительный контекст.
В теории, наши критерии отлично работают и без всего этого контекста, но лишним не будет. Пример создания compile_commands находится в test-makefile.sh
oclint [options] <source0> [... <sourceN>] -- [flags]
[flags]
- флаги, с которыми компилируются файлы <source0>
… <sourceN>
. Можно не указывать. Тогда получится:
oclint [options] <source> [... <sourceN>] --
Пример в test-gcc.sh
Официальная документация по конфигурации OCLint находится здесь.
Настраивать поведение OCLint можно двумя способами: файлы конфигурации и флаги.
-
Системная конфигурация — файл /etc/oclint. Имеет наименьший приоритет.
-
Пользовательская конфигурация — файл ~/.oclint. Имеет больший приоритет.
-
Конфигурация внутри проекта — файл .oclint в текущей директории. Имеет наибольший приоритет.
Файлы конфигурации содержат в себе YAML. Например:
rules:
- TooLongIfSequence
rulePaths:
- /etc/rules
rule-configurations:
- key: MAX_IF_SEQUENCE_LEN
value: 7
output: oclint.xml
report-type: xml
-
rules — список выбранных критериев.
-
disable-rules — список исключенных критериев.
-
rulePaths — список директорий с критериями (директорий, в которых OCLint ищет .so файлы критериев).
-
rule-configurations — список пар ключ/значение. Настройка констант.
-
output — имя файла, в который перенаправляется вывод.
-
report-type — формат вывода. OCLint поддерживает json, xml, text, html, pmd, xcode.
Остальные опции в рамках oclint_extensions неинтересны, но ознакомиться с ними можно здесь
Того же самого можно добиться флагами:
-
--rule=RuleName
— выбрать правило. -
--disable-rule=RuleName
— исключить правило. -
-R=some/directory/
— добавить директорию с критериями. -
--rc=KEY=VALUE
— настройка констант. -
-o=output_file
— перенаправить вывод в файл. -
--report-type=type
— изменить формат вывода.
-
GlobalVariable (отлавливает глобальные переменные)
-
MallocSizeof (отлавливает отсутствие sizeof внутри malloc/realloc. возможно, проверку стоит ослабить)
-
OnlyMainFunction (отлавливает код, содержащий только функцию main. не факт, что работает корректно, скорее всего полностью бесполезна, если использовать критерий LongMethod)
-
StringCompare (отлавливает сравнение строк с помощью
==
,!=
) -
TooLongIfSequence (отлавливает слишком длинные условия в
if
) Опции:-
MAX_IF_SEQUENCE_LEN
(по умолчанию равен 5) — максимальная разрешенная длина последовательности if-ов с похожими условиями. -
CHECK_BINARY_OPERATOR
(по умолчанию равен 1) — если равен единице, тогда критерий будет смотреть на знаки в условиях if-ов. Например,x < 5
иx > 5
для него будут разными условиями. Чтобы выключить такое поведение, надо присвоить этому параметру значение 0. -
CHECK_FUNCTION_CALL
(по умолчанию равен 1) - если равен единице, тогда критерий будет смотреть на то, какие функции вызываются внутри условий if-ов. Например,gcd(x, y)
иlcm(x, y)
для него будут разными выражениями и условия, их содержащие, будут считаться непохожими. Чтобы выключить такое поведение, надо присвоить этому параметру значение 0.
-
-
BloatedArray (отлавливает слишком многомерные массивы)
-
MAX_DIMENSIONS
(по умолчанию равен 2) — максимальная разрешенная размерность массива. При значении по умолчаниюint arr[][]
будет разрешен, аint arr[][][]
будет запрещен.
-
-
LambdaFunction (отлавливает лямбда-функции)
-
LongMethod (встроен в oclint, отлавливает длинные методы)
-
LONG_METHOD
(по умолчанию равен 50) — максимальная разрешенная длина метода (в строках)
-
-
GotoStatment (встроен в oclint, отлавливает goto)