Does checkcode return the status of the "Message indicator box", i.e. red/orange/green ?
1 view (last 30 days)
Show older comments
I search for an automatic way to find out if a file has a syntax error. That is, to find the same piece of information that the Code Analyzer indicates with red in the "Message indicator box" of the editor.
I took for granted that checkcode provides the information corresponding to the colors of the "Message indicator box".
Doc (R2012a) says:
[...] checkcode('filename') displays messages, sometimes referred to as
Code Analyzer messages, [...]
thus, I tried
info = checkcode( filespec );
and
info = checkcode( filespec, '-id' );
However, I cannot find the piece of information I need. isempty(info) equal to true indicates green, but, I cannot figure out how to find an indicator for red. (Not empty indicates red or orange.)
One way would be to have a list of the ID, which stands for errors.
5 Comments
Sean de Wolski
on 30 Nov 2012
It sounds like he'd like to be able to test whether a file has syntax errors before running it - sounds fair to me...
Accepted Answer
Yair Altman
on 1 Dec 2012
Edited: Yair Altman
on 8 Dec 2012
I must admit that I have it on my articles TODO list for quite some time...
Here's something to get you started: http://www.mathworks.com/matlabcentral/newsreader/view_thread/255839#755939 (continue reading down the thread)
Related: http://www.mathworks.com/matlabcentral/newsreader/view_thread/145245 (oddly enough, you were part of that thread, Per...)
Also related: http://www.mathworks.com/matlabcentral/answers/15929-use-of-mlintmex-in-mcc-deployed-code
In summary, you could simply do:
errMsgs = mlint('-m2',srcFileNames); % m2 = errors only
m1Msgs = mlint('-m1',srcFileNames); % m1 = errors and severe warnings only
allMsgs = mlint('-m0',srcFileNames); % m0 = all errors and warnings
Note that mlint returns the data in struct format, while mlintmex returns a string that you must parse.
Yair Altman
0 Comments
More Answers (1)
Sean de Wolski
on 30 Nov 2012
It looks like you could use try/catch and do an isempty check on the ME.stack:
%checkcodetest.m
X = [pi
for ii = 1:3
disp('hi')
end
And:
try;
checkcodetest;
catch ME;
end
Now to test:
isempty(ME.stack)
0 Comments
See Also
Categories
Find more on Debugging and Analysis in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!