Skip to content

Commit

Permalink
Merge pull request #84 from watermarkhu/feat/fix-switch-statements
Browse files Browse the repository at this point in the history
fix switch statements
  • Loading branch information
dklilley committed Jun 19, 2024
2 parents 87eea5f + d535361 commit 91205a3
Show file tree
Hide file tree
Showing 4 changed files with 231 additions and 79 deletions.
77 changes: 52 additions & 25 deletions Matlab.tmbundle/Syntaxes/MATLAB.tmLanguage
Original file line number Diff line number Diff line change
Expand Up @@ -527,7 +527,7 @@
<key>name</key>
<string>meta.switch.matlab</string>
<key>begin</key>
<string>\s*(?&lt;=^|[\s,;])(switch)\s+([a-zA-Z0-9][a-zA-Z0-9_]*)</string>
<string>\s*(?&lt;=^|[\s,;])(switch)\b</string>
<key>end</key>
<string>\s*(?&lt;=^|[\s,;])(end)\b</string>
<key>beginCaptures</key>
Expand All @@ -537,11 +537,6 @@
<key>name</key>
<string>keyword.control.switch.matlab</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>variable.other.constant.matlab</string>
</dict>
</dict>
<key>endCaptures</key>
<dict>
Expand All @@ -550,22 +545,51 @@
<key>name</key>
<string>keyword.control.end.switch.matlab</string>
</dict>
<key>2</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>$self</string>
</dict>
</array>
</dict>
</dict>
<key>patterns</key>
<array>
<dict>
<key>name</key>
<string>meta.switch.declaration.matlab</string>
<key>begin</key>
<string>\G(?!$)</string>
<key>end</key>
<string>(?&lt;!\.{3}.*)(?:(?=[,;](?![^(]*\)))|$)</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>$self</string>
</dict>
</array>
</dict>
<dict>
<key>name</key>
<string>meta.case.matlab</string>
<key>match</key>
<string>(\s*)(?&lt;=^|[\s,;])(case)\b(.*?)(?&lt;!\.{3}.*)(?:(?=([,;])(?![^(]*\)))|$)</string>
<key>captures</key>
<key>begin</key>
<string>\s*(?&lt;=^|[\s,;])(case)\b</string>
<key>beginCaptures</key>
<dict>
<key>2</key>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control.switch.case.matlab</string>
</dict>
<key>3</key>
</dict>
<key>end</key>
<string>\s*(?&lt;=^|[\s,;])(?=case|otherwise|end)\b</string>
<key>patterns</key>
<array>
<dict>
<key>name</key>
<string>meta.case.declaration.matlab</string>
Expand All @@ -581,31 +605,34 @@
</dict>
</array>
</dict>
</dict>
<dict>
<key>include</key>
<string>$self</string>
</dict>
</array>
</dict>
<dict>
<key>name</key>
<string>meta.otherwise.matlab</string>
<key>match</key>
<string>(\s*)(?&lt;=^|[\s,;])(otherwise)\b</string>
<key>captures</key>
<key>begin</key>
<string>\s*(?&lt;=^|[\s,;])(otherwise)\b</string>
<key>beginCaptures</key>
<dict>
<key>2</key>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.control.switch.otherwise.matlab</string>
</dict>
<key>3</key>
</dict>
<key>end</key>
<string>\s*(?&lt;=^|[\s,;])(?=end)\b</string>
<key>patterns</key>
<array>
<dict>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>$self</string>
</dict>
</array>
<key>include</key>
<string>$self</string>
</dict>
</dict>
</array>
</dict>
<dict>
<key>include</key>
Expand Down
104 changes: 52 additions & 52 deletions test/snap/controlFlow.m.snap
Original file line number Diff line number Diff line change
Expand Up @@ -15,79 +15,79 @@
# ^^^^^^^^^^^^^^^^^^^^^ source.matlab meta.function.matlab comment.line.double-percentage.matlab entity.name.section.matlab
>switch nargin
#^^^^^^ source.matlab meta.function.matlab meta.switch.matlab keyword.control.switch.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab
# ^^^^^^ source.matlab meta.function.matlab meta.switch.matlab variable.other.constant.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.switch.declaration.matlab
# ^^^^^^ source.matlab meta.function.matlab meta.switch.matlab meta.switch.declaration.matlab variable.language.function.matlab
> case 0
#^^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab
# ^^^^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab keyword.control.switch.case.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab meta.case.declaration.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab meta.case.declaration.matlab constant.numeric.decimal.matlab
> return
#^^^^ source.matlab meta.function.matlab meta.switch.matlab meta.control.matlab
# ^^^^^^ source.matlab meta.function.matlab meta.switch.matlab meta.control.matlab keyword.control.flow.matlab
#^^^^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab meta.control.matlab
# ^^^^^^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab meta.control.matlab keyword.control.flow.matlab
> case 1
#^^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab
# ^^^^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab keyword.control.switch.case.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab meta.case.declaration.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab meta.case.declaration.matlab constant.numeric.decimal.matlab
> y = varargin{1};
#^^^^ source.matlab meta.function.matlab meta.switch.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.assignment.variable.single.matlab variable.other.readwrite.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab keyword.operator.assignment.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab
# ^^^^^^^^ source.matlab meta.function.matlab meta.switch.matlab variable.language.function.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab constant.numeric.decimal.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab punctuation.terminator.semicolon.matlab
#^^^^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab meta.assignment.variable.single.matlab variable.other.readwrite.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab keyword.operator.assignment.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab
# ^^^^^^^^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab variable.language.function.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab constant.numeric.decimal.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab punctuation.terminator.semicolon.matlab
> % Check single-line if inside switch for https://github.com/mathworks/MATLAB-Language-grammar/issues/19
#^^^^ source.matlab meta.function.matlab meta.switch.matlab punctuation.whitespace.comment.leading.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab comment.line.percentage.matlab punctuation.definition.comment.matlab
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.matlab meta.function.matlab meta.switch.matlab comment.line.percentage.matlab
#^^^^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab punctuation.whitespace.comment.leading.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab comment.line.percentage.matlab punctuation.definition.comment.matlab
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab comment.line.percentage.matlab
> if varargin{1} < 0, return; end
#^^^^ source.matlab meta.function.matlab meta.switch.matlab meta.if.matlab
# ^^ source.matlab meta.function.matlab meta.switch.matlab meta.if.matlab keyword.control.if.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.if.matlab meta.if.declaration.matlab
# ^^^^^^^^ source.matlab meta.function.matlab meta.switch.matlab meta.if.matlab meta.if.declaration.matlab variable.language.function.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.if.matlab meta.if.declaration.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.if.matlab meta.if.declaration.matlab constant.numeric.decimal.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.if.matlab meta.if.declaration.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.if.matlab meta.if.declaration.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.if.matlab meta.if.declaration.matlab keyword.operator.relational.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.if.matlab meta.if.declaration.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.if.matlab meta.if.declaration.matlab constant.numeric.decimal.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.if.matlab punctuation.separator.comma.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.if.matlab meta.control.matlab
# ^^^^^^ source.matlab meta.function.matlab meta.switch.matlab meta.if.matlab meta.control.matlab keyword.control.flow.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.if.matlab punctuation.terminator.semicolon.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.if.matlab
# ^^^ source.matlab meta.function.matlab meta.switch.matlab meta.if.matlab keyword.control.end.if.matlab
#^^^^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab meta.if.matlab
# ^^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab meta.if.matlab keyword.control.if.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab meta.if.matlab meta.if.declaration.matlab
# ^^^^^^^^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab meta.if.matlab meta.if.declaration.matlab variable.language.function.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab meta.if.matlab meta.if.declaration.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab meta.if.matlab meta.if.declaration.matlab constant.numeric.decimal.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab meta.if.matlab meta.if.declaration.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab meta.if.matlab meta.if.declaration.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab meta.if.matlab meta.if.declaration.matlab keyword.operator.relational.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab meta.if.matlab meta.if.declaration.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab meta.if.matlab meta.if.declaration.matlab constant.numeric.decimal.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab meta.if.matlab punctuation.separator.comma.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab meta.if.matlab meta.control.matlab
# ^^^^^^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab meta.if.matlab meta.control.matlab keyword.control.flow.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab meta.if.matlab punctuation.terminator.semicolon.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab meta.if.matlab
# ^^^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab meta.if.matlab keyword.control.end.if.matlab
> case 2
#^^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab
# ^^^^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab keyword.control.switch.case.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab meta.case.declaration.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab meta.case.declaration.matlab constant.numeric.decimal.matlab
> y = varargin{1} + varargin{2};
#^^^^ source.matlab meta.function.matlab meta.switch.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.assignment.variable.single.matlab variable.other.readwrite.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab keyword.operator.assignment.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab
# ^^^^^^^^ source.matlab meta.function.matlab meta.switch.matlab variable.language.function.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab constant.numeric.decimal.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab keyword.operator.arithmetic.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab
# ^^^^^^^^ source.matlab meta.function.matlab meta.switch.matlab variable.language.function.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab constant.numeric.decimal.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab punctuation.terminator.semicolon.matlab
#^^^^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab meta.assignment.variable.single.matlab variable.other.readwrite.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab keyword.operator.assignment.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab
# ^^^^^^^^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab variable.language.function.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab constant.numeric.decimal.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab keyword.operator.arithmetic.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab
# ^^^^^^^^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab variable.language.function.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab constant.numeric.decimal.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab
# ^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab punctuation.terminator.semicolon.matlab
> otherwise
#^^ source.matlab meta.function.matlab meta.switch.matlab meta.otherwise.matlab
#^^ source.matlab meta.function.matlab meta.switch.matlab meta.case.matlab
# ^^^^^^^^^ source.matlab meta.function.matlab meta.switch.matlab meta.otherwise.matlab keyword.control.switch.otherwise.matlab
>end
#^^^ source.matlab meta.function.matlab meta.switch.matlab keyword.control.end.switch.matlab
Expand Down
4 changes: 2 additions & 2 deletions test/t19SingleLineBlocks.m
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
% SYNTAX TEST "source.matlab" "Blocks like if, for, etc. on a single line: https://github.com/mathworks/MATLAB-Language-grammar/issues/19"
function y = t19SingleLineBlocks(x)
switch x
% ^ variable.other.constant.matlab
% ^ meta.switch.declaration.matlab
case 1
% ^^^^ keyword.control.switch.case.matlab
% ^ constant.numeric.decimal.matlab
Expand All @@ -23,7 +23,7 @@
end
switch x, case 1, disp(1), case 2, disp(2), otherwise, disp(0); end
% ^^^^^^ keyword.control.switch.matlab
% ^ variable.other.constant.matlab
% ^ meta.switch.declaration.matlab
% ^ punctuation.separator.comma.matlab
% ^^^^ keyword.control.switch.case.matlab
% ^ constant.numeric.decimal.matlab
Expand Down
Loading

0 comments on commit 91205a3

Please sign in to comment.