385 lines
8.2 KiB
Matlab
385 lines
8.2 KiB
Matlab
% Copyright (C) 2023 Eric Ludlam (and others)
|
|
|
|
% This program is free software: you can redistribute it and/or modify
|
|
% it under the terms of the GNU General Public License as published by
|
|
% the Free Software Foundation, either version 3 of the License, or
|
|
% (at your option) any later version.
|
|
|
|
% This program is distributed in the hope that it will be useful,
|
|
% but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
% GNU General Public License for more details.
|
|
|
|
% You should have received a copy of the GNU General Public License
|
|
% along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
function indents(a,b,stuff,cmddual1fake,cmddual2fake)
|
|
% Help text
|
|
% !!0
|
|
% of many lines
|
|
% !!0
|
|
|
|
% including a gap
|
|
% !!0
|
|
|
|
arguments (Repeating) % !!4
|
|
a (1,1) {mustBeNumeric} % !!8
|
|
b (:,:) double % !!8
|
|
stuff {mustBeMember(stuff, { 'this' 'that' 'other' })} % !!8
|
|
cmddual1fake double % !!8
|
|
cmddual2fake int % !!8
|
|
end % !!4
|
|
|
|
persistent var1 % !!4
|
|
global var2 % !!4
|
|
persistent var3 % !!4
|
|
|
|
|
|
locala = a; %#ok
|
|
localb = b; %#ok
|
|
localstuff = stuff; %#ok
|
|
|
|
if isempty(var1) var1=1; end %#ok !!4
|
|
if isempty(var3) var3=2; end %#ok !!4
|
|
|
|
ends_in_comments_and_strings(var1, var2, var3); % !!4 has end in name
|
|
|
|
% !!4
|
|
|
|
block_starts_in_comments_and_strings(cmddual1fake,cmddual2fake);
|
|
array_constant_decls();
|
|
|
|
% !!4
|
|
|
|
continuations_and_block_comments();
|
|
|
|
% $$$ !!0
|
|
% $$$ special ignore comments
|
|
|
|
has_nested_fcn(); % !!4
|
|
|
|
% !!4 - after ignore comments
|
|
|
|
end % Comment with end in it
|
|
|
|
%!!0
|
|
|
|
function B = ends_in_comments_and_strings()
|
|
% !!0
|
|
|
|
% >>6
|
|
if foo
|
|
A = 1;
|
|
end % <<6 end in comment after end
|
|
|
|
% !!4
|
|
|
|
symbol_with_end_in_it;
|
|
|
|
B = A(1:end); %#ok
|
|
|
|
%% cell start comment !!4
|
|
if foo %!!4
|
|
C = "this is the end of the line";
|
|
% !!8
|
|
else %!!4
|
|
|
|
% !!8
|
|
end; D = "string end string";
|
|
% !!4
|
|
|
|
E = [ D C];
|
|
|
|
if bar
|
|
|
|
A = E;
|
|
|
|
end; B = A(1:end);
|
|
% !!4
|
|
|
|
E = B;
|
|
|
|
if baz
|
|
|
|
A = C;
|
|
|
|
end; B = [ 1 2 ... % is this the end?
|
|
3 4 ]; % !!15
|
|
|
|
% !!4
|
|
|
|
if foo
|
|
|
|
A = E;
|
|
|
|
end ... the other end
|
|
% !! 4
|
|
|
|
B = [ B A ]; % !!4
|
|
|
|
str = 'This is a char array with ... in it';
|
|
foo(str); % !!4
|
|
|
|
fcncall(arg1, '...', arg3); % !!4
|
|
1; % !!4
|
|
|
|
% Multi- end s
|
|
% >>8
|
|
if foo %#ok
|
|
if bar %#ok
|
|
if baz
|
|
|
|
A = B;
|
|
|
|
else
|
|
|
|
end; end; end % <<8 comment end thing
|
|
|
|
% !!4
|
|
B = A;
|
|
|
|
end
|
|
|
|
function out = array_constant_decls()
|
|
|
|
A = [ 1 2 3 ]; %!!4
|
|
|
|
Blong = [ 1 2; %!!4
|
|
3 4; %!!14
|
|
]; %!!12
|
|
|
|
Csep = [
|
|
1 2; %!!8
|
|
3 4; %!!8
|
|
]; %!!11
|
|
|
|
multinest = { [ 1 2 %!!4
|
|
3 4 ]; %!!20
|
|
{ 5 6 7 ... %!!18
|
|
8 9 10 ... %!!20
|
|
}; %!!18
|
|
fcncall(10, ... %!!18
|
|
12, ... %!!26
|
|
[ 13 14; %!!26
|
|
15 16 ]) %!!28
|
|
} ; %!!16
|
|
|
|
nest = { ... %!!4
|
|
1 %!!8
|
|
[ ... %!!8
|
|
2 3 %!!10
|
|
] ... %!!8
|
|
3 %!!8
|
|
}; %!!11
|
|
|
|
cascade_long_name = ... %!!4
|
|
{ ... %!!8
|
|
1 %!!10
|
|
2 %!!10
|
|
}; %!!8
|
|
|
|
% TODO
|
|
% I don't know why the below indents this way.
|
|
% It should either do all max indent, or all lined up with parens.
|
|
thing.thing.long.long.longname({ 'str' %!!4
|
|
'str' %!!37
|
|
'str' %!!37
|
|
'str' %!!37
|
|
}); %!!35
|
|
|
|
thing.thing.long.long.longname('str', ... %!!4
|
|
'str', ... %!!35
|
|
'str', ... %!!35
|
|
'str' ... %!!35
|
|
); %!!34
|
|
|
|
% Line starting with end inside parens
|
|
disp(Csep(1: ... %!!4
|
|
end)); %!!14
|
|
|
|
% This array has bad syntactic expression parsing due to the
|
|
% apostrophy
|
|
Closures = [
|
|
755009 ; ... % 21-Feb-2067 Washington's Birthday (Mon)
|
|
755010 ; % !!8
|
|
];
|
|
|
|
dep = [
|
|
root(info.function, factory, workspace, []), ... % likewise this isn't a keyword
|
|
fcn3.finalize % the single quote used to break [] scanning
|
|
];
|
|
|
|
% This long fcn name last symbol starts with 'get' which
|
|
% used to confuse and move to indent past 1st arg.
|
|
if qesimcheck.utils.GetYesNoAnswer('Do ',... !!4
|
|
'n',... !!39
|
|
'once') %!!39
|
|
code(); %!!8
|
|
end %!!4
|
|
|
|
|
|
|
|
% !!4
|
|
out = { A %!!4
|
|
Blong %!!12
|
|
Csep %!!12
|
|
nest %!!12
|
|
multinest%!!12
|
|
cascade_long_name%!!12
|
|
Closures%!!12
|
|
dep %!!12
|
|
}; %!!10
|
|
|
|
end
|
|
|
|
function C = block_starts_in_comments_and_strings(varargin)
|
|
% !!0
|
|
|
|
C = 0;
|
|
|
|
if varargin{1} % if true
|
|
|
|
% !!8
|
|
else % !!4
|
|
|
|
% !!8
|
|
end % if true
|
|
|
|
|
|
% see previous function
|
|
% !!4
|
|
for x=1:length(C) % !!4
|
|
if varargin{2} % !!8
|
|
continue % !!12
|
|
end % !!8
|
|
|
|
break % !!8
|
|
% !!14
|
|
|
|
%!!8
|
|
end
|
|
|
|
switch foo() %!!4
|
|
case 1 %!!6
|
|
|
|
%!!8
|
|
otherwise %!!6
|
|
|
|
%!!8
|
|
end %!!4
|
|
|
|
|
|
try
|
|
% !!8
|
|
catch %!!4
|
|
|
|
% !!8
|
|
end
|
|
|
|
end
|
|
|
|
function B = continuations_and_block_comments
|
|
% !!0
|
|
% !!0
|
|
% !!0
|
|
|
|
%{
|
|
!!2 { }
|
|
!!2
|
|
%}
|
|
|
|
arg1=1;
|
|
|
|
%{
|
|
% !!4
|
|
!!6
|
|
% !!4
|
|
%}
|
|
|
|
% Block comment indicators MUST be on a line by themselves.
|
|
%{ Not a block comment }
|
|
|
|
foo(1); % !!4 - don't indent this special
|
|
|
|
%} Not an end to a block comment {
|
|
|
|
foo(arg1, ... %!!4
|
|
arg2); %!!8
|
|
|
|
foo_long_fcn(arg1, ... %!!4
|
|
arg2); %!!17
|
|
|
|
A = [ 1 2 % !!4
|
|
3 4 ]; % !!10
|
|
|
|
foo(['this is a very long string' ... %!!4
|
|
'with a continution to do something very exciting']);%!!9
|
|
|
|
set(gcf,'Position',[ 1 2 3 4], ... !!4
|
|
'Color', 'red'); % !!12
|
|
|
|
B = A + 1 + 4 ...
|
|
+ 6; % !!8
|
|
|
|
foo_code(); % eol-comment !!4
|
|
% continuation-comment !!17
|
|
|
|
% !!4 -blank between this & continuation comment
|
|
% !!4 - more comments
|
|
|
|
if condition1 || ... % !!4
|
|
fcn_call(arg1, ... % !!12
|
|
arg2) % !!21
|
|
line_in_if();
|
|
end % !!4
|
|
|
|
|
|
|
|
end
|
|
|
|
function has_nested_fcn
|
|
|
|
plot(1:10); %!!4
|
|
|
|
A = 1;
|
|
|
|
function am_nested_fcn() %!!4
|
|
% help
|
|
% !!4
|
|
code(A);
|
|
%!!8
|
|
end
|
|
|
|
%!!4
|
|
am_nested_fcn();
|
|
function_end_same_line(1);
|
|
function_after_end_same_line();
|
|
end
|
|
|
|
function b=function_end_same_line(a), b=a; end %!!0
|
|
|
|
function function_after_end_same_line()%!!0
|
|
%!!0
|
|
disp('foo');%!!4
|
|
|
|
debug_cmd_dual();
|
|
|
|
end%!!0
|
|
|
|
function debug_cmd_dual ()
|
|
% These dbstop command dual content have 'if' blocks in them.
|
|
% The command dual detection needs to block these from being
|
|
% detected as block initiators which would cause indentaiton.
|
|
|
|
dbstop in hRandomFile at 14 if func() % !!4
|
|
dbstop in hRandomFile at 30@1 if x==1 % !!4
|
|
dbstop in hPFile % !!4
|
|
dbstop in hSimpleFile at 2 % !!4
|
|
dbstop if error % !!4
|
|
|
|
%!!4
|
|
|
|
debug_cmd_dual(); %!!4
|
|
|
|
end
|