--- 
comment: "CoffeeScript Syntax: version 1"
fileTypes: 
- coffee
- Cakefile
foldingStartMarker: .*(->|=>)\s*$|.*[\[{]\s*$
foldingStopMarker: ^\s*$|^\s*[}\]]\s*$
keyEquivalent: ^~C
name: CoffeeScript
patterns: 
- captures: 
    "1": 
      name: variable.parameter.function.coffee
    "2": 
      name: storage.type.function.coffee
  comment: "match stuff like: a -> \xE2\x80\xA6 "
  match: (\([^()]*?\))\s*([=-]>)
  name: meta.inline.function.coffee
- captures: 
    "1": 
      name: keyword.operator.new.coffee
    "2": 
      name: entity.name.type.instance.coffee
  match: (new)\s+(\w+(?:\.\w*)?)
  name: meta.class.instance.constructor
- begin: "'''"
  beginCaptures: 
    "0": 
      name: punctuation.definition.string.begin.coffee
  end: "'''"
  endCaptures: 
    "0": 
      name: punctuation.definition.string.end.coffee
  name: string.quoted.heredoc.coffee
- begin: "\"\"\""
  beginCaptures: 
    "0": 
      name: punctuation.definition.string.begin.coffee
  end: "\"\"\""
  endCaptures: 
    "0": 
      name: punctuation.definition.string.end.coffee
  name: string.quoted.double.heredoc.coffee
  patterns: 
  - match: \\.
    name: constant.character.escape.coffee
  - include: "#interpolated_coffee"
- begin: "`"
  beginCaptures: 
    "0": 
      name: punctuation.definition.string.begin.coffee
  end: "`"
  endCaptures: 
    "0": 
      name: punctuation.definition.string.end.coffee
  name: string.quoted.script.coffee
  patterns: 
  - match: \\(x\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.)
    name: constant.character.escape.coffee
- begin: "###(?!#)"
  captures: 
    "0": 
      name: punctuation.definition.comment.coffee
  end: "###[ \\t]*\\n"
  name: comment.block.coffee
- captures: 
    "1": 
      name: punctuation.definition.comment.coffee
  match: (#).*$\n?
  name: comment.line.coffee
- begin: /{3}
  end: /{3}[imgy]{0,4}
  name: string.regexp.coffee
  patterns: 
  - include: "#interpolated_coffee"
  - include: "#embedded_comment"
- match: /(?![\s/*+{}?]).*?[^\\]/[igmy]{0,4}(?![a-zA-Z0-9])
  name: string.regexp.coffee
- match: \b(?<!\.)(break|by|catch|continue|else|finally|for|in|of|if|return|switch|then|throw|try|unless|when|while|until|loop|(?<=for)\s+own)(?!\s*:)\b
  name: keyword.control.coffee
- match: and=|or=|!|%|&|\^|\*|\/|\-\-|\-|\+\+|\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\?|\||\|\||\:|\*=|(?<!\()/=|%=|\+=|\-=|&=|\^=|\b(instanceof|new|delete|typeof|and|or|is|isnt|not)\b
  name: keyword.operator.coffee
- captures: 
    "1": 
      name: variable.assignment.coffee
    "4": 
      name: punctuation.separator.key-value
    "5": 
      name: keyword.operator.coffee
  match: ([a-zA-Z\$_](\w|\$|\.)*\s*(?!\::)((:)|(=))(?!(\s*\(.*\))?\s*((=|-)>)))
  name: variable.assignment.coffee
- begin: (?<=\s|^)([\[\{])(?=.*?[\]\}]\s+[:=])
  beginCaptures: 
    "0": 
      name: keyword.operator.coffee
  end: ([\]\}]\s*[:=])
  endCaptures: 
    "0": 
      name: keyword.operator.coffee
  name: meta.variable.assignment.destructured.coffee
  patterns: 
  - include: "#variable_name"
  - include: "#instance_variable"
  - include: "#single_quoted_string"
  - include: "#double_quoted_string"
  - include: "#numeric"
- captures: 
    "2": 
      name: entity.name.function.coffee
  match: (\s*)(?=[a-zA-Z\$_])([a-zA-Z\$_](\w|\$|:|\.)*\s*(?=[:=](\s*\(.*\))?\s*((=|-)>)))
  name: meta.function.coffee
- match: (=|-)>
  name: storage.type.function.coffee
- match: \b(?<!\.)(true|on|yes)(?!\s*[:=])\b
  name: constant.language.boolean.true.coffee
- match: \b(?<!\.)(false|off|no)(?!\s*[:=])\b
  name: constant.language.boolean.false.coffee
- match: \b(?<!\.)null(?!\s*[:=])\b
  name: constant.language.null.coffee
- match: \b(?<!\.)(super|this|extends)(?!\s*[:=])\b
  name: variable.language.coffee
- captures: 
    "1": 
      name: storage.type.class.coffee
    "2": 
      name: entity.name.type.class.coffee
    "3": 
      name: entity.other.inherited-class.coffee
    "4": 
      name: keyword.control.inheritance.coffee
  match: (class\b)\s+([a-zA-Z\$_]\w+)?(\s+(extends)\s+[a-zA-Z\$_]\w*)?
  name: meta.class.coffee
- match: \b(debugger|\\)\b
  name: keyword.other.coffee
- match: \b(Infinity|NaN|undefined)\b
  name: constant.language.coffee
- match: \;
  name: punctuation.terminator.statement.coffee
- match: ",[ |\t]*"
  name: meta.delimiter.object.comma.coffee
- match: \.
  name: meta.delimiter.method.period.coffee
- match: \{|\}
  name: meta.brace.curly.coffee
- match: \(|\)
  name: meta.brace.round.coffee
- match: \[|\]\s*
  name: meta.brace.square.coffee
- include: "#instance_variable"
- include: "#single_quoted_string"
- include: "#double_quoted_string"
- include: "#numeric"
repository: 
  double_quoted_string: 
    patterns: 
    - begin: "\""
      beginCaptures: 
        "0": 
          name: punctuation.definition.string.begin.coffee
      end: "\""
      endCaptures: 
        "0": 
          name: punctuation.definition.string.end.coffee
      name: string.quoted.double.coffee
      patterns: 
      - match: \\(x\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.)
        name: constant.character.escape.coffee
      - include: "#interpolated_coffee"
  embedded_comment: 
    patterns: 
    - captures: 
        "1": 
          name: punctuation.definition.comment.coffee
      match: (#).*$\n?
      name: comment.line.coffee
  instance_variable: 
    patterns: 
    - match: (@)([a-zA-Z_\$]\w*)?
      name: variable.other.readwrite.instance.coffee
  interpolated_coffee: 
    patterns: 
    - begin: \#\{
      captures: 
        "0": 
          name: punctuation.section.embedded.coffee
      end: \}
      name: source.coffee.embedded.source
      patterns: 
      - include: $self
  numeric: 
    patterns: 
    - match: (?<!\$)\b((0(x|X)[0-9a-fA-F]+)|([0-9]+(\.[0-9]+)?(e[+\-]?[0-9]+)?))\b
      name: constant.numeric.coffee
  single_quoted_string: 
    patterns: 
    - begin: "'"
      beginCaptures: 
        "0": 
          name: punctuation.definition.string.begin.coffee
      end: "'"
      endCaptures: 
        "0": 
          name: punctuation.definition.string.end.coffee
      name: string.quoted.single.coffee
      patterns: 
      - match: \\(x\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)
        name: constant.character.escape.coffee
  variable_name: 
    patterns: 
    - captures: 
        "1": 
          name: variable.assignment.coffee
      match: ([a-zA-Z\$_]\w*(\.\w+)*)
      name: variable.assignment.coffee
scopeName: source.coffee
uuid: 5B520980-A7D5-4E10-8582-1A4C889A8DE5
