diff --git a/Matlab.tmbundle/Syntaxes/MATLAB.tmLanguage b/Matlab.tmbundle/Syntaxes/MATLAB.tmLanguage
index 7e82a45..a5486ef 100644
--- a/Matlab.tmbundle/Syntaxes/MATLAB.tmLanguage
+++ b/Matlab.tmbundle/Syntaxes/MATLAB.tmLanguage
@@ -114,6 +114,10 @@
include
#curly_brackets
+
+ include
+ #metaclass_literal
+
rules_after_command_dual
@@ -227,7 +231,7 @@
begin
(?<=\))[^\S\n]*(\()?
end
- (\))?[^\S\n]*(?=;|(?<!(?:\.\.\..*))\n|%)
+ (\))?[^\S\n]*(?=;|,|(?<!(?:\.{3}.*))\n|%)
beginCaptures
1
@@ -262,7 +266,7 @@
end
- (?=;|(?<!(?:\.\.\..*))\n|%)
+ (?=;|,|(?<!(?:\.{3}.*))\n|%)
blocks
@@ -299,7 +303,7 @@
begin
\G(?!$)
end
- (?<!\.\.\.)(?:(?=([,;])(?![^(]*\)))|$)
+ (?<!\.{3}.*)(?:(?=([,;])(?![^(]*\)))|$)
patterns
@@ -355,7 +359,7 @@
begin
\G(?!$)
end
- (?<!\.\.\.)(?:(?=([,;])(?![^(]*\)))|$)
+ (?<!\.{3}.*)(?:(?=[,;](?![^(]*\)))|$)
patterns
@@ -367,9 +371,9 @@
name
meta.elseif.matlab
- match
- (?:\s*)(?<=^|[\s,;])(elseif)\b
- captures
+ begin
+ \s*(?<=^|[\s,;])(elseif)\b
+ beginCaptures
1
@@ -377,6 +381,8 @@
keyword.control.elseif.matlab
+ end
+ \s*(?<=^|[\s,;])(?=elseif|else|end)\b
patterns
@@ -385,7 +391,7 @@
begin
\G(?!$)
end
- (?<!\.\.\.)(?:(?=([,;])(?![^(]*\)))|$)
+ (?<!\.{3}.*)(?:(?=([,;])(?![^(]*\)))|$)
patterns
@@ -394,14 +400,18 @@
+
+ include
+ $self
+
name
meta.else.matlab
- match
- (?:\s*)(?<=^|[\s,;])(else)\b
- captures
+ begin
+ \s*(?<=^|[\s,;])(else)\b
+ beginCaptures
1
@@ -410,7 +420,14 @@
end
- ^
+ \s*(?<=^|[\s,;])(?=end)\b
+ patterns
+
+
+ include
+ $self
+
+
include
@@ -449,7 +466,7 @@
begin
\G(?!$)
end
- (?<!\.\.\.)(?:(?=([,;])(?![^(]*\)))|$)
+ (?<!\.{3}.*)(?:(?=([,;])(?![^(]*\)))|$)
patterns
@@ -495,7 +512,7 @@
begin
\G(?!$)
end
- (?<!\.\.\.)(?:(?=([,;])(?![^(]*\)))|$)
+ (?<!\.{3}.*)(?:(?=([,;])(?![^(]*\)))|$)
patterns
@@ -514,7 +531,7 @@
name
meta.switch.matlab
begin
- \s*(?<=^|[\s,;])(switch)\s+([a-zA-Z0-9][a-zA-Z0-9_]*)
+ \s*(?<=^|[\s,;])(switch)\b
end
\s*(?<=^|[\s,;])(end)\b
beginCaptures
@@ -524,11 +541,6 @@
name
keyword.control.switch.matlab
- 2
-
- name
- variable.other.constant.matlab
-
endCaptures
@@ -537,29 +549,58 @@
name
keyword.control.end.switch.matlab
+ 2
+
+ patterns
+
+
+ include
+ $self
+
+
+
patterns
+
+ name
+ meta.switch.declaration.matlab
+ begin
+ \G(?!$)
+ end
+ (?<!\.{3}.*)(?:(?=[,;](?![^(]*\)))|$)
+ patterns
+
+
+ include
+ $self
+
+
+
name
meta.case.matlab
- match
- (\s*)(?<=^|[\s,;])(case)\b(.*?)(?<!\.\.\.)(?:(?=([,;])(?![^(]*\)))|$)
- captures
+ begin
+ \s*(?<=^|[\s,;])(case)\b
+ beginCaptures
- 2
+ 1
name
keyword.control.switch.case.matlab
- 3
+
+ end
+ \s*(?<=^|[\s,;])(?=case|otherwise|end)\b
+ patterns
+
name
meta.case.declaration.matlab
begin
\G(?!$)
end
- (?<!\.\.\.)(?:(?=([,;])(?![^(]*\)))|$)
+ (?<!\.{3}.*)(?:(?=([,;])(?![^(]*\)))|$)
patterns
@@ -568,31 +609,34 @@
-
+
+ include
+ $self
+
+
name
meta.otherwise.matlab
- match
- (\s*)(?<=^|[\s,;])(otherwise)\b
- captures
+ begin
+ \s*(?<=^|[\s,;])(otherwise)\b
+ beginCaptures
- 2
+ 1
name
keyword.control.switch.otherwise.matlab
- 3
+
+ end
+ \s*(?<=^|[\s,;])(?=end)\b
+ patterns
+
- patterns
-
-
- include
- $self
-
-
+ include
+ $self
-
+
include
@@ -679,17 +723,16 @@
name
meta.while.declaration.matlab
begin
- \G
+ \G(?!$)
end
- (?<!\.\.\.)(?:(?=([,;])(?![^(]*\)))|$)
- endCaptures
-
- 1
+ (?<!\.{3}.*)(?:(?=[,;](?![^(]*\)))|$)
+ patterns
+
include
$self
-
+
include
@@ -740,74 +783,70 @@
begin
\G
end
- (?<!\.\.\.)(?=\n)
+ (?<!\.{3})(?=\n)
patterns
+ name
+ storage.modifier.section.class.matlab
begin
- \G(\([^)]*\))?\s*
- beginCaptures
-
- 1
+ \G\(
+ end
+ \)
+ patterns
+
- comment
- Optional attributes
- patterns
-
+ name
+ punctuation.separator.modifier.comma.matlab
+ match
+ ,
+
+
+ name
+ storage.modifier.class.matlab
+ match
+ [a-zA-Z][a-zA-Z0-9_]*
+
+
+ begin
+ (=)\s*
+ beginCaptures
+
+ 1
name
- punctuation.section.parens.begin.matlab
- match
- (?<=\s)\(
+ keyword.operator.assignment.matlab
+
+ end
+ (?=\)|,)
+ patterns
+
name
- punctuation.section.parens.end.matlab
+ constant.language.boolean.matlab
match
- \)\z
+ true|false
+ comment
+ Metadata query for class properties
name
- punctuation.separator.modifier.comma.matlab
+ keyword.operator.other.question.matlab
match
- ,
+ (?<!\w)\?(?=\w)
- name
- storage.modifier.class.matlab
- match
- [a-zA-Z][a-zA-Z0-9_]*
+ include
+ #metaclass_literal
- begin
- (=)\s*
- beginCaptures
-
- 1
-
- name
- keyword.operator.assignment.matlab
-
-
- end
- (?=\)|,)
- patterns
-
-
- name
- constant.language.boolean.matlab
- match
- true|false
-
-
- include
- #string
-
-
+ include
+ #string
include
- #comments
+ #curly_brackets
include
@@ -815,26 +854,48 @@
+
+ include
+ #comments
+
+
+ include
+ #line_continuation
+
+
+
+
+ begin
+ \s*(\w+)
+ beginCaptures
+
+ 1
+
+ comment
+ Class name
+ name
+ entity.name.type.class.matlab
+
+ end
+ (?<!\.{3})(?=\s*%|\n)
patterns
begin
- \G\s*([a-zA-Z][a-zA-Z0-9_]*)
- beginCaptures
-
- 1
-
- comment
- Class name
- name
- entity.name.type.class.matlab
-
-
+ \G
end
- (?<!\.\.\.)(?=\n)
+ (?<!\.{3})(?=\n)
patterns
+
+ include
+ #comments
+
+
+ include
+ #line_continuation
+
comment
Optional inheritance operator
@@ -882,14 +943,6 @@
match
&
-
- include
- #comments
-
-
- include
- #line_continuation
-
@@ -901,8 +954,14 @@
#line_continuation
- end
- (?<!\.\.\.)(?=\s*%|\n)
+
+
+ include
+ #comments
+
+
+ include
+ #line_continuation
@@ -932,6 +991,12 @@
patterns
+
+ name
+ punctuation.separator.modifier.comma.matlab
+ match
+ ,
+
name
storage.modifier.properties.matlab
@@ -950,9 +1015,13 @@
end
- ,|(?=\))
+ (?=\)|,)
patterns
+
+ include
+ #string
+
name
constant.language.boolean.matlab
@@ -963,7 +1032,21 @@
name
storage.modifier.access.matlab
match
- public|protected|private
+ public|protected|private|immutable
+
+
+ include
+ #curly_brackets
+
+
+ include
+ #metaclass_literal
+
+
+ name
+ constant.integer.matlab
+ match
+ [0-9]+
@@ -1016,6 +1099,12 @@
patterns
+
+ name
+ punctuation.separator.modifier.comma.matlab
+ match
+ ,
+
name
storage.modifier.methods.matlab
@@ -1024,11 +1113,23 @@
begin
- =\s*
+ (=)\s*
end
- ,|(?=\))
+ (?=\)|,)
+ beginCaptures
+
+ 1
+
+ name
+ keyword.operator.assignment.matlab
+
+
patterns
+
+ include
+ #string
+
name
constant.language.boolean.matlab
@@ -1039,7 +1140,21 @@
name
storage.modifier.access.matlab
match
- public|protected|private
+ public|protected|private|immutable
+
+
+ include
+ #curly_brackets
+
+
+ include
+ #metaclass_literal
+
+
+ name
+ constant.integer.matlab
+ match
+ [0-9]+
@@ -1090,17 +1205,35 @@
name
- variable.parameter.events.matlab
+ punctuation.separator.modifier.comma.matlab
+ match
+ ,
+
+
+ name
+ storage.modifier.events.matlab
match
[a-zA-Z][a-zA-Z0-9_]*
begin
- =\s*
+ (=)\s*
+ beginCaptures
+
+ 1
+
+ name
+ keyword.operator.assignment.matlab
+
+
end
- ,|(?=\))
+ (?=\)|,)
patterns
+
+ include
+ #string
+
name
constant.language.boolean.matlab
@@ -1111,7 +1244,21 @@
name
storage.modifier.access.matlab
match
- public|protected|private
+ public|protected|private|immutable
+
+
+ include
+ #curly_brackets
+
+
+ include
+ #metaclass_literal
+
+
+ name
+ constant.integer.matlab
+ match
+ [0-9]+
@@ -1251,7 +1398,7 @@
comment
1 2 3 4
match
- (?<=^|[^.]\n|;|,|=)([^\S\n]*)(?# A> )(\b\w+\b)([^\S\n]+)(?# B> )((?!(\+|-|\*|\.\*|\/|\.\/|\\|\.\\|\^|\.\^|==|~=|&|&&|\||\|\||=|:|>|>=|<|<=|\.\.\.)[^\S\n]?)[^\s({=;%][^\n;%]*)
+ (?<=^|[^.]\n|;|,|=)([^\S\n]*)(?# A> )(\b\w+\b)([^\S\n]+)(?# B> )((?!(\+|-|\*|\.\*|\/|\.\/|\\|\.\\|\^|\.\^|==|~=|&|&&|\||\|\||=|:|>|>=|<|<=|\.{3})[^\S\n]?)[^\s({=;%][^\n;%]*)
comment_block
@@ -1454,7 +1601,7 @@
begin
\G
end
- (?<=[\)\n])
+ (?<=\))|(?>(?<!\.{3}.*)\n)
patterns
@@ -1463,7 +1610,7 @@
contentName
meta.assignment.variable.output.matlab
begin
- \G(?=.*?=)
+ \G(?=[^\(]*?(?:=|\[|\.{3}))
end
\s*(=)\s*
endCaptures
@@ -1484,7 +1631,7 @@
match
- (\])\s*\z
+ (\])\s*
captures
1
@@ -1508,11 +1655,11 @@
include
- #comments
+ #line_continuation
include
- #line_continuation
+ #comments
@@ -1522,7 +1669,7 @@
name
entity.name.function.matlab
match
- [a-zA-Z][a-zA-Z0-9_.]*(?=[^a-zA-Z0-9_.])
+ [a-zA-Z][a-zA-Z0-9_]*(?>\.[a-zA-Z0-9_]+)*
patterns
@@ -1543,7 +1690,7 @@
name
meta.parameters.matlab
begin
- (?<=[a-zA-Z0-9_])\s*\(
+ \s*\(
end
\)
beginCaptures
@@ -1592,6 +1739,10 @@
+
+ include
+ #line_continuation
+
include
#comments
@@ -1695,7 +1846,7 @@
begin
([a-zA-Z][a-zA-Z0-9_]*)\s*(\()
end
- (\)|(?<!\.\.\..*)\n)
+ (\)|(?<!\.{3}.*)\n)
beginCaptures
1
@@ -1762,7 +1913,7 @@
name
meta.import.matlab
match
- \b(import)\b[^\S\n]+([a-zA-Z0-9.\*]*)[^\S\n]*(?=;|%|$)
+ [^\S\r\n]*\b(import)\b[^\S\n]+([a-zA-Z0-9.\*]*)[^\S\n]*(?=;|%|$)
captures
1
@@ -1807,7 +1958,7 @@
begin
([a-zA-Z][a-zA-Z0-9_]*)\s*(\.)(\()
end
- (\)|(?<!\.\.\..*)\n)
+ (\)|(?<!\.{3}.*)\n)
beginCaptures
1
@@ -1907,7 +2058,7 @@
begin
\(
end
- (\)|(?<!\.\.\..*)\n)
+ (\)|(?<!\.{3}.*)\n)
beginCaptures
0
@@ -2078,7 +2229,7 @@
end
- (\}|(?<!\.\.\..*)\n)
+ (\}|(?<!\.{3}.*)\n)
comment
We don't include $self here to avoid matching command syntax inside (), [], {}
patterns
@@ -2117,7 +2268,7 @@
match
- (\.\.\.)(.*)$
+ (\.{3})(.*)$
shell_string
@@ -2273,7 +2424,7 @@
begin
([a-zA-Z][a-zA-Z0-9_]*)(@)\s*([a-zA-Z][a-zA-Z0-9_]*(?:\.[a-zA-Z][a-zA-Z0-9_]*)*)(\()
end
- (\)|(?<!\.\.\..*)\n)
+ (\)|(?<!\.{3}.*)\n)
beginCaptures
1
@@ -2508,7 +2659,7 @@
name
keyword.operator.arithmetic.matlab
match
- (?<=[a-zA-Z0-9\s])(\+|-|\*|\.\*|/|\./|\\|\.\\|\^|\.\^)(?=[a-zA-Z0-9\s]|(?:\.\.\.))
+ (?<=[a-zA-Z0-9\s])(\+|-|\*|\.\*|/|\./|\\|\.\\|\^|\.\^)(?=[a-zA-Z0-9\s]|(?:\.{3}))
comment
@@ -2516,7 +2667,7 @@
name
keyword.operator.logical.matlab
match
- (?<=[a-zA-Z0-9\s])(==|~=|&|&&|\||\|\|)(?=[a-zA-Z0-9\s]|(?:\.\.\.))
+ (?<=[a-zA-Z0-9\s])(==|~=|&|&&|\||\|\|)(?=[a-zA-Z0-9\s]|(?:\.{3}))
comment
@@ -2532,7 +2683,7 @@
name
keyword.operator.vector.colon.matlab
match
- (?<=[a-zA-Z0-9_\s(){,]|^):(?=[a-zA-Z0-9_\s()},]|$||(?:\.\.\.))
+ (?<=[a-zA-Z0-9_\s(){,]|^):(?=[a-zA-Z0-9_\s()},]|$||(?:\.{3}))
comment
@@ -2540,7 +2691,7 @@
name
keyword.operator.relational.matlab
match
- (?<=[a-zA-Z0-9\s])(>|>=|<|<=)(?=[a-zA-Z0-9\s]|(?:\.\.\.))
+ (?<=[a-zA-Z0-9\s])(>|>=|<|<=)(?=[a-zA-Z0-9\s]|(?:\.{3}))
@@ -2749,6 +2900,10 @@
patterns
+
+ include
+ #function_call
+
include
#braced_validator_list
@@ -2906,7 +3061,7 @@
name
variable.other.readwrite.matlab
match
- (?<![a-zA-Z0-9_]|\.)[a-zA-Z][a-zA-Z0-9_]*(?![a-zA-Z0-9_]|(?:\(|\{|\.\())
+ (?<![a-zA-Z0-9_]|\.|\?)[a-zA-Z][a-zA-Z0-9_]*(?![a-zA-Z0-9_]|(?:\(|\{|\.\())
property_access
@@ -2917,6 +3072,32 @@
match
\.
+ metaclass_literal
+
+ comment
+ Accessing a metaclass via the ? operator
+ name
+ meta.metaclass.matlab
+ begin
+ (?<=\?)(?=[a-zA-Z])
+ end
+ (?<=[a-zA-Z0-9_])(?![a-zA-Z0-9_]|\.|\(|{)
+ patterns
+
+
+ name
+ entity.other.class.matlab
+ match
+ (?<=[.\?])[a-zA-Z][a-zA-Z0-9_]*(?![a-zA-Z0-9_.])
+
+
+ name
+ entity.name.namespace.matlab
+ match
+ [a-zA-Z][a-zA-Z0-9_]*
+
+
+
diff --git a/test/README.md b/test/README.md
index b815632..30ebfad 100644
--- a/test/README.md
+++ b/test/README.md
@@ -4,6 +4,13 @@ The tests in this directory leverage:
https://github.com/PanAeon/vscode-tmgrammar-test
+# Test requirements
+
+The tests require xmllint which can be installed (on apt using linux distros) using
+```bash
+sudo apt install libxml2-utils
+```
+
# Running the tests
From the root of the repo
diff --git a/test/snap/Account.m.snap b/test/snap/Account.m.snap
index d4e2886..629e60b 100644
--- a/test/snap/Account.m.snap
+++ b/test/snap/Account.m.snap
@@ -108,15 +108,15 @@
#^^^^^^^^^^^^^^^^ source.matlab meta.class.matlab meta.methods.matlab meta.function.matlab meta.if.matlab meta.if.matlab meta.else.matlab
# ^^^^ source.matlab meta.class.matlab meta.methods.matlab meta.function.matlab meta.if.matlab meta.if.matlab meta.else.matlab keyword.control.else.matlab
> error('Value must be numeric')
-#^^^^^^^^^^^^^^^^^^^^ source.matlab meta.class.matlab meta.methods.matlab meta.function.matlab meta.if.matlab meta.if.matlab
-# ^^^^^ source.matlab meta.class.matlab meta.methods.matlab meta.function.matlab meta.if.matlab meta.if.matlab meta.function-call.parens.matlab entity.name.function.matlab
-# ^ source.matlab meta.class.matlab meta.methods.matlab meta.function.matlab meta.if.matlab meta.if.matlab meta.function-call.parens.matlab punctuation.section.parens.begin.matlab
-# ^ source.matlab meta.class.matlab meta.methods.matlab meta.function.matlab meta.if.matlab meta.if.matlab meta.function-call.parens.matlab string.quoted.single.matlab punctuation.definition.string.begin.matlab
-# ^^^^^^^^^^^^^^^^^^^^^ source.matlab meta.class.matlab meta.methods.matlab meta.function.matlab meta.if.matlab meta.if.matlab meta.function-call.parens.matlab string.quoted.single.matlab
-# ^ source.matlab meta.class.matlab meta.methods.matlab meta.function.matlab meta.if.matlab meta.if.matlab meta.function-call.parens.matlab string.quoted.single.matlab punctuation.definition.string.end.matlab
-# ^ source.matlab meta.class.matlab meta.methods.matlab meta.function.matlab meta.if.matlab meta.if.matlab meta.function-call.parens.matlab punctuation.section.parens.end.matlab
+#^^^^^^^^^^^^^^^^^^^^ source.matlab meta.class.matlab meta.methods.matlab meta.function.matlab meta.if.matlab meta.if.matlab meta.else.matlab
+# ^^^^^ source.matlab meta.class.matlab meta.methods.matlab meta.function.matlab meta.if.matlab meta.if.matlab meta.else.matlab meta.function-call.parens.matlab entity.name.function.matlab
+# ^ source.matlab meta.class.matlab meta.methods.matlab meta.function.matlab meta.if.matlab meta.if.matlab meta.else.matlab meta.function-call.parens.matlab punctuation.section.parens.begin.matlab
+# ^ source.matlab meta.class.matlab meta.methods.matlab meta.function.matlab meta.if.matlab meta.if.matlab meta.else.matlab meta.function-call.parens.matlab string.quoted.single.matlab punctuation.definition.string.begin.matlab
+# ^^^^^^^^^^^^^^^^^^^^^ source.matlab meta.class.matlab meta.methods.matlab meta.function.matlab meta.if.matlab meta.if.matlab meta.else.matlab meta.function-call.parens.matlab string.quoted.single.matlab
+# ^ source.matlab meta.class.matlab meta.methods.matlab meta.function.matlab meta.if.matlab meta.if.matlab meta.else.matlab meta.function-call.parens.matlab string.quoted.single.matlab punctuation.definition.string.end.matlab
+# ^ source.matlab meta.class.matlab meta.methods.matlab meta.function.matlab meta.if.matlab meta.if.matlab meta.else.matlab meta.function-call.parens.matlab punctuation.section.parens.end.matlab
> end
-#^^^^^^^^^^^^^^^^ source.matlab meta.class.matlab meta.methods.matlab meta.function.matlab meta.if.matlab meta.if.matlab
+#^^^^^^^^^^^^^^^^ source.matlab meta.class.matlab meta.methods.matlab meta.function.matlab meta.if.matlab meta.if.matlab meta.else.matlab
# ^^^ source.matlab meta.class.matlab meta.methods.matlab meta.function.matlab meta.if.matlab meta.if.matlab keyword.control.end.if.matlab
> end
#^^^^^^^^^^^^ source.matlab meta.class.matlab meta.methods.matlab meta.function.matlab meta.if.matlab
@@ -278,7 +278,10 @@
# ^^^^^ source.matlab meta.class.matlab meta.methods.matlab meta.function.matlab meta.while.matlab keyword.control.while.matlab
# ^ source.matlab meta.class.matlab meta.methods.matlab meta.function.matlab meta.while.matlab meta.while.declaration.matlab
# ^^^^^^^^^^ source.matlab meta.class.matlab meta.methods.matlab meta.function.matlab meta.while.matlab meta.while.declaration.matlab variable.other.readwrite.matlab
-# ^^^^^^^^ source.matlab meta.class.matlab meta.methods.matlab meta.function.matlab meta.while.matlab meta.while.declaration.matlab
+# ^ source.matlab meta.class.matlab meta.methods.matlab meta.function.matlab meta.while.matlab meta.while.declaration.matlab
+# ^ source.matlab meta.class.matlab meta.methods.matlab meta.function.matlab meta.while.matlab meta.while.declaration.matlab keyword.operator.relational.matlab
+# ^ source.matlab meta.class.matlab meta.methods.matlab meta.function.matlab meta.while.matlab meta.while.declaration.matlab
+# ^^^^^ source.matlab meta.class.matlab meta.methods.matlab meta.function.matlab meta.while.matlab meta.while.declaration.matlab constant.numeric.decimal.matlab
> n = n + 1;
#^^^^^^^^^^^^^^^^ source.matlab meta.class.matlab meta.methods.matlab meta.function.matlab meta.while.matlab
# ^ source.matlab meta.class.matlab meta.methods.matlab meta.function.matlab meta.while.matlab meta.assignment.variable.single.matlab variable.other.readwrite.matlab
@@ -352,9 +355,10 @@
#^^^^ source.matlab meta.class.matlab meta.events.matlab
# ^^^^^^ source.matlab meta.class.matlab meta.events.matlab keyword.control.events.matlab
# ^^ source.matlab meta.class.matlab meta.events.matlab
-# ^^^^^^^^^^^^ source.matlab meta.class.matlab meta.events.matlab variable.parameter.events.matlab
+# ^^^^^^^^^^^^ source.matlab meta.class.matlab meta.events.matlab storage.modifier.events.matlab
# ^ source.matlab meta.class.matlab meta.events.matlab
-# ^^ source.matlab meta.class.matlab meta.events.matlab
+# ^ source.matlab meta.class.matlab meta.events.matlab keyword.operator.assignment.matlab
+# ^ source.matlab meta.class.matlab meta.events.matlab
# ^^^^^^^^^ source.matlab meta.class.matlab meta.events.matlab storage.modifier.access.matlab
# ^^ source.matlab meta.class.matlab meta.events.matlab
# ^ source.matlab meta.class.matlab meta.events.matlab comment.line.percentage.matlab punctuation.definition.comment.matlab
@@ -398,4 +402,4 @@
# ^^^ source.matlab meta.class.matlab meta.enum.matlab keyword.control.end.enum.matlab
>end
#^^^ source.matlab meta.class.matlab storage.type.class.end.matlab
->
+>
\ No newline at end of file
diff --git a/test/snap/PropertyValidation.m.snap b/test/snap/PropertyValidation.m.snap
index 61dd9ed..5f0b555 100644
--- a/test/snap/PropertyValidation.m.snap
+++ b/test/snap/PropertyValidation.m.snap
@@ -10,18 +10,18 @@
# ^ source.matlab meta.class.matlab meta.properties.matlab
# ^ source.matlab meta.class.matlab meta.properties.matlab keyword.operator.assignment.matlab
# ^ source.matlab meta.class.matlab meta.properties.matlab
-# ^ source.matlab meta.class.matlab meta.properties.matlab
-# ^^^^^^ source.matlab meta.class.matlab meta.properties.matlab storage.modifier.access.matlab
-# ^ source.matlab meta.class.matlab meta.properties.matlab
-# ^ source.matlab meta.class.matlab meta.properties.matlab
+# ^ source.matlab meta.class.matlab meta.properties.matlab string.quoted.single.matlab punctuation.definition.string.begin.matlab
+# ^^^^^^ source.matlab meta.class.matlab meta.properties.matlab string.quoted.single.matlab
+# ^ source.matlab meta.class.matlab meta.properties.matlab string.quoted.single.matlab punctuation.definition.string.end.matlab
+# ^ source.matlab meta.class.matlab meta.properties.matlab punctuation.separator.modifier.comma.matlab
# ^ source.matlab meta.class.matlab meta.properties.matlab
# ^^^^^^^^^ source.matlab meta.class.matlab meta.properties.matlab storage.modifier.properties.matlab
# ^ source.matlab meta.class.matlab meta.properties.matlab
# ^ source.matlab meta.class.matlab meta.properties.matlab keyword.operator.assignment.matlab
# ^ source.matlab meta.class.matlab meta.properties.matlab
-# ^ source.matlab meta.class.matlab meta.properties.matlab
-# ^^^^^^^ source.matlab meta.class.matlab meta.properties.matlab storage.modifier.access.matlab
-# ^ source.matlab meta.class.matlab meta.properties.matlab
+# ^ source.matlab meta.class.matlab meta.properties.matlab string.quoted.single.matlab punctuation.definition.string.begin.matlab
+# ^^^^^^^ source.matlab meta.class.matlab meta.properties.matlab string.quoted.single.matlab
+# ^ source.matlab meta.class.matlab meta.properties.matlab string.quoted.single.matlab punctuation.definition.string.end.matlab
# ^^ source.matlab meta.class.matlab meta.properties.matlab
> % Commentary in the properties block
#^^^^^^^^ source.matlab meta.class.matlab meta.properties.matlab punctuation.whitespace.comment.leading.matlab
diff --git a/test/snap/argumentValidation.m.snap b/test/snap/argumentValidation.m.snap
index 960ef31..964094c 100644
--- a/test/snap/argumentValidation.m.snap
+++ b/test/snap/argumentValidation.m.snap
@@ -65,11 +65,13 @@
# ^^^^^^^^^^^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab variable.other.readwrite.matlab
# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab
# ^^^^^^^^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab variable.other.readwrite.matlab
-# ^^^^^^^^^^^^^^^^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab
-# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab variable.other.readwrite.matlab
-# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab
-# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab variable.other.readwrite.matlab
-# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab
+# ^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab
+# ^^^^^^^^^^^^^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab entity.name.function.matlab
+# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab punctuation.section.parens.begin.matlab
+# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab variable.other.readwrite.matlab
+# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab punctuation.separator.comma.matlab
+# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab variable.other.readwrite.matlab
+# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab punctuation.section.parens.end.matlab
# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab punctuation.section.block.end.matlab
> method (1,:) char {mustBeMember(method,{'linear','cubic','spline'})} = 'linear' % End of line comment
#^^^^^^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab
@@ -84,23 +86,24 @@
# ^^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab storage.type.matlab
# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab
# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab punctuation.section.block.begin.matlab
-# ^^^^^^^^^^^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab
-# ^^^^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab variable.other.readwrite.matlab
-# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab
-# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab punctuation.section.block.begin.matlab
-# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.block.validation.matlab string.quoted.single.matlab punctuation.definition.string.begin.matlab
-# ^^^^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.block.validation.matlab string.quoted.single.matlab
-# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.block.validation.matlab string.quoted.single.matlab punctuation.definition.string.end.matlab
-# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.block.validation.matlab
-# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.block.validation.matlab string.quoted.single.matlab punctuation.definition.string.begin.matlab
-# ^^^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.block.validation.matlab string.quoted.single.matlab
-# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.block.validation.matlab string.quoted.single.matlab punctuation.definition.string.end.matlab
-# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.block.validation.matlab
-# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.block.validation.matlab string.quoted.single.matlab punctuation.definition.string.begin.matlab
-# ^^^^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.block.validation.matlab string.quoted.single.matlab
-# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.block.validation.matlab string.quoted.single.matlab punctuation.definition.string.end.matlab
-# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab punctuation.section.block.end.matlab
-# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab
+# ^^^^^^^^^^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab entity.name.function.matlab
+# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab punctuation.section.parens.begin.matlab
+# ^^^^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab variable.other.readwrite.matlab
+# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab punctuation.separator.comma.matlab
+# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab punctuation.section.braces.begin.matlab
+# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab meta.cell.literal.matlab string.quoted.single.matlab punctuation.definition.string.begin.matlab
+# ^^^^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab meta.cell.literal.matlab string.quoted.single.matlab
+# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab meta.cell.literal.matlab string.quoted.single.matlab punctuation.definition.string.end.matlab
+# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab meta.cell.literal.matlab punctuation.separator.comma.matlab
+# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab meta.cell.literal.matlab string.quoted.single.matlab punctuation.definition.string.begin.matlab
+# ^^^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab meta.cell.literal.matlab string.quoted.single.matlab
+# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab meta.cell.literal.matlab string.quoted.single.matlab punctuation.definition.string.end.matlab
+# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab meta.cell.literal.matlab punctuation.separator.comma.matlab
+# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab meta.cell.literal.matlab string.quoted.single.matlab punctuation.definition.string.begin.matlab
+# ^^^^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab meta.cell.literal.matlab string.quoted.single.matlab
+# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab meta.cell.literal.matlab string.quoted.single.matlab punctuation.definition.string.end.matlab
+# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab punctuation.section.braces.end.matlab
+# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab punctuation.section.parens.end.matlab
# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab punctuation.section.block.end.matlab
# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab
# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab keyword.operator.assignment.matlab
@@ -142,21 +145,24 @@
# ^^^^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab storage.type.matlab
# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab
# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab punctuation.section.block.begin.matlab
-# ^^^^^^^^^^^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab
-# ^^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab variable.other.readwrite.matlab
-# ^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab
-# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab string.quoted.double.matlab punctuation.definition.string.begin.matlab
-# ^^^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab string.quoted.double.matlab
-# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab string.quoted.double.matlab punctuation.definition.string.end.matlab
-# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab
-# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab string.quoted.double.matlab punctuation.definition.string.begin.matlab
-# ^^^^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab string.quoted.double.matlab
-# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab string.quoted.double.matlab punctuation.definition.string.end.matlab
-# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab
-# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab string.quoted.double.matlab punctuation.definition.string.begin.matlab
-# ^^^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab string.quoted.double.matlab
-# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab string.quoted.double.matlab punctuation.definition.string.end.matlab
-# ^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab
+# ^^^^^^^^^^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab entity.name.function.matlab
+# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab punctuation.section.parens.begin.matlab
+# ^^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab variable.other.readwrite.matlab
+# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab punctuation.separator.comma.matlab
+# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab punctuation.section.brackets.begin.matlab
+# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab meta.brackets.matlab string.quoted.double.matlab punctuation.definition.string.begin.matlab
+# ^^^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab meta.brackets.matlab string.quoted.double.matlab
+# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab meta.brackets.matlab string.quoted.double.matlab punctuation.definition.string.end.matlab
+# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab meta.brackets.matlab punctuation.separator.comma.matlab
+# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab meta.brackets.matlab string.quoted.double.matlab punctuation.definition.string.begin.matlab
+# ^^^^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab meta.brackets.matlab string.quoted.double.matlab
+# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab meta.brackets.matlab string.quoted.double.matlab punctuation.definition.string.end.matlab
+# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab meta.brackets.matlab punctuation.separator.comma.matlab
+# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab meta.brackets.matlab string.quoted.double.matlab punctuation.definition.string.begin.matlab
+# ^^^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab meta.brackets.matlab string.quoted.double.matlab
+# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab meta.brackets.matlab string.quoted.double.matlab punctuation.definition.string.end.matlab
+# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab punctuation.section.brackets.end.matlab
+# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab punctuation.section.parens.end.matlab
# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab punctuation.section.block.end.matlab
> end
#^^^^ source.matlab meta.function.matlab meta.arguments.matlab
@@ -177,11 +183,13 @@
# ^^^^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab storage.type.matlab
# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab
# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab punctuation.section.block.begin.matlab
-# ^^^^^^^^^^^^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab
-# ^^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab variable.other.readwrite.matlab
-# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab punctuation.accessor.dot.matlab
-# ^^^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab variable.other.property.matlab
-# ^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab
+# ^^^^^^^^^^^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab entity.name.function.matlab
+# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab punctuation.section.parens.begin.matlab
+# ^^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab variable.other.readwrite.matlab
+# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab punctuation.accessor.dot.matlab
+# ^^^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab variable.other.property.matlab
+# ^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.function-call.parens.matlab punctuation.section.parens.end.matlab
+# ^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab
# ^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.continuation.line.matlab punctuation.separator.continuation.line.matlab
# ^^^^^^^^^^^^^^^^^^ source.matlab meta.function.matlab meta.arguments.matlab meta.assignment.definition.property.matlab meta.block.validation.matlab meta.continuation.line.matlab comment.continuation.line.matlab
> mustBeReal}
diff --git a/test/snap/controlFlow.m.snap b/test/snap/controlFlow.m.snap
index 508ea50..9265b0c 100644
--- a/test/snap/controlFlow.m.snap
+++ b/test/snap/controlFlow.m.snap
@@ -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
@@ -119,35 +119,35 @@
> elseif y < 20
#^^^^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.elseif.matlab
# ^^^^^^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.elseif.matlab keyword.control.elseif.matlab
-# ^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab
-# ^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab variable.other.readwrite.matlab
-# ^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab
-# ^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab keyword.operator.relational.matlab
-# ^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab
-# ^^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab constant.numeric.decimal.matlab
+# ^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.elseif.matlab meta.elseif.declaration.matlab
+# ^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.elseif.matlab meta.elseif.declaration.matlab variable.other.readwrite.matlab
+# ^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.elseif.matlab meta.elseif.declaration.matlab
+# ^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.elseif.matlab meta.elseif.declaration.matlab keyword.operator.relational.matlab
+# ^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.elseif.matlab meta.elseif.declaration.matlab
+# ^^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.elseif.matlab meta.elseif.declaration.matlab constant.numeric.decimal.matlab
> disp('y < 20');
-#^^^^^^^^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab
-# ^^^^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.function-call.parens.matlab entity.name.function.matlab
-# ^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.function-call.parens.matlab punctuation.section.parens.begin.matlab
-# ^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.function-call.parens.matlab string.quoted.single.matlab punctuation.definition.string.begin.matlab
-# ^^^^^^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.function-call.parens.matlab string.quoted.single.matlab
-# ^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.function-call.parens.matlab string.quoted.single.matlab punctuation.definition.string.end.matlab
-# ^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.function-call.parens.matlab punctuation.section.parens.end.matlab
-# ^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab punctuation.terminator.semicolon.matlab
+#^^^^^^^^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.elseif.matlab
+# ^^^^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.elseif.matlab meta.function-call.parens.matlab entity.name.function.matlab
+# ^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.elseif.matlab meta.function-call.parens.matlab punctuation.section.parens.begin.matlab
+# ^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.elseif.matlab meta.function-call.parens.matlab string.quoted.single.matlab punctuation.definition.string.begin.matlab
+# ^^^^^^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.elseif.matlab meta.function-call.parens.matlab string.quoted.single.matlab
+# ^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.elseif.matlab meta.function-call.parens.matlab string.quoted.single.matlab punctuation.definition.string.end.matlab
+# ^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.elseif.matlab meta.function-call.parens.matlab punctuation.section.parens.end.matlab
+# ^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.elseif.matlab punctuation.terminator.semicolon.matlab
> else
-#^^^^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.else.matlab
+#^^^^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.elseif.matlab
# ^^^^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.else.matlab keyword.control.else.matlab
> disp("y >= 20");
-#^^^^^^^^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab
-# ^^^^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.function-call.parens.matlab entity.name.function.matlab
-# ^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.function-call.parens.matlab punctuation.section.parens.begin.matlab
-# ^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.function-call.parens.matlab string.quoted.double.matlab punctuation.definition.string.begin.matlab
-# ^^^^^^^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.function-call.parens.matlab string.quoted.double.matlab
-# ^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.function-call.parens.matlab string.quoted.double.matlab punctuation.definition.string.end.matlab
-# ^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.function-call.parens.matlab punctuation.section.parens.end.matlab
-# ^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab punctuation.terminator.semicolon.matlab
+#^^^^^^^^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.else.matlab
+# ^^^^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.else.matlab meta.function-call.parens.matlab entity.name.function.matlab
+# ^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.else.matlab meta.function-call.parens.matlab punctuation.section.parens.begin.matlab
+# ^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.else.matlab meta.function-call.parens.matlab string.quoted.double.matlab punctuation.definition.string.begin.matlab
+# ^^^^^^^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.else.matlab meta.function-call.parens.matlab string.quoted.double.matlab
+# ^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.else.matlab meta.function-call.parens.matlab string.quoted.double.matlab punctuation.definition.string.end.matlab
+# ^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.else.matlab meta.function-call.parens.matlab punctuation.section.parens.end.matlab
+# ^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.else.matlab punctuation.terminator.semicolon.matlab
> end
-#^^^^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab
+#^^^^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab meta.else.matlab
# ^^^ source.matlab meta.function.matlab meta.try.matlab meta.if.matlab keyword.control.end.if.matlab
>catch ME
#^^^^^ source.matlab meta.function.matlab meta.try.matlab meta.catch.matlab keyword.control.catch.matlab
diff --git a/test/snap/lineContinuations.m.snap b/test/snap/lineContinuations.m.snap
index 1e4d342..7c74011 100644
--- a/test/snap/lineContinuations.m.snap
+++ b/test/snap/lineContinuations.m.snap
@@ -78,7 +78,7 @@
# ^^^^^^^ source.matlab meta.function-call.parens.matlab meta.continuation.line.matlab comment.continuation.line.matlab
> arg2 ... comment
#^^^^ source.matlab meta.function-call.parens.matlab
-# ^^^^ source.matlab meta.function-call.parens.matlab variable.other.readwrite.matlab
+# ^^^^ source.matlab meta.function-call.parens.matlab variable.other.readwrite.matlab
# ^ source.matlab meta.function-call.parens.matlab
# ^^^ source.matlab meta.function-call.parens.matlab meta.continuation.line.matlab punctuation.separator.continuation.line.matlab
# ^^^^^^^^ source.matlab meta.function-call.parens.matlab meta.continuation.line.matlab comment.continuation.line.matlab
diff --git a/test/t08PropertyValidation.m b/test/t08PropertyValidation.m
index 7032314..1d1937f 100644
--- a/test/t08PropertyValidation.m
+++ b/test/t08PropertyValidation.m
@@ -3,10 +3,10 @@
properties (GetAccess = 'public', SetAccess = 'private')
% ^^^^^^^^^ storage.modifier.properties.matlab
% ^ keyword.operator.assignment.matlab
-% ^^^^^^ storage.modifier.access.matlab
+% ^^^^^^^^ string.quoted.single.matlab
% ^^^^^^^^^ storage.modifier.properties.matlab
% ^ keyword.operator.assignment.matlab
-% ^^^^^^^ storage.modifier.access.matlab
+% ^^^^^^^^^ string.quoted.single.matlab
% Commentary in the properties block
% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ comment.line.percentage.matlab
Prop % comment
@@ -61,6 +61,9 @@
% ^ keyword.operator.assignment.matlab
% ^^ constant.numeric.matlab
% ^ punctuation.terminator.semicolon.matlab
+ PropFcnArgs {mustBeGreaterThan(PropFcnArgs, 2)}
+% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.function-call.parens.matlab
+
% Ending commentary
end
end
diff --git a/test/t19SingleLineBlocks.m b/test/t19SingleLineBlocks.m
index 2a18a27..a46db11 100644
--- a/test/t19SingleLineBlocks.m
+++ b/test/t19SingleLineBlocks.m
@@ -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
@@ -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
diff --git a/test/t41FunctionDefinitions.m b/test/t41FunctionDefinitions.m
index c2a3017..82be89c 100644
--- a/test/t41FunctionDefinitions.m
+++ b/test/t41FunctionDefinitions.m
@@ -1,63 +1,146 @@
% SYNTAX TEST "source.matlab" "Function declarations: https://github.com/mathworks/MATLAB-Language-grammar/issues/41"
-function tFunctionDefinitions()
-% ^^^^^^^^^^^^^^^^^^^^entity.name.function.matlab
+function tFunctionDefinitions(in1)
+% ^^^^^^^^^^^^^^^^^^^^ entity.name.function.matlab
% Help text
- y = "a string";
- %<- variable.other.readwrite.matlab
+ y = in1;
% ^^^^^^^^^^string.quoted.double.matlab
anonymousFunction = @(in1,in2) in1 + in2;
- % ^keyword.operator.assignment.matlab
- % ^punctuation.definition.function.anonymous.matlab
- % ^punctuation.definition.parameters.begin.matlab
- % ^^^variable.parameter.input.matlab
- % ^punctuation.separator.parameter.comma.matlab
- % ^^^variable.parameter.input.matlab
- % ^punctuation.definition.parameters.end.matlab
- % ^keyword.operator.arithmetic.matlab
- % ^punctuation.terminator.semicolon.matlab
+ % ^ keyword.operator.assignment.matlab
+ % ^ punctuation.definition.function.anonymous.matlab
+ % ^ punctuation.definition.parameters.begin.matlab
+ % ^^^ variable.parameter.input.matlab
+ % ^ punctuation.separator.parameter.comma.matlab
+ % ^^^ variable.parameter.input.matlab
+ % ^ punctuation.definition.parameters.end.matlab
+ % ^ keyword.operator.arithmetic.matlab
+ % ^ punctuation.terminator.semicolon.matlab
end
%<- storage.type.function.end.matlab
function [a,b,c] = multiOutput()
-% ^^^^^^^^^^^entity.name.function.matlab
+% ^ punctuation.section.assignment.group.begin.matlab
+% ^ meta.assignment.variable.output.matlab variable.parameter.output.matlab
+% ^ meta.assignment.variable.output.matlab punctuation.separator.parameter.comma.matlab
+% ^ meta.assignment.variable.output.matlab variable.parameter.output.matlab
+% ^ meta.assignment.variable.output.matlab punctuation.separator.parameter.comma.matlab
+% ^ meta.assignment.variable.output.matlab variable.parameter.output.matlab
+% ^ punctuation.section.assignment.group.end.matlab
+% ^ keyword.operator.assignment.matlab
+% ^^^^^^^^^^^ entity.name.function.matlab
+% ^ meta.parameters.matlab punctuation.definition.parameters.begin.matlab
+% ^ meta.parameters.matlab punctuation.definition.parameters.end.matlab
% Help text
- y = "a string";
-% ^^^^^^^^^^string.quoted.double.matlab
+ a = "a string";
+ b = "b string";
+ c = "c string";
end
%<- storage.type.function.end.matlab
-function [a,b,...
+function [a,b,... comment
+% ^ punctuation.section.assignment.group.begin.matlab
+% ^ meta.assignment.variable.output.matlab variable.parameter.output.matlab
+% ^ meta.assignment.variable.output.matlab punctuation.separator.parameter.comma.matlab
+% ^ meta.assignment.variable.output.matlab variable.parameter.output.matlab
+% ^ meta.assignment.variable.output.matlab punctuation.separator.parameter.comma.matlab
+% ^^^ meta.assignment.variable.output.matlab punctuation.separator.continuation.line.matlab
+% ^^^^^^^ meta.assignment.variable.output.matlab comment.continuation.line.matlab
c] = multiLine(in1)
-% ^^^^^^^^^entity.name.function.matlab
+% ^ meta.assignment.variable.output.matlab variable.parameter.output.matlab
+% ^ punctuation.section.assignment.group.end.matlab
+% ^ keyword.operator.assignment.matlab
+% ^^^^^^^^^ entity.name.function.matlab
+% ^ meta.parameters.matlab punctuation.definition.parameters.begin.matlab
+% ^^^ meta.parameters.matlab variable.parameter.input.matlab
+% ^ meta.parameters.matlab punctuation.definition.parameters.end.matlab
% Help text
- y = "a string";
-% ^^^^^^^^^^string.quoted.double.matlab
+ a = in1;
+ b = "a string";
end
%<- storage.type.function.end.matlab
-function [a,b,...
- c] = multiLine2(in1,...
- in2)%^^^^^^^^^^entity.name.function.matlab
-
+function [a,...
+% ^ punctuation.section.assignment.group.begin.matlab
+% ^ meta.assignment.variable.output.matlab variable.parameter.output.matlab
+% ^ meta.assignment.variable.output.matlab punctuation.separator.parameter.comma.matlab
+% ^^^ meta.assignment.variable.output.matlab punctuation.separator.continuation.line.matlab
+ b] = multiLine2 (in1,... comment
+% ^ meta.assignment.variable.output.matlab variable.parameter.output.matlab
+% ^ punctuation.section.assignment.group.end.matlab
+% ^ keyword.operator.assignment.matlab
+% ^^^^^^^^^^ entity.name.function.matlab
+% ^ meta.parameters.matlab punctuation.definition.parameters.begin.matlab
+% ^^^ meta.parameters.matlab variable.parameter.input.matlab
+% ^ meta.parameters.matlab punctuation.separator.parameter.comma.matlab
+% ^^^ meta.parameters.matlab punctuation.separator.continuation.line.matlab
+% ^^^^^^^ meta.parameters.matlab comment.continuation.line.matlab
+ in2)
+% ^^^ meta.parameters.matlab variable.parameter.input.matlab
+% ^ meta.parameters.matlab punctuation.definition.parameters.end.matlab
% Help text
- y = "a string";
-% ^^^^^^^^^^string.quoted.double.matlab
+ a = in1;
+ b = in2;
end
%<- storage.type.function.end.matlab
+
+function a ... comment
+% ^ meta.assignment.variable.output.matlab variable.parameter.output.matlab
+% ^^^ meta.assignment.variable.output.matlab punctuation.separator.continuation.line.matlab
+% ^^^^^^^ meta.assignment.variable.output.matlab comment.continuation.line.matlab
+ = multiline3...
+% ^ keyword.operator.assignment.matlab
+% ^^^^^^^^^^ entity.name.function.matlab
+% ^^^ meta.function.declaration.matlab punctuation.separator.continuation.line.matlab
+ (in1)
+% ^ meta.parameters.matlab punctuation.definition.parameters.begin.matlab
+% ^^^ meta.parameters.matlab variable.parameter.input.matlab
+% ^ meta.parameters.matlab punctuation.definition.parameters.end.matlab
+ a = in1;
+end
+
+
+function multiline4(... comment
+% ^^^^^^^^^^ entity.name.function.matlab
+% ^ meta.parameters.matlab punctuation.definition.parameters.begin.matlab
+% ^^^ meta.parameters.matlab punctuation.separator.continuation.line.matlab
+% ^^^^^^^ meta.parameters.matlab comment.continuation.line.matlab
+ in1)
+% ^^^ meta.parameters.matlab variable.parameter.input.matlab
+% ^ meta.parameters.matlab punctuation.definition.parameters.end.matlab
+ disp(in1);
+end
+
+function [...
+% ^ punctuation.section.assignment.group.begin.matlab
+% ^^^ meta.assignment.variable.output.matlab punctuation.separator.continuation.line.matlab
+ a...
+% ^ meta.assignment.variable.output.matlab variable.parameter.output.matlab
+% ^^^ meta.assignment.variable.output.matlab punctuation.separator.continuation.line.matlab
+ ,b] ... comment
+% ^ meta.assignment.variable.output.matlab punctuation.separator.parameter.comma.matlab
+% ^ meta.assignment.variable.output.matlab variable.parameter.output.matlab
+% ^ punctuation.section.assignment.group.end.matlab
+% ^^^ meta.function.declaration.matlab punctuation.separator.continuation.line.matlab
+% ^^^^^^^ meta.function.declaration.matlab comment.continuation.line.matlab
+ = multiline5(in1)
+% ^ keyword.operator.assignment.matlab
+% ^^^^^^^^^^ entity.name.function.matlab
+% ^ meta.parameters.matlab punctuation.definition.parameters.begin.matlab
+% ^^^ meta.parameters.matlab variable.parameter.input.matlab
+% ^ meta.parameters.matlab punctuation.definition.parameters.end.matlab
+ a = in1;
+ b = "a string";
+end
+
function functionWithoutParens
-% ^^^^^^^^^^^^^^^^^^^^^meta.function.matlab
-% ^^^^^^^^^^^^^^^^^^^^^entity.name.function.matlab
+% ^^^^^^^^^^^^^^^^^^^^^meta.function.matlab entity.name.function.matlab
% Help text
y = "a string";
-% ^^^^^^^^^^string.quoted.double.matlab
end
%<- storage.type.function.end.matlab
function functionWithoutParensAndEnd
- % ^^^^^^^^^^^^^^^^^^^^^meta.function.matlab
- % ^^^^^^^^^^^^^^^^^^^^^entity.name.function.matlab
+% ^^^^^^^^^^^^^^^^^^^^^^^^^^^meta.function.matlab entity.name.function.matlab
% Help text
y = "a string";
- % ^^^^^^^^^^string.quoted.double.matlab
diff --git a/test/t51Imports.m b/test/t51Imports.m
index ac47991..883f787 100644
--- a/test/t51Imports.m
+++ b/test/t51Imports.m
@@ -22,8 +22,8 @@
% ^ punctuation.separator.matlab
% ^^^^^^^^ entity.name.module.matlab
-import module.*
-% <------ keyword.other.import.matlab
-% ^^^^^^ entity.name.module.matlab
-% ^ punctuation.separator.matlab
-% ^ variable.language.wildcard.matlab
+ import module.*
+% ^^^^^^ keyword.other.import.matlab
+% ^^^^^^ entity.name.module.matlab
+% ^ punctuation.separator.matlab
+% ^ variable.language.wildcard.matlab
diff --git a/test/t54LineContinuationInAnonymousFunctions.m b/test/t54LineContinuationInAnonymousFunctions.m
index b9fae59..8f7112d 100644
--- a/test/t54LineContinuationInAnonymousFunctions.m
+++ b/test/t54LineContinuationInAnonymousFunctions.m
@@ -1,4 +1,4 @@
-% SYNTAX TEST "source.matlab" "Imports: https://github.com/mathworks/MATLAB-Language-grammar/pull/52"
+% SYNTAX TEST "source.matlab" "LineContinationInAnonymousFunctions: https://github.com/mathworks/MATLAB-Language-grammar/pull/54"
@(x, y) x.^2+y;
diff --git a/test/t57Operators.m b/test/t57Operators.m
index aad8fca..9c67f90 100644
--- a/test/t57Operators.m
+++ b/test/t57Operators.m
@@ -1,4 +1,4 @@
-% SYNTAX TEST "source.matlab" "Imports: https://github.com/mathworks/MATLAB-Language-grammar/pull/57"
+% SYNTAX TEST "source.matlab" "Operators: https://github.com/mathworks/MATLAB-Language-grammar/pull/57"
%% Assignment and metadata query
diff --git a/test/t61ReadWriteOperations.m b/test/t61ReadWriteOperations.m
index ef417c1..8c8543d 100644
--- a/test/t61ReadWriteOperations.m
+++ b/test/t61ReadWriteOperations.m
@@ -1,4 +1,4 @@
-% SYNTAX TEST "source.matlab" "Imports: https://github.com/mathworks/MATLAB-Language-grammar/pull/51"
+% SYNTAX TEST "source.matlab" "ReadWriteOperations: https://github.com/mathworks/MATLAB-Language-grammar/pull/61"
variable
% <------- variable.other.readwrite.matlab
diff --git a/test/t64SwitchStatements.m b/test/t64SwitchStatements.m
new file mode 100644
index 0000000..21517a2
--- /dev/null
+++ b/test/t64SwitchStatements.m
@@ -0,0 +1,125 @@
+% SYNTAX TEST "source.matlab" "SwitchStatements: https://github.com/mathworks/MATLAB-Language-grammar/pull/64"
+
+
+
+% https://github.com/mathworks/MATLAB-Language-grammar/issues/45
+switch(letter)
+% <----- keyword.control.switch.matlab
+% ^^^^^^^^ meta.switch.declaration.matlab
+ case {'A', 'B', 'C'}
+% ^^^^ keyword.control.switch.case.matlab
+% ^^^^^^^^^^^^^^^^ meta.case.declaration.matlab
+ return;
+ case {'D', 'E', 'F'}
+% ^^^^ keyword.control.switch.case.matlab
+% ^^^^^^^^^^^^^^^^ meta.case.declaration.matlab
+ return;
+ case 'X'
+% ^^^^ keyword.control.switch.case.matlab
+% ^^^ meta.case.declaration.matlab
+% ^^^^ keyword.control.switch.case.matlab
+% ^^^ meta.case.declaration.matlab
+ return;
+ case 'Y'
+% ^^^^ keyword.control.switch.case.matlab
+% ^^^ meta.case.declaration.matlab
+ return;
+ case 'Z'
+% ^^^^ keyword.control.switch.case.matlab
+% ^^^ meta.case.declaration.matlab
+ return;
+ otherwise
+% ^^^^^^^^^ keyword.control.switch.otherwise.matlab
+ return;
+end
+% <-- keyword.control.end.switch.matlab
+
+
+% https://github.com/mathworks/MATLAB-Language-grammar/issues/47
+switch obj.memberVariable
+% <----- keyword.control.switch.matlab
+% ^^^^^^^^^^^^^^^^^^ meta.switch.declaration.matlab
+ case { 0, 1, 2 }
+% ^^^^ keyword.control.switch.case.matlab
+% ^^^^^^^^^^^ meta.case.declaration.matlab
+ disp( 'dummy output - 0' );
+ case 3
+% ^^^^ keyword.control.switch.case.matlab
+% ^ meta.case.declaration.matlab
+ disp( 'dummy output - 1' );
+ otherwise
+% ^^^^^^^^^ keyword.control.switch.otherwise.matlab
+ disp( 'dummy output - otherwise');
+
+end
+% <-- keyword.control.end.switch.matlab
+
+switch memberVariable
+% <----- keyword.control.switch.matlab
+% ^^^^^^^^^^^^^^ meta.switch.declaration.matlab
+ case { 0, 1, 2 }
+ disp( 'dummy output - 0' );
+ case 3
+ disp( 'dummy output - 1' );
+ otherwise
+% ^^^^^^^^^ keyword.control.switch.otherwise.matlab
+ disp( 'dummy output - otherwise' );
+end
+% <-- keyword.control.end.switch.matlab
+
+
+% https://github.com/mathworks/MATLAB-Language-grammar/issues/52
+switch input
+% <----- keyword.control.switch.matlab
+% ^^^^^ meta.switch.declaration.matlab
+ case 0
+% ^^^^ keyword.control.switch.case.matlab
+% ^ meta.case.declaration.matlab
+ disp foo
+ case { 1,2}
+% ^^^^ keyword.control.switch.case.matlab
+% ^^^^^^ meta.case.declaration.matlab
+ disp bar
+ case {3,4 }
+% ^^^^ keyword.control.switch.case.matlab
+% ^^^^^^ meta.case.declaration.matlab
+ disp foobar
+ case {5,6}
+% ^^^^ keyword.control.switch.case.matlab
+% ^^^^^ meta.case.declaration.matlab
+ disp baz
+end
+% <-- keyword.control.end.switch.matlab
+
+
+% https://github.com/mathworks/MATLAB-Language-grammar/issues/64
+switch experiment
+% <----- keyword.control.switch.matlab
+% ^^^^^^^^^^ meta.switch.declaration.matlab
+ case 0 % Script testing w/ artery only output, text here
+% ^^^^ keyword.control.switch.case.matlab
+% ^ meta.case.declaration.matlab
+% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ comment.line.percentage.matlab
+end
+% <-- keyword.control.end.switch.matlab
+
+
+a = @() 2;
+b = @() 2;
+
+switch a()
+% <----- keyword.control.switch.matlab
+% ^^^ meta.switch.declaration.matlab
+ case 1
+% ^^^^ keyword.control.switch.case.matlab
+% ^ meta.case.declaration.matlab
+ disp("yes")
+ case b()
+% ^^^^ keyword.control.switch.case.matlab
+% ^^^ meta.case.declaration.matlab
+ disp("wierd")
+ otherwise
+% ^^^^^^^^^ keyword.control.switch.otherwise.matlab
+ disp("no")
+end
+% <-- keyword.control.end.switch.matlab
\ No newline at end of file
diff --git a/test/t78EOLcommentsInBlocks.m b/test/t78EOLcommentsInBlocks.m
new file mode 100644
index 0000000..7868d55
--- /dev/null
+++ b/test/t78EOLcommentsInBlocks.m
@@ -0,0 +1,37 @@
+% SYNTAX TEST "source.matlab" "EOLcommentsInBlocks: https://github.com/mathworks/MATLAB-Language-grammar/pull/78"
+
+
+while test % test
+% <---- keyword.control.while.matlab
+% ^^^^ meta.while.declaration.matlab
+% ^^^^^^ comment.line.percentage.matlab
+ % test
+end
+
+while (test) % test
+% <---- keyword.control.while.matlab
+% ^^^^^^ meta.while.declaration.matlab
+% ^^^^^^ comment.line.percentage.matlab
+ % test
+end
+
+while test; % test
+% <---- keyword.control.while.matlab
+% ^^^^ meta.while.declaration.matlab
+% ^^^^^^ comment.line.percentage.matlab
+ % test
+end
+
+for i = 1:10 % test
+% <-- keyword.control.for.matlab
+% ^^^^^ meta.for.declaration.matlab
+% ^^^^^^ comment.line.percentage.matlab
+ % test
+end
+
+if i == 10 % test
+% <-- keyword.control.if.matlab
+% ^^^^^^^ meta.if.declaration.matlab
+% ^^^^^^ comment.line.percentage.matlab
+ % test
+end
\ No newline at end of file
diff --git a/test/t80AnonymousFunctionArgument.m b/test/t80AnonymousFunctionArgument.m
new file mode 100644
index 0000000..121f738
--- /dev/null
+++ b/test/t80AnonymousFunctionArgument.m
@@ -0,0 +1,23 @@
+% SYNTAX TEST "source.matlab" "AnonymousFunctionArgument: https://github.com/mathworks/MATLAB-Language-grammar/pull/80"
+
+q = integral(@(x) x.^2, 0, 1);
+% ^^^^^^^^^ meta.function.anonymous.matlab
+% ^ - meta.function.anonymous.matlab
+
+
+if ~isempty(lstr)
+ p.DataTipTemplate.DataTipRows(end+1) = ...
+ dataTipTextRow('cBin', arrayfun(@(x) lstr, binsX, 'UniformOutput', false));
+% ^^^^^^^^^ meta.function.anonymous.matlab
+% ^ - meta.function.anonymous.matlab
+end
+% <-- meta.if.matlab keyword.control.end.if.matlab
+
+
+if ~isempty(lstr)
+ p.DataTipTemplate.DataTipRows(end+1) = ...
+ dataTipTextRow('cBin', arrayfun(@(x) lstr, binsX, 'UniformOutput', false));
+% ^^^^^^^^^ meta.function.anonymous.matlab
+% ^ - meta.function.anonymous.matlab
+end
+% <-- meta.if.matlab keyword.control.end.if.matlab
diff --git a/test/t87ClassAttributes.m b/test/t87ClassAttributes.m
new file mode 100644
index 0000000..b41560b
--- /dev/null
+++ b/test/t87ClassAttributes.m
@@ -0,0 +1,6 @@
+% SYNTAX TEST "source.matlab" "Property validation: https://github.com/mathworks/MATLAB-Language-grammar/issues/87"
+classdef (AllowedSubclasses = {?SubClass1,?SubClass2}) SuperClass
+% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ storage.modifier.section.class.matlab
+% ^^^^^^^^^^^^^^^^^^^^^ meta.cell.literal.matlab
+% ^^^^^^^^^^ entity.name.type.class.matlab
+end
diff --git a/test/t89MetaclassLiterals.m b/test/t89MetaclassLiterals.m
new file mode 100644
index 0000000..be88c75
--- /dev/null
+++ b/test/t89MetaclassLiterals.m
@@ -0,0 +1,17 @@
+% SYNTAX TEST "source.matlab" "Metaclasses: https://github.com/mathworks/MATLAB-Language-grammar/issues/89"
+classdef (AllowedSubclasses = {?SubClass1,?namespace1.SubClass2}) SuperClass
+% ^^^^^^^^^ meta.metaclass.matlab entity.other.class.matlab
+% ^^^^^^^^^^^^^^^^^^^^ meta.metaclass.matlab
+% ^^^^^^^^^^ entity.name.namespace.matlab
+% ^^^^^^^^^ entity.other.class.matlab
+ methods
+ function foo()
+ x = ?namespace2.cls
+% ^^^^^^^^^^^^^^ meta.metaclass.matlab
+% ^^^^^^^^^^ entity.name.namespace.matlab
+% ^^^ entity.other.class.matlab
+ y = ?MyClass
+% ^^^^^^^ meta.metaclass.matlab entity.other.class.matlab
+ end
+ end
+end
diff --git a/test/t93ContinuationAfterClassAttributes.m b/test/t93ContinuationAfterClassAttributes.m
new file mode 100644
index 0000000..a6c90e6
--- /dev/null
+++ b/test/t93ContinuationAfterClassAttributes.m
@@ -0,0 +1,17 @@
+% SYNTAX TEST "source.matlab" "Line continuation after class attributes: https://github.com/mathworks/MATLAB-Language-grammar/issues/93"
+
+% Case 1: Line continuation without attributes
+classdef ...
+% ^^^ meta.class.declaration.matlab punctuation.separator.continuation.line.matlab
+ Class1
+% ^^^^^^ meta.class.declaration.matlab entity.name.type.class.matlab
+end
+
+% Case 2: Line continuation with attributes
+classdef (Abstract) ...
+% ^^^^^^^^^^^^^^ meta.class.declaration.matlab
+% ^^^^^^^^^^ storage.modifier.section.class.matlab
+% ^^^ punctuation.separator.continuation.line.matlab
+ Class2
+% ^^^^^^ meta.class.declaration.matlab entity.name.type.class.matlab
+end
\ No newline at end of file
diff --git a/test/t95AttributeParsing.m b/test/t95AttributeParsing.m
new file mode 100644
index 0000000..6d9545c
--- /dev/null
+++ b/test/t95AttributeParsing.m
@@ -0,0 +1,15 @@
+% SYNTAX TEST "source.matlab" "Property etc. attribute parsing: https://github.com/mathworks/MATLAB-Language-grammar/issues/95"
+classdef Class
+ % Some properties
+ properties (SetAccess=public, GetAccess={?foo.bar.baz})
+% ^^^^^^^^^^^^ meta.cell.literal.matlab
+ end
+
+ events (Hidden=true, ListenAccess={?foo.bar}, NotifyAccess=?bar.baz)
+% ^^^^^^^^ meta.cell.literal.matlab
+ end
+
+ methods (Access=?bar.baz, Abstract=false)
+% ^^^^^^^ meta.metaclass.matlab
+ end
+end