4 lines
16 KiB
JavaScript
4 lines
16 KiB
JavaScript
var elixir_tmLanguage = {comment:"Textmate bundle for Elixir Programming Language.",fileTypes:["ex","exs"],firstLineMatch:"^#!/.*\\belixir",foldingStartMarker:"(after|else|catch|rescue|\\-\\>|\\{|\\[|do)\\s*$",foldingStopMarker:"^\\s*((\\}|\\]|after|else|catch|rescue)\\s*$|end\\b)",keyEquivalent:"^~E",name:"elixir",patterns:[{begin:"\\b(fn)\\b(?!.*->)",beginCaptures:{"1":{name:"keyword.control.elixir"}},end:"$",patterns:[{include:"#core_syntax"}]},{captures:{"1":{name:"entity.name.type.class.elixir"},"2":{name:"punctuation.separator.method.elixir"},"3":{name:"entity.name.function.elixir"}},match:"([A-Z]\\w+)\\s*(\\.)\\s*([a-z_]\\w*[!?]?)"},{captures:{"1":{name:"constant.other.symbol.elixir"},"2":{name:"punctuation.separator.method.elixir"},"3":{name:"entity.name.function.elixir"}},match:"(\\:\\w+)\\s*(\\.)\\s*([_]?\\w*[!?]?)"},{captures:{"1":{name:"keyword.operator.other.elixir"},"2":{name:"entity.name.function.elixir"}},match:"(\\|\\>)\\s*([a-z_]\\w*[!?]?)"},{match:"\\b[a-z_]\\w*[!?]?(?=\\s*\\.?\\s*\\()",name:"entity.name.function.elixir"},{begin:"\\b(fn)\\b(?=.*->)",beginCaptures:{"1":{name:"keyword.control.elixir"}},end:"(?>(->)|(when)|(\\)))",endCaptures:{"1":{name:"keyword.operator.other.elixir"},"2":{name:"keyword.control.elixir"},"3":{name:"punctuation.section.function.elixir"}},patterns:[{include:"#core_syntax"}]},{include:"#core_syntax"},{begin:"^(?=.*->)((?![^\"']*(\"|')[^\"']*->)|(?=.*->[^\"']*(\"|')[^\"']*->))((?!.*\\([^\\)]*->)|(?=[^\\(\\)]*->)|(?=\\s*\\(.*\\).*->))((?!.*\\b(fn)\\b)|(?=.*->.*\\bfn\\b))",beginCaptures:{"1":{name:"keyword.control.elixir"}},end:"(?>(->)|(when)|(\\)))",endCaptures:{"1":{name:"keyword.operator.other.elixir"},"2":{name:"keyword.control.elixir"},"3":{name:"punctuation.section.function.elixir"}},patterns:[{include:"#core_syntax"}]}],repository:{core_syntax:{patterns:[{begin:"^\\s*(defmodule)\\b",beginCaptures:{"1":{name:"keyword.control.module.elixir"}},end:"\\b(do)\\b",endCaptures:{"1":{name:"keyword.control.module.elixir"}},name:"meta.module.elixir",patterns:[{match:"\\b[A-Z]\\w*(?=\\.)",name:"entity.other.inherited-class.elixir"},{match:"\\b[A-Z]\\w*\\b",name:"entity.name.type.class.elixir"}]},{begin:"^\\s*(defprotocol)\\b",beginCaptures:{"1":{name:"keyword.control.protocol.elixir"}},end:"\\b(do)\\b",endCaptures:{"1":{name:"keyword.control.protocol.elixir"}},name:"meta.protocol_declaration.elixir",patterns:[{match:"\\b[A-Z]\\w*\\b",name:"entity.name.type.protocol.elixir"}]},{begin:"^\\s*(defimpl)\\b",beginCaptures:{"1":{name:"keyword.control.protocol.elixir"}},end:"\\b(do)\\b",endCaptures:{"1":{name:"keyword.control.protocol.elixir"}},name:"meta.protocol_implementation.elixir",patterns:[{match:"\\b[A-Z]\\w*\\b",name:"entity.name.type.protocol.elixir"}]},{begin:"^\\s*(def|defmacro|defdelegate|defguard)\\s+((?>[a-zA-Z_]\\w*(?>\\.|::))?(?>[a-zA-Z_]\\w*(?>[?!]|=(?!>))?|===?|>[>=]?|<=>|<[<=]?|[%&`/\\|]|\\*\\*?|=?~|[-+]@?|\\[\\]=?))((\\()|\\s*)",beginCaptures:{"1":{name:"keyword.control.module.elixir"},"2":{name:"entity.name.function.public.elixir"},"4":{name:"punctuation.section.function.elixir"}},end:"(\\bdo:)|(\\bdo\\b)|(?=\\s+(def|defn|defmacro|defdelegate|defguard)\\b)",endCaptures:{"1":{name:"constant.other.keywords.elixir"},"2":{name:"keyword.control.module.elixir"}},name:"meta.function.public.elixir",patterns:[{include:"$self"},{begin:"\\s(\\\\\\\\)",beginCaptures:{"1":{name:"keyword.operator.other.elixir"}},end:",|\\)|$",patterns:[{include:"$self"}]},{match:"\\b(is_atom|is_binary|is_bitstring|is_boolean|is_float|is_function|is_integer|is_list|is_map|is_nil|is_number|is_pid|is_port|is_record|is_reference|is_tuple|is_exception|abs|bit_size|byte_size|div|elem|hd|length|map_size|node|rem|round|tl|trunc|tuple_size)\\b",name:"keyword.control.elixir"}]},{begin:"^\\s*(defp|defnp|defmacrop|defguardp)\\s+((?>[a-zA-Z_]\\w*(?>\\.|::))?(?>[a-zA-Z_]\\w*(?>[?!]|=(?!>))?|===?|>[>=]?|<=>|<[<=]?|[%&`/\\|]|\\*\\*?|=?~|[-+]@?|\\[\\]=?))((\\()|\\s*)",beginCaptures:{"1":{name:"keyword.control.module.elixir"},"2":{name:"entity.name.function.private.elixir"},"4":{name:"punctuation.section.function.elixir"}},end:"(\\bdo:)|(\\bdo\\b)|(?=\\s+(defp|defmacrop|defguardp)\\b)",endCaptures:{"1":{name:"constant.other.keywords.elixir"},"2":{name:"keyword.control.module.elixir"}},name:"meta.function.private.elixir",patterns:[{include:"$self"},{begin:"\\s(\\\\\\\\)",beginCaptures:{"1":{name:"keyword.operator.other.elixir"}},end:",|\\)|$",patterns:[{include:"$self"}]},{match:"\\b(is_atom|is_binary|is_bitstring|is_boolean|is_float|is_function|is_integer|is_list|is_map|is_nil|is_number|is_pid|is_port|is_record|is_reference|is_tuple|is_exception|abs|bit_size|byte_size|div|elem|hd|length|map_size|node|rem|round|tl|trunc|tuple_size)\\b",name:"keyword.control.elixir"}]},{begin:"\\s*~L\"\"\"",comment:"Leex Sigil",end:"\\s*\"\"\"",name:"sigil.leex",patterns:[{include:"text.elixir"},{include:"text.html.basic"}]},{begin:"\\s*~H\"\"\"",comment:"HEEx Sigil",end:"\\s*\"\"\"",name:"sigil.heex",patterns:[{include:"text.elixir"},{include:"text.html.basic"}]},{begin:"@(module|type)?doc (~[a-z])?\"\"\"",comment:"@doc with heredocs is treated as documentation",end:"\\s*\"\"\"",name:"comment.block.documentation.heredoc",patterns:[{include:"#interpolated_elixir"},{include:"#escaped_char"}]},{begin:"@(module|type)?doc ~[A-Z]\"\"\"",comment:"@doc with heredocs is treated as documentation",end:"\\s*\"\"\"",name:"comment.block.documentation.heredoc"},{begin:"@(module|type)?doc (~[a-z])?'''",comment:"@doc with heredocs is treated as documentation",end:"\\s*'''",name:"comment.block.documentation.heredoc",patterns:[{include:"#interpolated_elixir"},{include:"#escaped_char"}]},{begin:"@(module|type)?doc ~[A-Z]'''",comment:"@doc with heredocs is treated as documentation",end:"\\s*'''",name:"comment.block.documentation.heredoc"},{comment:"@doc false is treated as documentation",match:"@(module|type)?doc false",name:"comment.block.documentation.false"},{begin:"@(module|type)?doc \"",comment:"@doc with string is treated as documentation",end:"\"",name:"comment.block.documentation.string",patterns:[{include:"#interpolated_elixir"},{include:"#escaped_char"}]},{match:"(?<!\\.)\\b(do|end|case|bc|lc|for|if|cond|unless|try|receive|fn|defmodule|defp?|defprotocol|defimpl|defrecord|defstruct|defnp?|defmacrop?|defguardp?|defdelegate|defexception|defoverridable|exit|after|rescue|catch|else|raise|reraise|throw|import|require|alias|use|quote|unquote|super|with)\\b(?![?!:])",name:"keyword.control.elixir"},{comment:" as above, just doesn't need a 'end' and does a logic operation",match:"(?<!\\.)\\b(and|not|or|when|xor|in)\\b",name:"keyword.operator.elixir"},{match:"\\b[A-Z]\\w*\\b",name:"entity.name.type.class.elixir"},{match:"\\b(nil|true|false)\\b(?![?!])",name:"constant.language.elixir"},{match:"\\b(__(CALLER|ENV|MODULE|DIR|STACKTRACE)__)\\b(?![?!])",name:"variable.language.elixir"},{captures:{"1":{name:"punctuation.definition.variable.elixir"}},match:"(@)[a-zA-Z_]\\w*",name:"variable.other.readwrite.module.elixir"},{captures:{"1":{name:"punctuation.definition.variable.elixir"}},match:"(&)\\d+",name:"variable.other.anonymous.elixir"},{match:"&(?![&])",name:"variable.other.anonymous.elixir"},{captures:{"1":{name:"punctuation.definition.variable.elixir"}},match:"\\^[a-z_]\\w*",name:"variable.other.capture.elixir"},{match:"\\b0x[0-9A-Fa-f](?>_?[0-9A-Fa-f])*\\b",name:"constant.numeric.hex.elixir"},{match:"\\b\\d(?>_?\\d)*(\\.(?![^[:space:][:digit:]])(?>_?\\d)+)([eE][-+]?\\d(?>_?\\d)*)?\\b",name:"constant.numeric.float.elixir"},{match:"\\b\\d(?>_?\\d)*\\b",name:"constant.numeric.integer.elixir"},{match:"\\b0b[01](?>_?[01])*\\b",name:"constant.numeric.binary.elixir"},{match:"\\b0o[0-7](?>_?[0-7])*\\b",name:"constant.numeric.octal.elixir"},{begin:":'",captures:{"0":{name:"punctuation.definition.constant.elixir"}},end:"'",name:"constant.other.symbol.single-quoted.elixir",patterns:[{include:"#interpolated_elixir"},{include:"#escaped_char"}]},{begin:":\"",captures:{"0":{name:"punctuation.definition.constant.elixir"}},end:"\"",name:"constant.other.symbol.double-quoted.elixir",patterns:[{include:"#interpolated_elixir"},{include:"#escaped_char"}]},{begin:"(?>''')",beginCaptures:{"0":{name:"punctuation.definition.string.begin.elixir"}},comment:"Single-quoted heredocs",end:"^\\s*'''",endCaptures:{"0":{name:"punctuation.definition.string.end.elixir"}},name:"string.quoted.single.heredoc.elixir",patterns:[{include:"#interpolated_elixir"},{include:"#escaped_char"}]},{begin:"'",beginCaptures:{"0":{name:"punctuation.definition.string.begin.elixir"}},comment:"single quoted string (allows for interpolation)",end:"'",endCaptures:{"0":{name:"punctuation.definition.string.end.elixir"}},name:"string.quoted.single.elixir",patterns:[{include:"#interpolated_elixir"},{include:"#escaped_char"}]},{begin:"(?>\"\"\")",beginCaptures:{"0":{name:"punctuation.definition.string.begin.elixir"}},comment:"Double-quoted heredocs",end:"^\\s*\"\"\"",endCaptures:{"0":{name:"punctuation.definition.string.end.elixir"}},name:"string.quoted.double.heredoc.elixir",patterns:[{include:"#interpolated_elixir"},{include:"#escaped_char"}]},{begin:"\"",beginCaptures:{"0":{name:"punctuation.definition.string.begin.elixir"}},comment:"double quoted string (allows for interpolation)",end:"\"",endCaptures:{"0":{name:"punctuation.definition.string.end.elixir"}},name:"string.quoted.double.elixir",patterns:[{include:"#interpolated_elixir"},{include:"#escaped_char"}]},{begin:"~[a-z](?>\"\"\")",beginCaptures:{"0":{name:"punctuation.definition.string.begin.elixir"}},comment:"Double-quoted heredocs sigils",end:"^\\s*\"\"\"",endCaptures:{"0":{name:"punctuation.definition.string.end.elixir"}},name:"string.quoted.other.sigil.heredoc.elixir",patterns:[{include:"#interpolated_elixir"},{include:"#escaped_char"}]},{begin:"~[a-z]\\{",beginCaptures:{"0":{name:"punctuation.definition.string.begin.elixir"}},comment:"sigil (allow for interpolation)",end:"\\}[a-z]*",endCaptures:{"0":{name:"punctuation.definition.string.end.elixir"}},name:"string.quoted.other.sigil.elixir",patterns:[{include:"#interpolated_elixir"},{include:"#escaped_char"}]},{begin:"~[a-z]\\[",beginCaptures:{"0":{name:"punctuation.definition.string.begin.elixir"}},comment:"sigil (allow for interpolation)",end:"\\][a-z]*",endCaptures:{"0":{name:"punctuation.definition.string.end.elixir"}},name:"string.quoted.other.sigil.elixir",patterns:[{include:"#interpolated_elixir"},{include:"#escaped_char"}]},{begin:"~[a-z]\\<",beginCaptures:{"0":{name:"punctuation.definition.string.begin.elixir"}},comment:"sigil (allow for interpolation)",end:"\\>[a-z]*",endCaptures:{"0":{name:"punctuation.definition.string.end.elixir"}},name:"string.quoted.other.sigil.elixir",patterns:[{include:"#interpolated_elixir"},{include:"#escaped_char"}]},{begin:"~[a-z]\\(",beginCaptures:{"0":{name:"punctuation.definition.string.begin.elixir"}},comment:"sigil (allow for interpolation)",end:"\\)[a-z]*",endCaptures:{"0":{name:"punctuation.definition.string.end.elixir"}},name:"string.quoted.other.sigil.elixir",patterns:[{include:"#interpolated_elixir"},{include:"#escaped_char"}]},{begin:"~[a-z]([^\\w])",beginCaptures:{"0":{name:"punctuation.definition.string.begin.elixir"}},comment:"sigil (allow for interpolation)",end:"\\1[a-z]*",endCaptures:{"0":{name:"punctuation.definition.string.end.elixir"}},name:"string.quoted.other.sigil.elixir",patterns:[{include:"#interpolated_elixir"},{include:"#escaped_char"}]},{begin:"~[A-Z](?>\"\"\")",beginCaptures:{"0":{name:"punctuation.definition.string.begin.elixir"}},comment:"Double-quoted heredocs sigils",end:"^\\s*\"\"\"",endCaptures:{"0":{name:"punctuation.definition.string.end.elixir"}},name:"string.quoted.other.sigil.heredoc.literal.elixir"},{begin:"~[A-Z]\\{",beginCaptures:{"0":{name:"punctuation.definition.string.begin.elixir"}},comment:"sigil (without interpolation)",end:"\\}[a-z]*",endCaptures:{"0":{name:"punctuation.definition.string.end.elixir"}},name:"string.quoted.other.sigil.literal.elixir"},{begin:"~[A-Z]\\[",beginCaptures:{"0":{name:"punctuation.definition.string.begin.elixir"}},comment:"sigil (without interpolation)",end:"\\][a-z]*",endCaptures:{"0":{name:"punctuation.definition.string.end.elixir"}},name:"string.quoted.other.sigil.literal.elixir"},{begin:"~[A-Z]\\<",beginCaptures:{"0":{name:"punctuation.definition.string.begin.elixir"}},comment:"sigil (without interpolation)",end:"\\>[a-z]*",endCaptures:{"0":{name:"punctuation.definition.string.end.elixir"}},name:"string.quoted.other.sigil.literal.elixir"},{begin:"~[A-Z]\\(",beginCaptures:{"0":{name:"punctuation.definition.string.begin.elixir"}},comment:"sigil (without interpolation)",end:"\\)[a-z]*",endCaptures:{"0":{name:"punctuation.definition.string.end.elixir"}},name:"string.quoted.other.sigil.literal.elixir"},{begin:"~[A-Z]([^\\w])",beginCaptures:{"0":{name:"punctuation.definition.string.begin.elixir"}},comment:"sigil (without interpolation)",end:"\\1[a-z]*",endCaptures:{"0":{name:"punctuation.definition.string.end.elixir"}},name:"string.quoted.other.sigil.literal.elixir"},{captures:{"1":{name:"punctuation.definition.constant.elixir"}},comment:"symbols",match:"(?<!:)(:)(?>[a-zA-Z_][\\w@]*(?>[?!]|=(?![>=]))?|\\<\\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\\-|\\|>|=>|=~|=|/|\\\\\\\\|\\*\\*?|\\.\\.?\\.?|\\.\\.//|>=?|<=?|&&?&?|\\+\\+?|\\-\\-?|\\|\\|?\\|?|\\!|@|\\%?\\{\\}|%|\\[\\]|\\^(\\^\\^)?)",name:"constant.other.symbol.elixir"},{captures:{"1":{name:"punctuation.definition.constant.elixir"}},comment:"symbols",match:"(?>[a-zA-Z_][\\w@]*(?>[?!])?)(:)(?!:)",name:"constant.other.keywords.elixir"},{begin:"(^[ \\t]+)?(?=##)",beginCaptures:{"1":{name:"punctuation.whitespace.comment.leading.elixir"}},end:"(?!#)",patterns:[{begin:"##",beginCaptures:{"0":{name:"punctuation.definition.comment.elixir"}},end:"\\n",name:"comment.line.section.elixir"}]},{begin:"(^[ \\t]+)?(?=#)",beginCaptures:{"1":{name:"punctuation.whitespace.comment.leading.elixir"}},end:"(?!#)",patterns:[{begin:"#",beginCaptures:{"0":{name:"punctuation.definition.comment.elixir"}},end:"\\n",name:"comment.line.number-sign.elixir"}]},{match:"\\b_([^_][\\w]+[?!]?)",name:"comment.unused.elixir"},{match:"\\b_\\b",name:"comment.wildcard.elixir"},{comment:"\n\t\t\tmatches questionmark-letters.\n\n\t\t\texamples (1st alternation = hex):\n\t\t\t?\\x1 ?\\x61\n\n\t\t\texamples (2rd alternation = escaped):\n\t\t\t?\\n ?\\b\n\n\t\t\texamples (3rd alternation = normal):\n\t\t\t?a ?A ?0\n\t\t\t?* ?\" ?(\n\t\t\t?. ?#\n\n\t\t\tthe negative lookbehind prevents against matching\n\t\t\tp(42.tainted?)\n\t\t\t",match:"(?<!\\w)\\?(\\\\(x[0-9A-Fa-f]{1,2}(?![0-9A-Fa-f])\\b|[^xMC])|[^\\s\\\\])",name:"constant.numeric.elixir"},{match:"\\+\\+|\\-\\-|<\\|>",name:"keyword.operator.concatenation.elixir"},{match:"\\|\\>|<~>|<>|<<<|>>>|~>>|<<~|~>|<~|<\\|>",name:"keyword.operator.sigils_1.elixir"},{match:"&&&|&&",name:"keyword.operator.sigils_2.elixir"},{match:"<\\-|\\\\\\\\",name:"keyword.operator.sigils_3.elixir"},{match:"===?|!==?|<=?|>=?",name:"keyword.operator.comparison.elixir"},{match:"(\\|\\|\\||&&&|\\^\\^\\^|<<<|>>>|~~~)",name:"keyword.operator.bitwise.elixir"},{match:"(?<=[ \\t])!+|\\bnot\\b|&&|\\band\\b|\\|\\||\\bor\\b|\\bxor\\b",name:"keyword.operator.logical.elixir"},{match:"(\\*|\\+|\\-|/)",name:"keyword.operator.arithmetic.elixir"},{match:"\\||\\+\\+|\\-\\-|\\*\\*|\\\\\\\\|\\<\\-|\\<\\>|\\<\\<|\\>\\>|\\:\\:|\\.\\.|//|\\|>|~|=>|&",name:"keyword.operator.other.elixir"},{match:"=",name:"keyword.operator.assignment.elixir"},{match:":",name:"punctuation.separator.other.elixir"},{match:"\\;",name:"punctuation.separator.statement.elixir"},{match:",",name:"punctuation.separator.object.elixir"},{match:"\\.",name:"punctuation.separator.method.elixir"},{match:"\\{|\\}",name:"punctuation.section.scope.elixir"},{match:"\\[|\\]",name:"punctuation.section.array.elixir"},{match:"\\(|\\)",name:"punctuation.section.function.elixir"}]},escaped_char:{match:"\\\\(x[\\da-fA-F]{1,2}|.)",name:"constant.character.escaped.elixir"},interpolated_elixir:{begin:"#\\{",beginCaptures:{"0":{name:"punctuation.section.embedded.begin.elixir"}},contentName:"source.elixir",end:"\\}",endCaptures:{"0":{name:"punctuation.section.embedded.end.elixir"}},name:"meta.embedded.line.elixir",patterns:[{include:"#nest_curly_and_self"},{include:"$self"}]},nest_curly_and_self:{patterns:[{begin:"\\{",captures:{"0":{name:"punctuation.section.scope.elixir"}},end:"\\}",patterns:[{include:"#nest_curly_and_self"}]},{include:"$self"}]}},scopeName:"source.elixir",uuid:"D00C06B9-71B2-4FEB-A0E3-37237F579456"};
|
|
|
|
export { elixir_tmLanguage as default };
|