Skip to content

Syntax highlighting for arguments block and improvements for property validation #14

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Oct 15, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
312 changes: 280 additions & 32 deletions Matlab.tmbundle/Syntaxes/MATLAB.tmLanguage
Original file line number Diff line number Diff line change
Expand Up @@ -751,38 +751,8 @@
<key>patterns</key>
<array>
<dict>
<key>comment</key>
<string> 1 property name 2 size 3 type 4 validator function</string>
<key>match</key>
<string>^\s*([a-zA-Z][a-zA-Z0-9_]*)\s*(\([^\)]*\))?\s*([a-zA-Z][a-zA-Z0-9_\.]*)?\s*({[^}]*})?\s*(.*)$</string>
<key>captures</key>
<dict>
<key>2</key>
<dict>
<key>name</key>
<string>storage.type.matlab</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>storage.type.matlab</string>
</dict>
<key>4</key>
<dict>
<key>name</key>
<string>storage.type.matlab</string>
</dict>
<key>5</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>$self</string>
</dict>
</array>
</dict>
</dict>
<key>include</key>
<string>#validators</string>
</dict>
<dict>
<key>include</key>
Expand Down Expand Up @@ -1216,6 +1186,61 @@
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>(?x)
(^\s*) # Leading whitespace
(arguments)\b(.*)$
\s*
( # Optional attributes
\( [^)]* \)
)?
\s*($|(?=%))
</string>
<key>beginCaptures</key>
<dict>
<key>2</key>
<dict>
<key>name</key>
<string>keyword.control.arguments.matlab</string>
</dict>
<key>3</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>[a-zA-Z][a-zA-Z0-9_]*</string>
<key>name</key>
<string>variable.parameter.arguments.matlab</string>
</dict>
</array>
</dict>
</dict>
<key>end</key>
<string>^\s*(end)\b</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control.end.arguments.matlab</string>
</dict>
</dict>
<key>name</key>
<string>meta.arguments.matlab</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#validators</string>
</dict>
<dict>
<key>include</key>
<string>$self</string>
</dict>
</array>
</dict>
<dict>
<key>include</key>
<string>$self</string>
Expand Down Expand Up @@ -1428,6 +1453,229 @@
<key>name</key>
<string>keyword.operator.symbols.matlab</string>
</dict>
<key>validators</key>
<dict>
<key>comment</key>
<string>Property and argument validation. Match an identifier allowing . and ?.</string>
<key>begin</key>
<string>\s*[,;]?\s*([a-zA-Z][a-zA-Z0-9_\.\?]*)</string>
<key>end</key>
<string>([,;\n%=].*)</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>comment</key>
<string>Match comments</string>
<key>match</key>
<string>([%].*)</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>$self</string>
</dict>
</array>
</dict>
</dict>
</dict>
<dict>
<key>comment</key>
<string>Handle things like arg = val; nextArg</string>
<key>match</key>
<string>(=[^;,]*)</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>$self</string>
</dict>
</array>
</dict>
</dict>
</dict>
<dict>
<key>comment</key>
<string>End of property/argument patterns which start a new property/argument</string>
<key>match</key>
<string>([\n,;].*)</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#validators</string>
</dict>
</array>
</dict>
</dict>
</dict>
</array>
</dict>
</dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#line_continuation</string>
</dict>
<dict>
<key>comment</key>
<string>Size declaration</string>
<key>match</key>
<string>\s*(\([^\)]*\))</string>
<key>name</key>
<string>storage.type.matlab</string>
</dict>
<dict>
<key>comment</key>
<string>Type declaration</string>
<key>match</key>
<string>([a-zA-Z][a-zA-Z0-9_\.]*)</string>
<key>name</key>
<string>storage.type.matlab</string>
</dict>
<dict>
<key>include</key>
<string>#braced_validator_list</string>
</dict>
</array>
</dict>
<key>braced_validator_list</key>
<dict>
<key>comment</key>
<string>Validator functions. Treated as a recursive group to permit nested brackets, quotes, etc.</string>
<key>begin</key>
<string>\s*({)\s*</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>storage.type.matlab</string>
</dict>
</dict>
<key>end</key>
<string>(})</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>storage.type.matlab</string>
</dict>
</dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#braced_validator_list</string>
</dict>
<dict>
<key>include</key>
<string>#validator_strings</string>
</dict>
<dict>
<key>include</key>
<string>#line_continuation</string>
</dict>
<dict>
<key>match</key>
<string>([^{}}'"\.]+)</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>storage.type.matlab</string>
</dict>
</dict>
</dict>
<dict>
<key>match</key>
<string>\.</string>
<key>name</key>
<string>storage.type.matlab</string>
</dict>
</array>
</dict>
<key>validator_strings</key>
<dict>
<key>comment</key>
<string>Simplified string patterns nested inside validator functions which don't change scopes of matches.</string>
<key>patterns</key>
<array>
<dict>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>((?&lt;=(\[|\(|\{|=|\s|;|:|,|~|&lt;|&gt;|&amp;|\||-|\+|\*|/|\\|\.|\^))|^)'</string>
<key>comment</key>
<string>Character vector literal (single-quoted)</string>
<key>end</key>
<string>'(?=(\[|\(|\{|\]|\)|\}|=|~|&lt;|&gt;|&amp;|\||-|\+|\*|/|\\|\.|\^|\s|;|:|,))</string>
<key>name</key>
<string>storage.type.matlab</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>''</string>
</dict>
<dict>
<key>match</key>
<string>'(?=.)</string>
</dict>
<dict>
<key>match</key>
<string>([^']+)</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>((?&lt;=(\[|\(|\{|=|\s|;|:|,|~|&lt;|&gt;|&amp;|\||-|\+|\*|/|\\|\.|\^))|^)"</string>
<key>comment</key>
<string>String literal (double-quoted)</string>
<key>end</key>
<string>"(?=(\[|\(|\{|\]|\)|\}|=|~|&lt;|&gt;|&amp;|\||-|\+|\*|/|\\|\.|\^|\||\s|;|:|,))</string>
<key>name</key>
<string>storage.type.matlab</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>""</string>
</dict>
<dict>
<key>match</key>
<string>"(?=.)</string>
</dict>
<dict>
<key>match</key>
<string>[^"]+</string>
</dict>
</array>
</dict>
</array>
</dict>
</array>
</dict>
</dict>
<key>scopeName</key>
<string>source.matlab</string>
Expand Down
20 changes: 20 additions & 0 deletions argumentValidation.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
function argumentValidation(x,~,v,method,flag, opts)
% Comment before arguments blocks
arguments
% Block comment
x (1,:) {mustBeNumeric,mustBeReal} % trailing coment
~
% Line comment
v (1,:) {mustBeNumeric,mustBeReal, mustBeEqualSize(v,x)}
method (1,:) char {mustBeMember(method,{'linear','cubic','spline'})} = 'linear' % End of line comment
% End block comment
end
arguments (Repeating)
% Trailing flags
flag (1,:) string {mustBeMember(flag,["first","second","third"])}
end
arguments
opts.Named (1,:) string {mustBeNumeric(opts.Named), ... Dotdotdot comment
mustBeReal}
end
end