diff --git a/C#/C#.sublime-syntax b/C#/C#.sublime-syntax index c28ea9ed76..9d08fdd4ea 100644 --- a/C#/C#.sublime-syntax +++ b/C#/C#.sublime-syntax @@ -1330,43 +1330,12 @@ contexts: 2: punctuation.separator.cs 3: punctuation.section.brackets.end.cs 4: keyword.operator.pointer.cs - - match: \((?=(?:[^,)(]|\([^\)]*\))*,) - scope: punctuation.section.group.begin.cs - push: - - meta_scope: meta.group.tuple.cs - - match: \) - scope: punctuation.section.group.end.cs - pop: true - - match: ',' - scope: punctuation.separator.tuple.cs - - match: ':' - scope: keyword.operator.assignment.cs - - match: _\b - scope: variable.language.deconstruction.discard.cs - - match: (?!{{reserved}})(?={{namespaced_name}}{{type_suffix}}\s+{{name}}\s*[:,]) - push: var_declaration_explicit - - match: '({{name}})(<)' - captures: - 1: support.type.cs - 2: meta.generic.cs punctuation.definition.generic.begin.cs - push: - - meta_content_scope: meta.generic.cs - - match: ',' - scope: punctuation.separator.type.cs - - match: '>' - scope: meta.generic.cs punctuation.definition.generic.end.cs - pop: true - - include: type - - include: line_of_code_in_no_semicolon - match: \( scope: punctuation.section.group.begin.cs - push: - - meta_scope: meta.group.cs - - match: \) - scope: punctuation.section.group.end.cs - pop: true - - include: lambdas - - include: line_of_code_in_no_semicolon + branch_point: tuple_or_group + branch: + - group + - tuple - match: \{ scope: punctuation.section.block.begin.cs set: @@ -1377,6 +1346,49 @@ contexts: - match: (?=\}|\)|>|\]|,|{{reserved}}) pop: true + tuple: + - meta_scope: meta.group.tuple.cs + - match: \) + scope: punctuation.section.group.end.cs + pop: true + - match: ',' + scope: punctuation.separator.tuple.cs + - match: ':' + scope: keyword.operator.assignment.cs + - match: _\b + scope: variable.language.deconstruction.discard.cs + - match: (?!{{reserved}})(?={{namespaced_name}}{{type_suffix}}\s+{{name}}\s*[:,]) + push: var_declaration_explicit + - match: '({{name}})(<)' + captures: + 1: support.type.cs + 2: meta.generic.cs punctuation.definition.generic.begin.cs + push: + - meta_content_scope: meta.generic.cs + - match: ',' + scope: punctuation.separator.type.cs + - match: (>)\s*(\() + captures: + 1: meta.generic.cs punctuation.definition.generic.end.cs + 2: meta.function-call.cs meta.group.cs punctuation.section.group.begin.cs + set: [function_call_arguments, arguments] + - match: '>' + scope: meta.generic.cs punctuation.definition.generic.end.cs + pop: true + - include: type + - include: line_of_code_in_no_semicolon + - include: line_of_code_in_no_semicolon + + group: + - meta_scope: meta.group.cs + - match: \) + scope: punctuation.section.group.end.cs + pop: true + - match: ',' + fail: tuple_or_group + - include: lambdas + - include: line_of_code_in_no_semicolon + attribute_arguments: - meta_content_scope: meta.annotation.cs meta.group.cs - match: '' @@ -1428,7 +1440,7 @@ contexts: scope: invalid.illegal.expected-close-paren.cs pop: true - include: stray_close_bracket - - match: '(?=\S)' + - match: (?=\S) push: - include: lambdas - include: line_of_code_in_no_semicolon diff --git a/C#/tests/syntax_test_C#7.cs b/C#/tests/syntax_test_C#7.cs index 7241b02c11..ae4de41f2f 100644 --- a/C#/tests/syntax_test_C#7.cs +++ b/C#/tests/syntax_test_C#7.cs @@ -351,6 +351,22 @@ public void TupleTest () { /// ^ punctuation.section.group.end /// ^ punctuation.terminator.statement + ( +/// ^ meta.group.tuple punctuation.section.group.begin + string Alpha, +/// ^^^^^^ storage.type +/// ^^^^^ variable.other +/// ^ punctuation.separator.tuple + string Beta + ) namedLetters = ("a", "b"); +/// ^ punctuation.section.group.end +/// ^^^^^^^^^^^^ variable.other +/// ^ keyword.operator.assignment +/// ^ punctuation.section.group.begin +/// ^ punctuation.separator.tuple +/// ^ punctuation.section.group.end +/// ^ punctuation.terminator.statement + (SomeType[] Alpha, SomeType Beta) example = (a, b); /// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.group.tuple /// ^ punctuation.section.group.begin