Проверяйте файлы кода MATLAB на возможные проблемы
checkcode(filename)
checkcode(filename1,...,filenameN)
checkcode(___,option1,...,optionN)
info = checkcode(___,'-struct')
msg = checkcode(___,'-string')
[___, filepaths]
= checkcode(___)
checkcode(
отображения обмениваются сообщениями о filename
)filename
, которые сообщают о потенциальных проблемах и возможностях для улучшения кода. Эти сообщения иногда упоминаются, когда Анализатор кода обменивается сообщениями. Номер строки в сообщении является гиперссылкой, по которой можно кликнуть, чтобы перейти непосредственно к той строке в Редакторе. Точный текст сообщений checkcode
подвергается некоторому изменению между версиями.
возвращает информацию как 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
.
На вкладке Home, в разделе Environment, нажимают кнопку Preferences.
Выберите Code Analyzer на левой панели.
При Настройках по умолчанию, в разделе Aesthetics и Readability, очищают Использование сообщения вместо | как операция ИЛИ в (скалярных) условных операторах.
Введите mysettings.txt
как имя файла и сохраните его в свою текущую папку.
Нажмите Кнопку отмены, чтобы выйти из панели настройки, не изменяя активные настройки.
Запустите 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
FileName Имя файла, заданное как вектор символов, массив строк или массив ячеек из символьных векторов. Имя файла может включать частичный путь, но должно быть в папке на пути поиска файлов или в текущей папке.
Если filename
является нескалярным массивом строк или массивом ячеек из символьных векторов, информацией об отображениях MATLAB® для каждого файла.
Вы не можете объединить массивы ячеек и символьные массивы имен файлов. Например, у вас не может быть {'lengthofline', 'buggy'}, 'collatz'
как входа.
Пример: 'lengthofline'
Пример: {'lengthofline', 'buggy'}
Типы данных: char | string
option
— Параметр экрана'-id'
| '-fullpath'
| '-notok'
| '-cyc'
| '-modcyc'
| '-config'
Параметр экрана, заданный как одно из этих значений. Опции могут появиться в любом порядке.
Опция | Описание |
---|---|
'-id' | Запросите идентификатор сообщения, где ID является вектором символов. Когда возвращено в структуру, вывод также имеет поле id , которое является ID, сопоставленным с сообщением. |
'-fullpath' | Примите, что входные имена файлов являются абсолютными путями, так, чтобы checkcode не пытался определить местоположение их. |
'-notok' | Запустите Для получения информации о |
'-cyc' | Отобразите сложность Маккейба (также называемый цикломатической сложностью) каждой функции в файле. В целом более низкие значения сложности указывают на программы, которые легче понять и изменить. Данные свидетельствуют, что программы с более высокими значениями сложности, более вероятно, будут содержать ошибки. Часто, можно понизить сложность функции путем деления его на меньшие, более простые функции. Некоторые люди защищают разделять программы, которые имеют значение сложности более чем 10. |
'-modcyc' | Отображает измененную цикломатическую сложность каждой функции в файле. Измененная цикломатическая сложность для функции равна сложности Маккейба за исключением одного различия. Сложность Маккейба считает каждый отдельный случай в операторе switch как 1, в то время как изменено цикломатическая сложность считает целый оператор switch как 1. В целом операторы switch более просты, чем вложенные операторы if-elseif-else и поэтому, измененная цикломатическая сложность часто рассматривается лучшей мерой сложности кода. |
| Замените активный файл настроек по умолчанию с заданным файлом настроек. Если заданный файл не находится в текущей папке, предоставьте полный путь файлу. Для получения информации о создании файла настроек смотрите, Сохраняют настройки сообщения анализатора кода и использовать их снова. Если вы задаете недопустимый файл, Чтобы проигнорировать все файлы настроек и использовать настройки настройки заводской настройки, задайте |
информация
Передайте информациюПередайте информацию, возвращенную как n
-by-1
массив структур, где n
является количеством сообщений, возвращенных командой checkcode
. Если вы задаете несколько имен файлов, как введено, или если вы задаете массив ячеек, как введено, info
содержит массив ячеек структур.
Поле | Описание |
---|---|
| Сообщение, описывающее подозрительное построение тот анализ кода, отловлено. |
| Вектор номеров строки, указывая, к которому применяются строки файла сообщение. |
| Массив 2D столбца чисел столбцов (степени столбца), указывая, к которому применяются столбцы файла сообщение. Первый столбец массива задает столбец в Редакторе, где сообщение начинается. Второй столбец массива задает столбец в Редакторе, где сообщение заканчивается. В массиве 2D столбца ссорится каждое вхождение сообщения. |
msg
— Передайте информациюПередайте информацию, возвращенную как вектор символов. Если вы задаете несколько имен файлов, как введено, или если вы задаете массив ячеек, как введено, msg
содержит вектор символов, где информация для каждого файла разделяется 10 символами знака "равно", пробелом, именем файла, пробелом и 10 символами знака "равно".
Пример: ========== C:\MyMatlabFiles\buggy.m ==========
filepaths
Абсолютные пути файловАбсолютные пути файлов, заданных как массив ячеек из символьных векторов. 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
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.