diff --git a/CoffeeScript.sublime-syntax b/CoffeeScript.sublime-syntax index 565d9b4..1b36e5d 100644 --- a/CoffeeScript.sublime-syntax +++ b/CoffeeScript.sublime-syntax @@ -95,13 +95,44 @@ contexts: ###[ CLASS DECLARATIONS ]##################################################### classes: - - match: (class\b)\s+((?!extends)@?[a-zA-Z\$_][\w\.]*)?(?:\s*(extends)\s+(@?[a-zA-Z\$\._][\w\.]*))? - scope: meta.class.coffee + - match: class\b + scope: meta.class.coffee keyword.declaration.class.coffee + push: + - class-extends + - class-name + + class-name: + - match: (?=extends\b) + pop: 1 + - match: ({{identifier}})(\.) + captures: + 1: support.class.coffee + 2: punctuation.accessor.dot.coffee + - match: '{{identifier}}' + scope: entity.name.class.coffee + pop: 1 + - include: comments + - include: else-pop + + class-extends: + - meta_content_scope: meta.class.identifier.coffee + - match: extends\b + scope: storage.modifier.extends.coffee + set: class-extends-name + - include: comments + - include: else-pop + + class-extends-name: + - meta_scope: meta.class.extends.coffee + - match: ({{identifier}})(\.) captures: - 1: storage.type.class.coffee - 2: entity.name.type.class.coffee - 3: keyword.control.inheritance.coffee - 4: entity.other.inherited-class.coffee + 1: support.class.coffee + 2: punctuation.accessor.dot.coffee + - match: '{{identifier}}' + scope: entity.other.inherited-class.coffee + pop: 1 + - include: comments + - include: else-pop ###[ FUNCTION DECLARATIONS ]################################################## diff --git a/tests/syntax_test_scope.coffee b/tests/syntax_test_scope.coffee index 9bd9371..f3bfe62 100644 --- a/tests/syntax_test_scope.coffee +++ b/tests/syntax_test_scope.coffee @@ -43,21 +43,29 @@ export parentClass ###[ CLASSES ]################################################################ class extends parentClass -# <- meta.class.coffee storage.type.class.coffee -#^^^^^^^^^^^^^^^^^^^^^^^^ meta.class.coffee -#^^^^ storage.type.class.coffee -# ^^^^^^^ keyword.control.inheritance.coffee +# <- meta.class.coffee keyword.declaration.class.coffee +#^^^^ meta.class.coffee +# ^ meta.class.identifier.coffee +# ^^^^^^^^^^^^^^^^^^^ meta.class.extends.coffee +#^^^^ keyword.declaration.class.coffee +# ^^^^^^^ storage.modifier.extends.coffee # ^^^^^^^^^^^ entity.other.inherited-class.coffee constructor: -> return class App.Router extends Snakeskin.Router -# <- meta.class.coffee storage.type.class.coffee -#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.class.coffee -#^^^^ storage.type.class.coffee -# ^^^^^^^^^^ entity.name.type.class.coffee -# ^^^^^^^ keyword.control.inheritance.coffee -# ^^^^^^^^^^^^^^^^ entity.other.inherited-class.coffee +# <- meta.class.coffee keyword.declaration.class.coffee +#^^^^ meta.class.coffee +# ^^^^^^^^^^^^ meta.class.identifier.coffee +# ^^^^^^^^^^^^^^^^^^^^^^^^ meta.class.extends.coffee +#^^^^ keyword.declaration.class.coffee +# ^^^ support.class.coffee +# ^ punctuation.accessor.dot.coffee +# ^^^^^^ entity.name.class.coffee +# ^^^^^^^ storage.modifier.extends.coffee +# ^^^^^^^^^ support.class.coffee +# ^ punctuation.accessor.dot.coffee +# ^^^^^^ entity.other.inherited-class.coffee ###[ FUNCTIONS ]###############################################################