在 Matlab 的命令 window 中显示 TODO/FIXME 报告

Display TODO/FIXME report in Matlab's command window

使用命令

checkcode('function.m')

您可以运行 m 文件上的代码分析器并在命令window 中输出报告。 TODO/FIXME 报告有什么方法可以做到这一点吗? (无需 cd 到包含该函数的文件夹并在整个目录中手动 运行 它)

奖金:如果是这样,是否也可以创建自定义标签?在 Eclipse 中,您可以为不同的 purposes/different 人创建自定义 TODO 标签,如 "MTODO" 和 "JTODO",并分别显示。这在 Matlab 中可行吗? 在此先感谢您的帮助!我将继续我的 google 搜索,如果我找到了什么,我会 post 结果。

我最终编写了自己的代码检查器,它在指定文件夹中的每个 m 文件上调用 checkcode

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

您可以使用内部函数dofixrpt。但是,这 return 是报告中显示的 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 dofixrptedit dofixrpt 以查看有关其功能的更多详细信息(它基本上是 %.*TODO%.*FIXME 的正则表达式搜索)。

在HTML报告中,您可以通过指定自定义标记(默认为NOTE)来查找TODO和FIXME以外的标记。不幸的是,您只能指定一个。如果您打算在 dofixrpt 中查找并稍作修改,则很容易让它查找更多内容。

最后,您还可以向 MathWorks 提出增强请求,以提供类似于 checkcode 的命令,它只会为您执行此操作,并 return 在命令行中显示结果。看起来这对他们来说很容易做到,我很惊讶他们还没有这样做,因为他们已经为 helprptcoveragerpt、[=20 做了类似的事情=]等

希望对您有所帮助!