2016-10-12 2 views
2

Использование командыДисплей TODO/FIXME отчет в командном окне Matlab в

checkcode('function.m') 

вы можете запустить анализатор кода на м-файла и вывода отчета в окне командной строки. Есть ли способ сделать это для отчетов TODO/FIXME? (без необходимости записывать в папку, содержащую эту функцию, и вручную запускать ее по всему каталогу)

Бонус: Если да, возможно ли создать пользовательские теги? В eclipse вы можете создавать пользовательские теги TODO, такие как «MTODO» и «JTODO» для разных целей/разных людей, и отображать их отдельно. Возможно ли это в Matlab? Заранее благодарим за любую помощь! Я продолжу поиск в Google и опубликую результаты, если найду что-нибудь.

ответ

0

Вы можете использовать внутреннюю функцию dofixrpt. Однако это возвращает HTML, отображаемый в отчете, а не отображение информации в командной строке.

% Run the report and show it 
cd('myfolder') 
dofixrpt; 

% Alternatively, get the HTML of the report directly 
html = dofixrpt; 

% Write the HTML to a file 
filename = tempname; 
fid = fopen(filename, 'w'); 
fprintf(fid, '%s', html); 
fclose(fid); 

% View the HTML file 
web(filename) 

Тип which dofixrpt или edit dofixrpt, чтобы увидеть более подробную информацию о том, что он делает (это в основном регулярные выражения поиска для %.*TODO и %.*FIXME).

В отчете HTML вы можете найти маркеры, отличные от TODO и FIXME, указав настраиваемый маркер (по умолчанию - ПРИМЕЧАНИЕ). К сожалению, вы можете указать только один. Если вы заглядываете в dofixrpt и немного модифицируете его, было бы очень легко заставить его искать больше.

Наконец, вы можете также добавить запрос расширения с помощью MathWorks, чтобы предоставить команду, аналогичную checkcode, которая просто сделает это за вас и вернет результаты в командной строке. Похоже, что это было бы очень легко для них сделать, и я удивлен, что они еще не сделали это, учитывая, что они сделали что-то подобное для helprpt, coveragerpt, deprpt и т.д.

Надежда, что помогает!

+0

Спасибо! Мне придется немного копаться в коде, но я думаю, что у dofixrpt достаточно материала для того, что я имел в виду. –

+0

Это сработало! Еще раз спасибо. –

0

В конце концов я написал свой собственный контролер кода, который вызывает checkcode для каждого файла m в указанных папках.

fld_list = {pwd, 'folder', 'other_folder'}; 
nProblems = 0; 

for iFld = 1:length(fld_list) 
%  fprintf('Checking %s...\n', fld_list{n}); 
    files = dir(fullfile(fld_list{iFld}, '*.m')); 
    for f = 1:length(files) 
     filename = fullfile(fld_list{iFld}, files(f).name); 
     customCodeCheck(filename); %custom function 
     % check code analyzer 
     codeWarnings = checkcode(filename); 
     if not(isempty(codeWarnings)) 
      fprintf('Problem found in %s\n', files(f).name); 
      for iData = 1:length(codeWarnings) 
      nProblems = nProblems + 1; 
      % print out link to problem 
      fprintf('<a href="matlab:opentoline(''%s'',%d)">line %d:</a> %s\n', ... 
       filename, ... 
       codeWarnings(iData).line, codeWarnings(iData).line, ... 
       codeWarnings(iData).message); 
      end 
     end 
    end 
end 

Вы можете добавить к этому в customCodeCheck функцию, которая ищет TODO и FIXME и предупреждает вас об их существовании

function customCodeCheck(filename) 
    fileContents = fileread(filename); 
    toDos = strfind(fileContents, 'TODO'); 
    fixMes = strfind(fileContents, 'FIXME'); 
    % do other stuff 
end 
+0

Спасибо. Это определенно поможет мне. –

Смежные вопросы