Skip to content

Commit

Permalink
Merge pull request #7 from schneidmaster/new-sublime-syntax
Browse files Browse the repository at this point in the history
Convert syntax to sublime-syntax instead of tmLanguage.
  • Loading branch information
cooncesean authored Mar 2, 2017
2 parents b23f7cd + 0899f1e commit 3fad6e9
Show file tree
Hide file tree
Showing 3 changed files with 381 additions and 1,110 deletions.
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

Sublime syntax highlighting for CJSX

## Version Support

This package uses the `.sublime-syntax` syntax definition for rich highlighting and improved performance. As a consequence, only Sublime Text 3, Build 3103 and newer is supported. If you're using Sublime Text 2 or an older version of Sublime Text 3, you can retrieve the old `.tmLanguage` file from [this commit](https://github.com/Guidebook/sublime-cjsx/tree/b23f7cd2fbad387f904a8ead2cb3a79f983c9897) -- however, only the master `.sublime-syntax` definition will receive future updates.

## Installation

### Install via Package Control
Expand Down
377 changes: 377 additions & 0 deletions syntax/CJSX.sublime-syntax
Original file line number Diff line number Diff line change
@@ -0,0 +1,377 @@
%YAML 1.2
---
# http://www.sublimetext.com/docs/3/syntax.html
name: CJSX
comment: CJSX Syntax
file_extensions:
- cjsx
- coffee
- Cakefile
- coffee.erb
- cson
first_line_match: ^#!.*\bcoffee
scope: source.coffee
contexts:
main:
- include: jsx
- match: '(\([^()]*?\))\s*([=-]>)'
comment: "match stuff like: a -> …"
scope: meta.inline.function.coffee
captures:
1: variable.parameter.function.coffee
2: storage.type.function.coffee
- match: (new)\s+(\w+(?:\.\w*)*)
scope: meta.class.instance.constructor
captures:
1: keyword.operator.new.coffee
2: support.class.coffee
- match: "'''"
captures:
0: punctuation.definition.string.begin.coffee
push:
- meta_scope: string.quoted.heredoc.coffee
- match: "'''"
captures:
0: punctuation.definition.string.end.coffee
pop: true
- match: '"""'
captures:
0: punctuation.definition.string.begin.coffee
push:
- meta_scope: string.quoted.double.heredoc.coffee
- match: '"""'
captures:
0: punctuation.definition.string.end.coffee
pop: true
- match: \\.
scope: constant.character.escape.coffee
- include: interpolated_coffee
- match: "`"
captures:
0: punctuation.definition.string.begin.coffee
push:
- meta_scope: string.quoted.script.coffee
- match: "`"
captures:
0: punctuation.definition.string.end.coffee
pop: true
- match: '\\(x\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.)'
scope: constant.character.escape.coffee
- match: (?<!#)###(?!#)
captures:
0: punctuation.definition.comment.coffee
push:
- meta_scope: comment.block.coffee
- match: "###"
captures:
0: punctuation.definition.comment.coffee
pop: true
- match: '@\w*'
scope: storage.type.annotation.coffeescript
- match: '(#)(?!\{).*$\n?'
scope: comment.line.number-sign.coffee
captures:
1: punctuation.definition.comment.coffee
- match: "/{3}"
push:
- meta_scope: string.regexp.coffee
- match: "/{3}[imgy]{0,4}"
pop: true
- include: interpolated_coffee
- include: embedded_comment
- match: '/(?![\s=/*+{}?]).*?[^\\]/[igmy]{0,4}(?![a-zA-Z0-9])'
scope: string.regexp.coffee
- match: |-
(?x)
\b(?<![\.\$])(
break|by|catch|continue|else|finally|for|in|of|if|return|switch|
then|throw|try|unless|when|while|until|loop|do|(?<=for)\s+own
)(?!\s*:)\b
scope: keyword.control.coffee
- match: |-
(?x)
and=|or=|!|%|&|\^|\*|\/|(\-)?\-(?!>)|\+\+|\+|~|==|=(?!>)|!=|<=|>=|<<=|>>=|
>>>=|<>|<|>|!|&&|\.\.(\.)?|\?|\||\|\||\:|\*=|(?<!\()/=|%=|\+=|\-=|&=|
\^=|\b(?<![\.\$])(instanceof|new|delete|typeof|and|or|is|isnt|not|super)\b
scope: keyword.operator.coffee
- match: '([a-zA-Z\$_](\w|\$|\.)*\s*(?!\::)((:)|(=[^=]))(?!(\s*\(.*\))?\s*((=|-)>)))'
scope: variable.assignment.coffee
captures:
1: variable.assignment.coffee
4: punctuation.separator.key-value
5: keyword.operator.coffee
- match: '(?<=\s|^)([\[\{])(?=.*?[\]\}]\s+[:=])'
captures:
0: keyword.operator.coffee
push:
- meta_scope: meta.variable.assignment.destructured.coffee
- match: '([\]\}]\s*[:=])'
captures:
0: keyword.operator.coffee
pop: true
- include: variable_name
- include: instance_variable
- include: jsx-single-quoted-prop
- include: jsx-double-quoted-prop
- include: numeric
- match: |-
(?x)
(\s*)
(?=[a-zA-Z\$_])
(
[a-zA-Z\$_](\w|\$|:|\.)*\s*
(?=[:=](\s*\(.*\))?\s*([=-]>))
)
scope: meta.function.coffee
captures:
2: entity.name.function.coffee
3: entity.name.function.coffee
4: variable.parameter.function.coffee
5: storage.type.function.coffee
- match: ^\s*(describe|it|app\.(get|post|put|all|del|delete))
comment: Show well-known functions from Express and Mocha in Go To Symbol view
push:
- meta_scope: meta.function.symbols.coffee
- match: $
pop: true
- include: main
- match: "[=-]>"
scope: storage.type.function.coffee
- match: '\b(?<!\.)(true|on|yes)(?!\s*[:=])\b'
scope: constant.language.boolean.true.coffee
- match: '\b(?<!\.)(false|off|no)(?!\s*[:=])\b'
scope: constant.language.boolean.false.coffee
- match: '\b(?<!\.)null(?!\s*[:=])\b'
scope: constant.language.null.coffee
- match: '\b(?<!\.)(this|extends)(?!\s*[:=])\b'
scope: variable.language.coffee
- match: '(class\b)\s+(@?[a-zA-Z\$_][\w\.]*)?(?:\s+(extends)\s+(@?[a-zA-Z\$\._][\w\.]*))?'
scope: meta.class.coffee
captures:
1: storage.type.class.coffee
2: entity.name.type.class.coffee
3: keyword.control.inheritance.coffee
4: entity.other.inherited-class.coffee
- match: \b(debugger|\\)\b
scope: keyword.other.coffee
- match: |-
(?x)\b(
Array|ArrayBuffer|Blob|Boolean|Date|document|event|Function|
Int(8|16|32|64)Array|Math|Map|Number|
Object|Proxy|RegExp|Set|String|WeakMap|
window|Uint(8|16|32|64)Array|XMLHttpRequest
)\b
scope: support.class.coffee
- match: ((?<=console\.)(debug|warn|info|log|error|time|timeEnd|assert))\b
scope: support.function.console.coffee
- match: |-
(?x)\b(
decodeURI(Component)?|encodeURI(Component)?|eval|parse(Float|Int)|require
)\b
scope: support.function.coffee
- match: |-
(?x)((?<=\.)(
apply|call|concat|every|filter|forEach|from|hasOwnProperty|indexOf|
isPrototypeOf|join|lastIndexOf|map|of|pop|propertyIsEnumerable|push|
reduce(Right)?|reverse|shift|slice|some|sort|splice|to(Locale)?String|
unshift|valueOf
))\b
scope: support.function.method.array.coffee
- match: |-
(?x)((?<=Array\.)(
isArray
))\b
scope: support.function.static.array.coffee
- match: |-
(?x)((?<=Object\.)(
create|definePropert(ies|y)|freeze|getOwnProperty(Descriptors?|Names)|
getProperty(Descriptor|Names)|getPrototypeOf|is(Extensible|Frozen|Sealed)?|
isnt|keys|preventExtensions|seal
))\b
scope: support.function.static.object.coffee
- match: |-
(?x)((?<=Math\.)(
abs|acos|acosh|asin|asinh|atan|atan2|atanh|ceil|cos|cosh|exp|expm1|floor|
hypot|log|log10|log1p|log2|max|min|pow|random|round|sign|sin|sinh|sqrt|
tan|tanh|trunc
))\b
scope: support.function.static.math.coffee
- match: |-
(?x)((?<=Number\.)(
is(Finite|Integer|NaN)|toInteger
))\b
scope: support.function.static.number.coffee
- match: \b(Infinity|NaN|undefined)\b
scope: constant.language.coffee
- match: \;
scope: punctuation.terminator.statement.coffee
- match: ',[ |\t]*'
scope: meta.delimiter.object.comma.coffee
- match: \.
scope: meta.delimiter.method.period.coffee
- match: '\{|\}'
scope: meta.brace.curly.coffee
- match: \(|\)
scope: meta.brace.round.coffee
- match: '\[|\]\s*'
scope: meta.brace.square.coffee
- include: instance_variable
- include: single_quoted_string
- include: double_quoted_string
- include: numeric
double_quote:
- match: '\\(x\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.)'
scope: constant.character.escape.coffee
- include: interpolated_coffee
- include: jsx-entities
double_quoted_string:
- match: '"'
captures:
0: punctuation.definition.string.begin.coffee
push:
- meta_scope: string.quoted.double.coffee
- match: '"'
captures:
0: punctuation.definition.string.end.coffee
pop: true
- include: double_quote
embedded_comment:
- match: (?<!\\)(#).*$\n?
scope: comment.line.number-sign.coffee
captures:
1: punctuation.definition.comment.coffee
instance_variable:
- match: '(@)([a-zA-Z_\$]\w*)?'
scope: variable.other.readwrite.instance.coffee
interpolated_coffee:
- match: '\#\{'
captures:
0: punctuation.section.embedded.coffee
push:
- meta_scope: source.coffee.embedded.source
- match: '\}'
captures:
0: punctuation.section.embedded.coffee
pop: true
- include: main
jsx:
- include: jsx-evaluated-code
- include: jsx-tag-area
- include: jsx-tag-open
- include: jsx-tag-close
- include: jsx-tag-invalid
jsx-double-quoted-prop:
- match: (?:\s*=\s*)(")
captures:
1: string.quoted.double.punctuation.definition.begin.coffee
push:
- match: '"'
captures:
0: string.quoted.double.punctuation.definition.end.coffee
pop: true
- include: double_quote
- match: .*?
scope: string.quoted.double.coffee
jsx-entities:
- match: "(&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)"
scope: constant.character.entity.coffee
captures:
1: punctuation.definition.entity.coffee
3: punctuation.definition.entity.coffee
- match: "&"
scope: invalid.illegal.bad-ampersand.coffee
jsx-evaluated-code:
- match: "{"
captures:
0: punctuation.definition.brace.curly.start.coffee
push:
- meta_scope: meta.brace.curly.coffee
- match: "}"
captures:
0: punctuation.definition.brace.curly.end.coffee
pop: true
- include: main
jsx-single-quoted-prop:
- match: (?:=)\s?*(')
captures:
1: string.quoted.single.punctuation.definition.string.begin.coffee
push:
- match: "'"
captures:
0: string.quoted.single.punctuation.definition.string.end.coffee
pop: true
- include: single_quote
- match: .*?
scope: string.quoted.single.coffee
jsx-tag-area:
- match: |-
(<)([a-zA-Z0-9:.]+)(?![^
]*/>)
captures:
1: punctuation.definition.tag.begin.coffee
2: entity.name.tag.coffee
push:
- meta_scope: jsx.tag-area.coffee
- match: '(</)(\2)([^>]*>)|(\/>)'
captures:
1: punctuation.definition.tag.begin.coffee
2: entity.name.tag.coffee
4: punctuation.definition.tag.end.coffee
pop: true
- include: jsx-tag-attributes
- include: jsx
jsx-tag-attribute-name:
- match: '\b([a-zA-Z_:][a-zA-Z_:0-9\-\.]*)'
scope: meta.tag.attribute-name.html
captures:
1: entity.other.attribute-name.html
jsx-tag-attributes:
- include: jsx-tag-attribute-name
- include: jsx-double-quoted-prop
- include: jsx-single-quoted-prop
- include: jsx-evaluated-code
jsx-tag-close:
- match: '(</)([^>]+)(>)|(\/>)'
scope: tag.close.coffee
captures:
1: punctuation.definition.tag.begin.coffee
2: entity.name.tag.coffee
3: punctuation.definition.tag.end.coffee
jsx-tag-invalid:
- match: <\s*>
scope: invalid.illegal.tag.incomplete.coffee
jsx-tag-open:
- match: "(<)([a-zA-Z0-9:.]+)"
captures:
1: punctuation.definition.tag.begin.coffee
2: entity.name.tag.coffee
push:
- meta_scope: tag.open.coffee
- match: (/?>)
captures:
1: punctuation.definition.tag.end.coffee
pop: true
- include: jsx-tag-attributes
numeric:
- match: '(?<!\$)\b((0([box])[0-9a-fA-F]+)|([0-9]+(\.[0-9]+)?(e[+\-]?[0-9]+)?))\b'
scope: constant.numeric.coffee
single_quote:
- match: '\\(x\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)'
scope: constant.character.escape.coffee
- include: jsx-entities
single_quoted_string:
- match: "'"
captures:
0: punctuation.definition.string.begin.coffee
push:
- meta_scope: string.quoted.single.coffee
- match: "'"
captures:
0: punctuation.definition.string.end.coffee
pop: true
- include: single_quote
variable_name:
- match: '([a-zA-Z\$_]\w*(\.\w+)*)'
scope: variable.assignment.coffee
captures:
1: variable.assignment.coffee
Loading

0 comments on commit 3fad6e9

Please sign in to comment.