контрольный код

Проверяйте файлы кода MATLAB на возможные проблемы

Синтаксис

checkcode(filename)
checkcode(filename1,...,filenameN)
checkcode(___,option1,...,optionN)
info = checkcode(___,'-struct')
msg = checkcode(___,'-string')
[___, filepaths] = checkcode(___)

Описание

пример

checkcode(filename) отображения обмениваются сообщениями о filename, которые сообщают о потенциальных проблемах и возможностях для улучшения кода. Эти сообщения иногда упоминаются, когда Анализатор кода обменивается сообщениями. Номер строки в сообщении является гиперссылкой, по которой можно кликнуть, чтобы перейти непосредственно к той строке в Редакторе. Точный текст сообщений checkcode подвергается некоторому изменению между версиями.

checkcode(filename1,...,filenameN) сообщения отображений для каждого задали filename.

пример

checkcode(___,option1,...,optionN) изменяет возвращенные сообщения на основе заданных флагов опции. Например, задайте '-modcyc', чтобы запросить измененную цикломатическую сложность быть возвращенной с каждым сообщением. Можно задать опции с любым из входных параметров в предыдущих синтаксисах.

пример

info = checkcode(___,'-struct') возвращает информацию как n-by-1 массив структур, где n является количеством найденных сообщений.

msg = checkcode(___,'-string') возвращает информацию как вектор символов.

Если вы не используете аргумент '-struct' или '-string', и вы задаете выходной аргумент, поведением по умолчанию является '-struct'.

[___, filepaths] = checkcode(___) также возвращает filepaths, абсолютные пути к именам файлов. Можно задать filepaths или с '-struct' или с опциями '-string'.

Примеры

свернуть все

Запустите checkcode на файле в качестве примера lengthofline.m. MATLAB® отображает сообщения Анализатора кода для lengthofline.m в Командном окне.

checkcode('lengthofline')
L 21 (C 1-9): The value assigned to variable 'nothandle' might be unused.
L 22 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)).
L 23 (C 5-11): The variable 'notline' appears to change size on every loop iteration. Consider preallocating for speed.
L 23 (C 44-49): Use STRCMPI(str1,str2) instead of using UPPER/LOWER in a call to STRCMP.
L 27 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)).
L 33 (C 13-16): The variable 'data' appears to change size on every loop iteration. Consider preallocating for speed.
L 33 (C 24-31): Use dynamic fieldnames with structures instead of GETFIELD.
L 37 (C 29): When both arguments are numeric scalars, consider replacing | with || for performance.
L 38 (C 47): When both arguments are numeric scalars, consider replacing | with || for performance.
L 39 (C 47): When both arguments are numeric scalars, consider replacing | with || for performance.
L 42 (C 13-15): The variable 'dim' appears to change size on every loop iteration. Consider preallocating for speed.
L 44 (C 13-15): The variable 'dim' appears to change size on every loop iteration. Consider preallocating for speed.
L 47 (C 52): Invalid syntax at ';'. A '(' might be missing a closing ')'.
L 47 (C 53): Invalid syntax at ')'. A '[' might be missing a closing ']'.
L 47 (C 54): Parse error at ']': usage might be invalid MATLAB syntax.
L 48 (C 17): Terminate statement with semicolon to suppress output (in functions).
L 48 (C 23): Use of brackets [] is unnecessary. Use parentheses to group, if needed.

Запустите checkcode на файле в качестве примера lengthofline.m. Включайте идентификаторы сообщений и сохраните результаты в структуре.

info = checkcode('lengthofline', '-id')
info = 17x1 struct array with fields:
    id
    message
    fix
    line
    column

Просмотрите значения для первого сообщения

info(1)
ans = struct with fields:
         id: 'NASGU'
    message: 'The value assigned to variable 'nothandle' might be unused.'
        fix: 0
       line: 21
     column: [1 9]

Запустите checkcode на файле в качестве примера lengthofline.m с помощью опции '-modcyc'. MATLAB® отображает измененную цикломатическую сложность файла, сопровождаемого сообщениями Анализатора кода для lengthofline.m.

checkcode('lengthofline', '-modcyc')
L 1 (C 23-34): The modified cyclomatic complexity of 'lengthofline' is 12.
L 21 (C 1-9): The value assigned to variable 'nothandle' might be unused.
L 22 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)).
L 23 (C 5-11): The variable 'notline' appears to change size on every loop iteration. Consider preallocating for speed.
L 23 (C 44-49): Use STRCMPI(str1,str2) instead of using UPPER/LOWER in a call to STRCMP.
L 27 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)).
L 33 (C 13-16): The variable 'data' appears to change size on every loop iteration. Consider preallocating for speed.
L 33 (C 24-31): Use dynamic fieldnames with structures instead of GETFIELD.
L 37 (C 29): When both arguments are numeric scalars, consider replacing | with || for performance.
L 38 (C 47): When both arguments are numeric scalars, consider replacing | with || for performance.
L 39 (C 47): When both arguments are numeric scalars, consider replacing | with || for performance.
L 42 (C 13-15): The variable 'dim' appears to change size on every loop iteration. Consider preallocating for speed.
L 44 (C 13-15): The variable 'dim' appears to change size on every loop iteration. Consider preallocating for speed.
L 47 (C 52): Invalid syntax at ';'. A '(' might be missing a closing ')'.
L 47 (C 53): Invalid syntax at ')'. A '[' might be missing a closing ']'.
L 47 (C 54): Parse error at ']': usage might be invalid MATLAB syntax.
L 48 (C 17): Terminate statement with semicolon to suppress output (in functions).
L 48 (C 23): Use of brackets [] is unnecessary. Use parentheses to group, if needed.

Подавите определенные сообщения путем создания и определения файла настроек. Например, файл, lengthofline.m включает несколько строк, которые используют | вместо || как оператор OR. По умолчанию checkcode отмечает эти строки.

checkcode('lengthofline')
L 21 (C 1-9): The value assigned to variable 'nothandle' might be unused.
L 22 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)).
L 23 (C 5-11): The variable 'notline' appears to change size on every loop iteration. Consider preallocating for speed.
L 23 (C 44-49): Use STRCMPI(str1,str2) instead of using UPPER/LOWER in a call to STRCMP.
L 27 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)).
L 33 (C 13-16): The variable 'data' appears to change size on every loop iteration. Consider preallocating for speed.
L 33 (C 24-31): Use dynamic fieldnames with structures instead of GETFIELD.
L 37 (C 29): When both arguments are numeric scalars, consider replacing | with || for performance.
L 38 (C 47): When both arguments are numeric scalars, consider replacing | with || for performance.
L 39 (C 47): When both arguments are numeric scalars, consider replacing | with || for performance.
L 42 (C 13-15): The variable 'dim' appears to change size on every loop iteration. Consider preallocating for speed.
L 44 (C 13-15): The variable 'dim' appears to change size on every loop iteration. Consider preallocating for speed.
L 47 (C 52): Invalid syntax at ';'. A '(' might be missing a closing ')'.
L 47 (C 53): Invalid syntax at ')'. A '[' might be missing a closing ']'.
L 47 (C 54): Parse error at ']': usage might be invalid MATLAB syntax.
L 48 (C 17): Terminate statement with semicolon to suppress output (in functions).
L 48 (C 23): Use of brackets [] is unnecessary. Use parentheses to group, if needed.

Создайте файл настроек, который подавляет сообщение, отмечающее использование | как оператор OR.

  1. На вкладке Home, в разделе Environment, нажимают кнопку Preferences.

  2. Выберите Code Analyzer на левой панели.

  3. При Настройках по умолчанию, в разделе Aesthetics и Readability, очищают Использование сообщения вместо | как операция ИЛИ в (скалярных) условных операторах.

  4. Введите mysettings.txt как имя файла и сохраните его в свою текущую папку.

  5. Нажмите Кнопку отмены, чтобы выйти из панели настройки, не изменяя активные настройки.

Запустите checkcode на файле в качестве примера с помощью пользовательского файла настроек mysettings.txt. Использование сообщения вместо | как операция ИЛИ в (скалярных) условных операторах подавлено и более не видимо в списке сообщений.

checkcode('lengthofline','-config=mysettings.txt')
L 21 (C 1-9): The value assigned to variable 'nothandle' might be unused.
L 22 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)).
L 23 (C 5-11): The variable 'notline' appears to change size on every loop iteration. Consider preallocating for speed.
L 23 (C 44-49): Use STRCMPI(str1,str2) instead of using UPPER/LOWER in a call to STRCMP.
L 27 (C 12-15): NUMEL(x) is usually faster than PROD(SIZE(x)).
L 33 (C 13-16): The variable 'data' appears to change size on every loop iteration. Consider preallocating for speed.
L 33 (C 24-31): Use dynamic fieldnames with structures instead of GETFIELD.
L 42 (C 13-15): The variable 'dim' appears to change size on every loop iteration. Consider preallocating for speed.
L 44 (C 13-15): The variable 'dim' appears to change size on every loop iteration. Consider preallocating for speed.
L 47 (C 52): Invalid syntax at ';'. A '(' might be missing a closing ')'.
L 47 (C 53): Invalid syntax at ')'. A '[' might be missing a closing ']'.
L 47 (C 54): Parse error at ']': usage might be invalid MATLAB syntax.
L 48 (C 17): Terminate statement with semicolon to suppress output (in functions).
L 48 (C 23): Use of brackets [] is unnecessary. Use parentheses to group, if needed.

Входные параметры

свернуть все

Имя файла, заданное как вектор символов, массив строк или массив ячеек из символьных векторов. Имя файла может включать частичный путь, но должно быть в папке на пути поиска файлов или в текущей папке.

Если filename является нескалярным массивом строк или массивом ячеек из символьных векторов, информацией об отображениях MATLAB® для каждого файла.

Примечание

Вы не можете объединить массивы ячеек и символьные массивы имен файлов. Например, у вас не может быть {'lengthofline', 'buggy'}, 'collatz' как входа.

Пример: 'lengthofline'

Пример: {'lengthofline', 'buggy'}

Типы данных: char | string

Параметр экрана, заданный как одно из этих значений. Опции могут появиться в любом порядке.

ОпцияОписание
'-id'Запросите идентификатор сообщения, где ID является вектором символов. Когда возвращено в структуру, вывод также имеет поле id, которое является ID, сопоставленным с сообщением.
'-fullpath' Примите, что входные имена файлов являются абсолютными путями, так, чтобы checkcode не пытался определить местоположение их.
'-notok'

Запустите checkcode для всех строк в filename, даже те строки, которые заканчиваются директивой подавления checkcode, %#ok.

Для получения информации о %#ok и подавляющих сообщениях из вашей программы, смотрите, Настраивают, Анализатор кода передают Индикаторы и сообщения.

'-cyc'Отобразите сложность Маккейба (также называемый цикломатической сложностью) каждой функции в файле. В целом более низкие значения сложности указывают на программы, которые легче понять и изменить. Данные свидетельствуют, что программы с более высокими значениями сложности, более вероятно, будут содержать ошибки. Часто, можно понизить сложность функции путем деления его на меньшие, более простые функции. Некоторые люди защищают разделять программы, которые имеют значение сложности более чем 10.
'-modcyc'Отображает измененную цикломатическую сложность каждой функции в файле. Измененная цикломатическая сложность для функции равна сложности Маккейба за исключением одного различия. Сложность Маккейба считает каждый отдельный случай в операторе switch как 1, в то время как изменено цикломатическая сложность считает целый оператор switch как 1. В целом операторы switch более просты, чем вложенные операторы if-elseif-else и поэтому, измененная цикломатическая сложность часто рассматривается лучшей мерой сложности кода.

'-config=settingsfile'

'-config=factory'

Замените активный файл настроек по умолчанию с заданным файлом настроек. Если заданный файл не находится в текущей папке, предоставьте полный путь файлу.

Для получения информации о создании файла настроек смотрите, Сохраняют настройки сообщения анализатора кода и использовать их снова. Если вы задаете недопустимый файл, checkcode возвращает сообщение, указывающее, что он не может открыть или считать файл, который вы задали. В этом случае checkcode использует настройки заводской настройки.

Чтобы проигнорировать все файлы настроек и использовать настройки настройки заводской настройки, задайте '-config=factory'.

Выходные аргументы

свернуть все

Передайте информацию, возвращенную как n-by-1 массив структур, где n является количеством сообщений, возвращенных командой checkcode. Если вы задаете несколько имен файлов, как введено, или если вы задаете массив ячеек, как введено, info содержит массив ячеек структур.

Поле

Описание

message

Сообщение, описывающее подозрительное построение тот анализ кода, отловлено.

line

Вектор номеров строки, указывая, к которому применяются строки файла сообщение.

column

Массив 2D столбца чисел столбцов (степени столбца), указывая, к которому применяются столбцы файла сообщение. Первый столбец массива задает столбец в Редакторе, где сообщение начинается. Второй столбец массива задает столбец в Редакторе, где сообщение заканчивается. В массиве 2D столбца ссорится каждое вхождение сообщения.

Передайте информацию, возвращенную как вектор символов. Если вы задаете несколько имен файлов, как введено, или если вы задаете массив ячеек, как введено, msg содержит вектор символов, где информация для каждого файла разделяется 10 символами знака "равно", пробелом, именем файла, пробелом и 10 символами знака "равно".

Пример: ========== C:\MyMatlabFiles\buggy.m ==========

Абсолютные пути файлов, заданных как массив ячеек из символьных векторов. MATLAB перечисляет filepaths в том же порядке как заданные входные файлы.

Советы

Чтобы обеспечить Анализатор кода, чтобы проигнорировать строку кода, используйте %#ok в конце строки. Можно добавить комментарии после тега.

unsuppressed1 = 10 	% This line will get caught
suppressed2 = 20		%#ok This line will not get caught
suppressed3 = 30		%#ok This line will not get caught

Представленный в R2011b