MATLAB 代码分析器消息 ID 列表

ore*_*nyk 5 matlab

我想找到用于在单行或文件中抑制这些消息的内置代码分析器警告消息的消息 ID 列表(请参阅此处)。我知道您可以按消息 ID 进行搜索,但首选项中的列表(请参阅此处)实际上并未显示 ID 本身。任何帮助将不胜感激,谢谢!

Dev*_*-iL 4

方案一:(仅提供部分消息标签)

经过一段时间的 MATLAB API 挖掘,我找到了您想要的解决方案:

%// Obtain all definitions
msgDefinitions = com.mathworks.widgets.text.mcode.MLint.getMessageDefinitions();
%// Count definitions
numDefinitions = msgDefinitions.size();

definitionDictionary{numDefinitions,2}=[]; %//Preallocation

for ind1=1:numDefinitions
    definitionDictionary{ind1,1} = char(msgDefinitions.get(ind1-1).toString());
    definitionDictionary{ind1,2} = char(msgDefinitions.get(ind1-1).getTag().toString);
end

%//Optional for convenience:
definitionDictionary = sortrows(definitionDictionary,2);
Run Code Online (Sandbox Code Playgroud)

解决方案2:(提供类别标签、语法错误、美观和可读性...)

另一种解决方案(导致更长但更混乱的列表)是

allMsgs = mlint('-allmsg', filename); 
Run Code Online (Sandbox Code Playgroud)

其中filename可以是任何有效的文件名。=======类别标签可以被消息中的一堆识别。

方案对比:

allMsgs = mlint('-allmsg', 'Untitled.m');
msgCodes = regexpi(strtrim({allMsgs.message}'),' ','split'); ...'
msgCodes = cellfun(@(v) v(1), msgCodes(:,1));

alternativeDictionary = sortrows([{allMsgs.message}' msgCodes],2);
Run Code Online (Sandbox Code Playgroud)

在 MATLAB 2014a 中,第二个解决方案产生大小为 的字典571。第一个解决方案的长度是477。一般来说,第二种解决方案提供了更多信息。


更多信息请参阅未记录的 MATLAB文章。您也可以在 SO 上查看这个问题


以下是我如何发现第一个解决方案的一些详细信息:

代码检查器内部的工作流程如下:

  1. 当您右键单击可抑制的警告时,代码检查器(又名CodeAnalyzerlintmlintMKit.class会添加 3 个选项来抑制执行以下方法的警告CodeAnalyzerUtils.class
    • 在这一行 - 执行该方法suppressMessage
    • 在此文件中 - 执行该方法suppressAllMessages
    • 在所有文件中 - 执行该方法disableMessage
  2. 单击前两个选项之一后,doInsertSuppression将调用该方法,并添加字符串:" %#ok<" + paramString + '>'
  3. 神秘的paramString是一个名为的私有属性fTag,它存在于子类中MLint.class并且可以使用getTag()方法访问。这些标签从何而来仍不清楚。

来源(按出现顺序):

  1. $matlabroot/java/jar/widgets.jar -> com.mathworks.widgets.text.mcode.MKit
  2. $matlabroot/java/jar/widgets.jar -> com.mathworks.widgets.text.mcode.analyzer.CodeAnalyzerUtils
  3. $matlabroot/java/jar/widgets.jar -> com.mathworks.widgets.text.mcode.analyzer.CodeAnalyzerActions