Does checkcode return the status of the "Message indicator box", i.e. red/orange/green ?

1 view (last 30 days)
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
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...
per isakson
per isakson on 30 Nov 2012
Edited: per isakson on 30 Nov 2012
Yes, I want to check for syntax errors as the first step when running a test suite.

Sign in to comment.

Accepted Answer

Yair Altman
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...)
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

More Answers (1)

Sean de Wolski
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)

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!