diff --git a/RustEnhanced.sublime-syntax b/RustEnhanced.sublime-syntax index adc156c8..6a362720 100644 --- a/RustEnhanced.sublime-syntax +++ b/RustEnhanced.sublime-syntax @@ -800,11 +800,22 @@ contexts: pop: true - match: \bself\b scope: variable.parameter.rust - - match: '({{identifier}})\s*(:(?!:))' - captures: - 1: variable.parameter.rust - 2: punctuation.separator.rust + - include: basic-identifiers + - match: '[\{\(]' + scope: punctuation.definition.block.begin.rust + push: + - match: '[\}\)]' + scope: punctuation.definition.block.end.rust + pop: true + - match: '{{ident}}' + scope: variable.parameter.rust + - include: statements + - include: attribute - include: type-any-identifier + - match: '{{ident}}' + scope: variable.parameter.rust + - match: ':' + scope: punctuation.separator.rust fn-return: - meta_scope: meta.function.rust diff --git a/syntax_test_rust.rs b/syntax_test_rust.rs index 19411025..821c8f7e 100644 --- a/syntax_test_rust.rs +++ b/syntax_test_rust.rs @@ -1203,3 +1203,44 @@ pub union Foo<'a, Y: Baz> // that we don't accidentally interpret it as a keyword. fn union() {} // ^^^^^ meta.function entity.name.function + +fn deconstructor(Foo(a, b): Foo) { +// ^^^ +// ^ meta.function.rust meta.function.parameters.rust punctuation.definition.block.begin.rust +// ^ meta.function.rust meta.function.parameters.rust variable.parameter.rust +// ^ meta.function.rust meta.function.parameters.rust variable.parameter.rust +// ^ meta.function.rust meta.function.parameters.rust punctuation.definition.block.end.rust +// ^ meta.function.rust meta.function.parameters.rust punctuation.separator.rust +// ^^^ meta.function.rust meta.function.parameters.rust storage.type.source.rust + unimplemented!(); +} + +fn deconstructor(Foo{ 0: x, 1: y }: Foo) { +// ^^^ meta.function.rust meta.function.parameters.rust storage.type.source.rust +// ^ meta.function.rust meta.function.parameters.rust punctuation.definition.block.begin.rust +// ^ meta.function.rust meta.function.parameters.rust constant.numeric.integer.decimal.rust +// ^ meta.function.rust meta.function.parameters.rust variable.parameter.rust +// ^ meta.function.rust meta.function.parameters.rust constant.numeric.integer.decimal.rust +// ^ meta.function.rust meta.function.parameters.rust punctuation.separator.rust +// ^ meta.function.rust meta.function.parameters.rust variable.parameter.rust +// ^ meta.function.rust meta.function.parameters.rust punctuation.definition.block.end.rust +// ^ meta.function.rust meta.function.parameters.rust punctuation.separator.rust +// ^^^ meta.function.rust meta.function.parameters.rust storage.type.source.rust + unimplemented!(); +} + +fn deconstructor(Foo{ a, b, c, d: _, .. }: Foo) { +// ^^^ meta.function.rust meta.function.parameters.rust storage.type.source.rust +// ^ meta.function.rust meta.function.parameters.rust punctuation.definition.block.begin.rust +// ^ meta.function.rust meta.function.parameters.rust variable.parameter.rust +// ^ meta.function.rust meta.function.parameters.rust variable.parameter.rust +// ^ meta.function.rust meta.function.parameters.rust variable.parameter.rust +// ^ meta.function.rust meta.function.parameters.rust variable.parameter.rust +// ^ meta.function.rust meta.function.parameters.rust punctuation.separator.rust +// ^^^ meta.function.rust meta.function.parameters.rust +// ^^ meta.function.rust meta.function.parameters.rust keyword.operator.rust +// ^ meta.function.rust meta.function.parameters.rust punctuation.definition.block.end.rust +// ^ meta.function.rust meta.function.parameters.rust punctuation.separator.rust +// ^^^ meta.function.rust meta.function.parameters.rust storage.type.source.rust + unimplemented!(); +}