polyspace.CodingRulesOptions class

Пакет: полипространство

Создайте пользовательский список правил кодирования для проверки

Описание

Создайте пользовательский список правил кодирования для сдачи на хранение в Polyspace® анализ.

Примечание

Прежде чем запускать Polyspace из MATLAB®необходимо связать установки Polyspace и MATLAB. См. «Интеграция Polyspace с MATLAB и Simulink».

Конструкция

ruleList = polyspace.CodingRulesOptions(RuleSet) создает объект правил кодирования ruleList для RuleSet набор правил кодирования. Установите активные правила в объекте правил кодирования.

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

расширить все

Набор стандартных правил кодирования задается как один из акронимов правил кодирования.

Пример: 'misraCpp'

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

Свойства

Для каждого набора правил кодирования создается объект со всеми поддерживаемыми правилами, разделенными на разделы. По умолчанию все правила включены. Чтобы выключить правило, установите правило на false. Для примера:

misraRules = polyspace.CodingRulesOptions('misraC');
misraRules.Section_20_Standard_libraries.rule_20_1 = false;

Копировать семантику

Значение. Чтобы узнать, как классы значений влияют на операции копирования, см. раздел «Копирование объектов».

Примеры

свернуть все

Настройте правила кодирования, которые проверяются в анализе Polyspace. Поскольку все правила включены по умолчанию, можно создать пользовательский подмножество, отключив некоторые правила.

Создайте два объекта: polyspace.CodingRulesOptions объект для настройки правил кодирования и polyspace.Project объект для выполнения анализа Polyspace.

misraRules = polyspace.CodingRulesOptions('misraC2012');
proj = polyspace.Project;

Настройте список правил кодирования, отключив правила 2.1-2.7.

misraRules.Section_2_Unused_code.rule_2_1 = false;
misraRules.Section_2_Unused_code.rule_2_2 = false;
misraRules.Section_2_Unused_code.rule_2_3 = false;
misraRules.Section_2_Unused_code.rule_2_4 = false;
misraRules.Section_2_Unused_code.rule_2_5 = false;
misraRules.Section_2_Unused_code.rule_2_6 = false;
misraRules.Section_2_Unused_code.rule_2_7 = false;

Добавьте настроенный список правил кодирования в Configuration свойство polyspace.Project объект.

proj.Configuration.CodingRulesCodeMetrics.MisraC3Subset = misraRules;
proj.Configuration.CodingRulesCodeMetrics.EnableMisraC3 = true;
proj.Configuration.CodingRulesCodeMetrics.EnableCheckersSelectionByFile = true;
Необходимо включить выбор шашек по файлам, поскольку при запуске Polyspace для включения проверки правил кодирования используется XML-файл внизу. XML- файл сохранен в .settings подпапка папки результатов.

Теперь можно использовать polyspace.Project объект, чтобы запустить анализ. Для образца можно ввести:

proj.Configuration.Sources = {fullfile(polyspaceroot, 'polyspace', ... 
    'examples', 'cxx', 'Bug_Finder_Example', 'sources', 'numerical.c')};
run(proj, 'bugfinder');

Предположим, что вы хотите задать подмножество MISRA C®: 2012 правила проведения анализа. Вместо перечисления правил, которые вы хотите отключить, можно задать правила, которые вы хотите сохранить включенными. Номера правил также можно задать только без разделов MISRA C: 2012, содержащих правила.

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

function rulesObject = createRulesObject(rulesToEnable)

%% This function takes a cell array of MISRA C:2012 rules and returns
%% a polyspace.CodingRulesOptions object with the rules enabled.
%% Example input argument: {'2.7', '3.1'}

    rulesObject = polyspace.CodingRulesOptions('misraC2012');
    
    % Coding Standards documents have many sections. Loop over all
    % sections.
    ruleSections = properties(rulesObject);
    for i=1:length(ruleSections)
         sectionName = ruleSections{i};
         rulesInSection = properties(rulesObject.(sectionName));
         
         % Loop over all rules in a section, enable or disable rule based
         % on input
         for j=1:length(rulesInSection)
             ruleNumberAsProperty = rulesInSection{j};
             ruleNumber = strrep(strrep(ruleNumberAsProperty,'rule_',''),'_','.');
             if(any(strcmp(rulesToEnable,ruleNumber)))
                 rulesObject.(sectionName).(ruleNumberAsProperty)=1;
             else
                 rulesObject.(sectionName).(ruleNumberAsProperty)=0;
             end
         end
    end
end

Для образца, чтобы включить правила 1.1 и 2.2, введите:

createRulesObject({'1.1','2.2'})

Введенный в R2016b