From 134e18a7d843e03ede6d6b21d5003180bb0f688f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9B=D0=B0=D0=B2=D1=80=D1=91=D0=BD=D0=BE=D0=B2=20=D0=90?= =?UTF-8?q?=D0=BD=D1=82=D0=BE=D0=BD?= Date: Mon, 27 May 2013 23:34:26 +0800 Subject: [PATCH] Literate syntax support --- CoffeeScript_Literate.tmLanguage | 1821 ++++++++++++++++++++++++++++++ 1 file changed, 1821 insertions(+) create mode 100644 CoffeeScript_Literate.tmLanguage diff --git a/CoffeeScript_Literate.tmLanguage b/CoffeeScript_Literate.tmLanguage new file mode 100644 index 0000000..8cbd5c8 --- /dev/null +++ b/CoffeeScript_Literate.tmLanguage @@ -0,0 +1,1821 @@ + + + + + comment + CoffeeScript (Literate) + fileTypes + + litcoffee + litcoffee.erb + coffee.md + + foldingStartMarker + (?x) + (<(?i:head|body|table|thead|tbody|tfoot|tr|div|select|fieldset|style|script|ul|ol|form|dl)\b.*?> + |<!--(?!.*-->) + |\{\s*($|\?>\s*$|//|/\*(.*\*/\s*$|(?!.*?\*/))) + ) + foldingStopMarker + (?x) + (</(?i:head|body|table|thead|tbody|tfoot|tr|div|select|fieldset|style|script|ul|ol|form|dl)> + |^\s*--> + |(^|\s)\} + ) + name + CoffeeScript (Literate) + patterns + + + begin + (?x)^ + (?= ([ ]{4}|\t)(?!$)) + end + (?x)^ + (?! ([ ]{4}|\t)) + name + markup.raw.block.markdown + patterns + + + include + #block_raw + + + + + begin + (?x)^ + (?= [ ]{,3}>. + | [#]{1,6}\s*+ + | [ ]{,3}(?<marker>[-*_])([ ]{,2}\k<marker>){2,}[ \t]*+$ + ) + comment + + We could also use an empty end match and set + applyEndPatternLast, but then we must be sure that the begin + pattern will only match stuff matched by the sub-patterns. + + end + (?x)^ + (?! [ ]{,3}>. + | [#]{1,6}\s*+ + | [ ]{,3}(?<marker>[-*_])([ ]{,2}\k<marker>){2,}[ \t]*+$ + ) + name + meta.block-level.markdown + patterns + + + include + #block_quote + + + include + #heading + + + include + #separator + + + + + begin + ^[ ]{0,3}([*+-])(?=\s) + captures + + 1 + + name + punctuation.definition.list_item.markdown + + + end + ^(?=\S) + name + markup.list.unnumbered.markdown + patterns + + + include + #list-paragraph + + + + + begin + ^[ ]{0,3}([0-9]+\.)(?=\s) + captures + + 1 + + name + punctuation.definition.list_item.markdown + + + end + ^(?=\S) + name + markup.list.numbered.markdown + patterns + + + include + #list-paragraph + + + + + begin + ^(?=<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del)\b)(?!.*?</\1>) + comment + + Markdown formatting is disabled inside block-level tags. + + end + (?<=^</\1>$\n) + name + meta.disable-markdown + patterns + + + include + text.html.basic + + + + + begin + ^(?=<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del)\b) + comment + Same rule but for one line disables. + end + $\n? + name + meta.disable-markdown + patterns + + + include + text.html.basic + + + + + captures + + 1 + + name + punctuation.definition.constant.markdown + + 10 + + name + punctuation.definition.string.end.markdown + + 11 + + name + string.other.link.description.title.markdown + + 12 + + name + punctuation.definition.string.begin.markdown + + 13 + + name + punctuation.definition.string.end.markdown + + 2 + + name + constant.other.reference.link.markdown + + 3 + + name + punctuation.definition.constant.markdown + + 4 + + name + punctuation.separator.key-value.markdown + + 5 + + name + punctuation.definition.link.markdown + + 6 + + name + markup.underline.link.markdown + + 7 + + name + punctuation.definition.link.markdown + + 8 + + name + string.other.link.description.title.markdown + + 9 + + name + punctuation.definition.string.begin.markdown + + + match + (?x: + \s* # Leading whitespace + (\[)(.+?)(\])(:) # Reference name + [ \t]* # Optional whitespace + (<?)(\S+?)(>?) # The url + [ \t]* # Optional whitespace + (?: + ((\().+?(\))) # Match title in quotes… + | ((").+?(")) # or in parens. + )? # Title is optional + \s* # Optional whitespace + $ + ) + name + meta.link.reference.def.markdown + + + begin + ^(?=\S)(?![=-]{3,}(?=$)) + end + ^(?:\s*$|(?=[ ]{,3}>.))|(?=[ \t]*\n)(?<=^===|^====|=====|^---|^----|-----)[ \t]*\n|(?=^#) + name + meta.paragraph.markdown + patterns + + + include + #inline + + + include + text.html.basic + + + captures + + 1 + + name + punctuation.definition.heading.markdown + + + match + ^(={3,})(?=[ \t]*$) + name + markup.heading.1.markdown + + + captures + + 1 + + name + punctuation.definition.heading.markdown + + + match + ^(-{3,})(?=[ \t]*$) + name + markup.heading.2.markdown + + + + + repository + + ampersand + + comment + + Markdown will convert this for us. We match it so that the + HTML grammar will not mark it up as invalid. + + match + &(?!([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+);) + name + meta.other.valid-ampersand.markdown + + block_quote + + begin + \G[ ]{,3}(>)(?!$)[ ]? + beginCaptures + + 1 + + name + punctuation.definition.blockquote.markdown + + + comment + + We terminate the block quote when seeing an empty line, a + separator or a line with leading > characters. The latter is + to “reset” the quote level for quoted lines. + + end + (?x)^ + (?= \s*$ + | [ ]{,3}(?<marker>[-*_])([ ]{,2}\k<marker>){2,}[ \t]*+$ + | [ ]{,3}>. + ) + name + markup.quote.markdown + patterns + + + begin + (?x)\G + (?= [ ]{,3}>. + ) + end + ^ + patterns + + + include + #block_quote + + + + + applyEndPatternLast + 1 + begin + (?x)\G + (?= ([ ]{4}|\t) + | [#]{1,6}\s*+ + | [ ]{,3}(?<marker>[-*_])([ ]{,2}\k<marker>){2,}[ \t]*+$ + ) + end + ^ + patterns + + + include + #block_raw + + + include + #heading + + + include + #separator + + + + + begin + (?x)\G + (?! $ + | [ ]{,3}>. + | ([ ]{4}|\t) + | [#]{1,6}\s*+ + | [ ]{,3}(?<marker>[-*_])([ ]{,2}\k<marker>){2,}[ \t]*+$ + ) + end + $|(?<=\n) + patterns + + + include + #inline + + + + + + block_raw + + name + markup.raw.block.markdown + patterns + + + include + #coffee_script + + + + bold + + begin + (?x) + (\*\*|__)(?=\S) # Open + (?= + ( + <[^>]*+> # HTML tags + | (?<raw>`+)([^`]|(?!(?<!`)\k<raw>(?!`))`)*+\k<raw> + # Raw + | \\[\\`*_{}\[\]()#.!+\->]?+ # Escapes + | \[ + ( + (?<square> # Named group + [^\[\]\\] # Match most chars + | \\. # Escaped chars + | \[ \g<square>*+ \] # Nested brackets + )*+ + \] + ( + ( # Reference Link + [ ]? # Optional space + \[[^\]]*+\] # Ref name + ) + | ( # Inline Link + \( # Opening paren + [ \t]*+ # Optional whtiespace + <?(.*?)>? # URL + [ \t]*+ # Optional whtiespace + ( # Optional Title + (?<title>['"]) + (.*?) + \k<title> + )? + \) + ) + ) + ) + | (?!(?<=\S)\1). # Everything besides + # style closer + )++ + (?<=\S)\1 # Close + ) + + captures + + 1 + + name + punctuation.definition.bold.markdown + + + end + (?<=\S)(\1) + name + markup.bold.markdown + patterns + + + applyEndPatternLast + 1 + begin + (?=<[^>]*?>) + end + (?<=>) + patterns + + + include + text.html.basic + + + + + include + #escape + + + include + #ampersand + + + include + #bracket + + + include + #raw + + + include + #italic + + + include + #image-inline + + + include + #link-inline + + + include + #link-inet + + + include + #link-email + + + include + #image-ref + + + include + #link-ref-literal + + + include + #link-ref + + + + bracket + + comment + + Markdown will convert this for us. We match it so that the + HTML grammar will not mark it up as invalid. + + match + <(?![a-z/?\$!]) + name + meta.other.valid-bracket.markdown + + coffee_script + + patterns + + + captures + + 1 + + name + variable.parameter.function.coffee + + 2 + + name + storage.type.function.coffee + + + comment + match stuff like: a -> … + 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 + patterns + + + match + @\w* + name + storage.type.annotation.coffeescript + + + + + captures + + 1 + + name + punctuation.definition.comment.coffee + + + match + (#)(?!\{).*$\n? + name + comment.line.number-sign.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|do|(?<=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 + + 3 + + name + entity.name.function.coffee + + 4 + + name + variable.parameter.function.coffee + + 5 + + name + storage.type.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 + keyword.control.inheritance.coffee + + 4 + + name + entity.other.inherited-class.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 + + + + 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.number-sign.coffee + + + + escape + + match + \\[-`*_#+.!(){}\[\]\\>] + name + constant.character.escape.markdown + + heading + + begin + \G(#{1,6})(?!#)\s*(?=\S) + captures + + 1 + + name + punctuation.definition.heading.markdown + + + contentName + entity.name.section.markdown + end + \s*(#*)$\n? + name + markup.heading.markdown + patterns + + + include + #inline + + + + image-inline + + captures + + 1 + + name + punctuation.definition.string.begin.markdown + + 10 + + name + string.other.link.description.title.markdown + + 11 + + name + punctuation.definition.string.markdown + + 12 + + name + punctuation.definition.string.markdown + + 13 + + name + string.other.link.description.title.markdown + + 14 + + name + punctuation.definition.string.markdown + + 15 + + name + punctuation.definition.string.markdown + + 16 + + name + punctuation.definition.metadata.markdown + + 2 + + name + string.other.link.description.markdown + + 3 + + name + punctuation.definition.string.end.markdown + + 5 + + name + invalid.illegal.whitespace.markdown + + 6 + + name + punctuation.definition.metadata.markdown + + 7 + + name + punctuation.definition.link.markdown + + 8 + + name + markup.underline.link.image.markdown + + 9 + + name + punctuation.definition.link.markdown + + + match + (?x: + \! # Images start with ! + (\[)((?<square>[^\[\]\\]|\\.|\[\g<square>*+\])*+)(\]) + # Match the link text. + ([ ])? # Space not allowed + (\() # Opening paren for url + (<?)(\S+?)(>?) # The url + [ \t]* # Optional whitespace + (?: + ((\().+?(\))) # Match title in parens… + | ((").+?(")) # or in quotes. + )? # Title is optional + \s* # Optional whitespace + (\)) + ) + name + meta.image.inline.markdown + + image-ref + + captures + + 1 + + name + punctuation.definition.string.begin.markdown + + 2 + + name + string.other.link.description.markdown + + 4 + + name + punctuation.definition.string.begin.markdown + + 5 + + name + punctuation.definition.constant.markdown + + 6 + + name + constant.other.reference.link.markdown + + 7 + + name + punctuation.definition.constant.markdown + + + match + \!(\[)((?<square>[^\[\]\\]|\\.|\[\g<square>*+\])*+)(\])[ ]?(\[)(.*?)(\]) + name + meta.image.reference.markdown + + inline + + patterns + + + include + #escape + + + include + #ampersand + + + include + #bracket + + + include + #raw + + + include + #bold + + + include + #italic + + + include + #line-break + + + include + #image-inline + + + include + #link-inline + + + include + #link-inet + + + include + #link-email + + + include + #image-ref + + + include + #link-ref-literal + + + include + #link-ref + + + + 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 + + + + + + italic + + begin + (?x) + (\*|_)(?=\S) # Open + (?= + ( + <[^>]*+> # HTML tags + | (?<raw>`+)([^`]|(?!(?<!`)\k<raw>(?!`))`)*+\k<raw> + # Raw + | \\[\\`*_{}\[\]()#.!+\->]?+ # Escapes + | \[ + ( + (?<square> # Named group + [^\[\]\\] # Match most chars + | \\. # Escaped chars + | \[ \g<square>*+ \] # Nested brackets + )*+ + \] + ( + ( # Reference Link + [ ]? # Optional space + \[[^\]]*+\] # Ref name + ) + | ( # Inline Link + \( # Opening paren + [ \t]*+ # Optional whtiespace + <?(.*?)>? # URL + [ \t]*+ # Optional whtiespace + ( # Optional Title + (?<title>['"]) + (.*?) + \k<title> + )? + \) + ) + ) + ) + | \1\1 # Must be bold closer + | (?!(?<=\S)\1). # Everything besides + # style closer + )++ + (?<=\S)\1 # Close + ) + + captures + + 1 + + name + punctuation.definition.italic.markdown + + + end + (?<=\S)(\1)((?!\1)|(?=\1\1)) + name + markup.italic.markdown + patterns + + + applyEndPatternLast + 1 + begin + (?=<[^>]*?>) + end + (?<=>) + patterns + + + include + text.html.basic + + + + + include + #escape + + + include + #ampersand + + + include + #bracket + + + include + #raw + + + include + #bold + + + include + #image-inline + + + include + #link-inline + + + include + #link-inet + + + include + #link-email + + + include + #image-ref + + + include + #link-ref-literal + + + include + #link-ref + + + + line-break + + match + {2,}$ + name + meta.dummy.line-break + + link-email + + captures + + 1 + + name + punctuation.definition.link.markdown + + 2 + + name + markup.underline.link.markdown + + 4 + + name + punctuation.definition.link.markdown + + + match + (<)((?:mailto:)?[-.\w]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)(>) + name + meta.link.email.lt-gt.markdown + + link-inet + + captures + + 1 + + name + punctuation.definition.link.markdown + + 2 + + name + markup.underline.link.markdown + + 3 + + name + punctuation.definition.link.markdown + + + match + (<)((?:https?|ftp)://.*?)(>) + name + meta.link.inet.markdown + + link-inline + + captures + + 1 + + name + punctuation.definition.string.begin.markdown + + 10 + + name + string.other.link.description.title.markdown + + 11 + + name + punctuation.definition.string.begin.markdown + + 12 + + name + punctuation.definition.string.end.markdown + + 13 + + name + string.other.link.description.title.markdown + + 14 + + name + punctuation.definition.string.begin.markdown + + 15 + + name + punctuation.definition.string.end.markdown + + 16 + + name + punctuation.definition.metadata.markdown + + 2 + + name + string.other.link.title.markdown + + 4 + + name + punctuation.definition.string.end.markdown + + 5 + + name + invalid.illegal.whitespace.markdown + + 6 + + name + punctuation.definition.metadata.markdown + + 7 + + name + punctuation.definition.link.markdown + + 8 + + name + markup.underline.link.markdown + + 9 + + name + punctuation.definition.link.markdown + + + match + (?x: + (\[)((?<square>[^\[\]\\]|\\.|\[\g<square>*+\])*+)(\]) + # Match the link text. + ([ ])? # Space not allowed + (\() # Opening paren for url + (<?)(.*?)(>?) # The url + [ \t]* # Optional whitespace + (?: + ((\().+?(\))) # Match title in parens… + | ((").+?(")) # or in quotes. + )? # Title is optional + \s* # Optional whitespace + (\)) + ) + name + meta.link.inline.markdown + + link-ref + + captures + + 1 + + name + punctuation.definition.string.begin.markdown + + 2 + + name + string.other.link.title.markdown + + 4 + + name + punctuation.definition.string.end.markdown + + 5 + + name + punctuation.definition.constant.begin.markdown + + 6 + + name + constant.other.reference.link.markdown + + 7 + + name + punctuation.definition.constant.end.markdown + + + match + (\[)((?<square>[^\[\]\\]|\\.|\[\g<square>*+\])*+)(\])[ ]?(\[)([^\]]*+)(\]) + name + meta.link.reference.markdown + + link-ref-literal + + captures + + 1 + + name + punctuation.definition.string.begin.markdown + + 2 + + name + string.other.link.title.markdown + + 4 + + name + punctuation.definition.string.end.markdown + + 5 + + name + punctuation.definition.constant.begin.markdown + + 6 + + name + punctuation.definition.constant.end.markdown + + + match + (\[)((?<square>[^\[\]\\]|\\.|\[\g<square>*+\])*+)(\])[ ]?(\[)(\]) + name + meta.link.reference.literal.markdown + + list-paragraph + + patterns + + + begin + \G\s+(?=\S) + end + ^\s*$ + name + meta.paragraph.list.markdown + patterns + + + include + #inline + + + captures + + 1 + + name + punctuation.definition.list_item.markdown + + + comment + Match the list punctuation + match + ^\s*([*+-]|[0-9]+\.) + + + + + + numeric + + patterns + + + match + (?<!\$)\b((0([box])[0-9a-fA-F]+)|([0-9]+(\.[0-9]+)?(e[+\-]?[0-9]+)?))\b + name + constant.numeric.coffee + + + + raw + + captures + + 1 + + name + punctuation.definition.raw.markdown + + 3 + + name + punctuation.definition.raw.markdown + + + match + (`+)([^`]|(?!(?<!`)\1(?!`))`)*+(\1) + name + markup.raw.inline.markdown + + separator + + match + \G[ ]{,3}([-*_])([ ]{,2}\1){2,}[ \t]*$\n? + name + meta.separator.markdown + + 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.litcoffee + uuid + 70456B1D-AC94-4E9B-81AB-426F0D1ACB86 + +