{"name":"Elixir","scopeName":"source.elixir","patterns":[{"begin":"\\b(fn)\\b(?!.*-\u003e)","end":"$","patterns":[{"include":"#core_syntax"}],"beginCaptures":{"1":{"name":"keyword.control.elixir"}}},{"match":"([A-Z]\\w+)\\s*(\\.)\\s*([a-z_]\\w*[!?]?)","captures":{"1":{"name":"entity.name.type.class.elixir"},"2":{"name":"punctuation.separator.method.elixir"},"3":{"name":"entity.name.function.elixir"}}},{"match":"(\\:\\w+)\\s*(\\.)\\s*([_]?\\w*[!?]?)","captures":{"1":{"name":"constant.other.symbol.elixir"},"2":{"name":"punctuation.separator.method.elixir"},"3":{"name":"entity.name.function.elixir"}}},{"match":"(\\|\\\u003e)\\s*([a-z_]\\w*[!?]?)","captures":{"1":{"name":"keyword.operator.other.elixir"},"2":{"name":"entity.name.function.elixir"}}},{"name":"entity.name.function.elixir","match":"\\b[a-z_]\\w*[!?]?(?=\\s*\\.?\\s*\\()"},{"begin":"\\b(fn)\\b(?=.*-\u003e)","end":"(?\u003e(-\u003e)|(when)|(\\)))","patterns":[{"include":"#core_syntax"}],"beginCaptures":{"1":{"name":"keyword.control.elixir"}},"endCaptures":{"1":{"name":"keyword.operator.other.elixir"},"2":{"name":"keyword.control.elixir"},"3":{"name":"punctuation.section.function.elixir"}}},{"include":"#core_syntax"},{"begin":"^(?=.*-\u003e)((?![^\"']*(\"|')[^\"']*-\u003e)|(?=.*-\u003e[^\"']*(\"|')[^\"']*-\u003e))((?!.*\\([^\\)]*-\u003e)|(?=[^\\(\\)]*-\u003e)|(?=\\s*\\(.*\\).*-\u003e))((?!.*\\b(fn)\\b)|(?=.*-\u003e.*\\bfn\\b))","end":"(?\u003e(-\u003e)|(when)|(\\)))","patterns":[{"include":"#core_syntax"}],"beginCaptures":{"1":{"name":"keyword.control.elixir"}},"endCaptures":{"1":{"name":"keyword.operator.other.elixir"},"2":{"name":"keyword.control.elixir"},"3":{"name":"punctuation.section.function.elixir"}}}],"repository":{"core_syntax":{"patterns":[{"name":"meta.module.elixir","begin":"^\\s*(defmodule)\\b","end":"\\b(do)\\b","patterns":[{"name":"entity.other.inherited-class.elixir","match":"\\b[A-Z]\\w*(?=\\.)"},{"name":"entity.name.type.class.elixir","match":"\\b[A-Z]\\w*\\b"}],"beginCaptures":{"1":{"name":"keyword.control.module.elixir"}},"endCaptures":{"1":{"name":"keyword.control.module.elixir"}}},{"name":"meta.protocol_declaration.elixir","begin":"^\\s*(defprotocol)\\b","end":"\\b(do)\\b","patterns":[{"name":"entity.name.type.protocol.elixir","match":"\\b[A-Z]\\w*\\b"}],"beginCaptures":{"1":{"name":"keyword.control.protocol.elixir"}},"endCaptures":{"1":{"name":"keyword.control.protocol.elixir"}}},{"name":"meta.protocol_implementation.elixir","begin":"^\\s*(defimpl)\\b","end":"\\b(do)\\b","patterns":[{"name":"entity.name.type.protocol.elixir","match":"\\b[A-Z]\\w*\\b"}],"beginCaptures":{"1":{"name":"keyword.control.protocol.elixir"}},"endCaptures":{"1":{"name":"keyword.control.protocol.elixir"}}},{"name":"meta.function.public.elixir","begin":"^\\s*(def|defmacro|defdelegate|defguard)\\s+((?\u003e[a-zA-Z_]\\w*(?\u003e\\.|::))?(?\u003e[a-zA-Z_]\\w*(?\u003e[?!]|=(?!\u003e))?|===?|\u003e[\u003e=]?|\u003c=\u003e|\u003c[\u003c=]?|[%\u0026`/\\|]|\\*\\*?|=?~|[-+]@?|\\[\\]=?))((\\()|\\s*)","end":"(\\bdo:)|(\\bdo\\b)|(?=\\s+(def|defn|defmacro|defdelegate|defguard)\\b)","patterns":[{"include":"$self"},{"begin":"\\s(\\\\\\\\)","end":",|\\)|$","patterns":[{"include":"$self"}],"beginCaptures":{"1":{"name":"keyword.operator.other.elixir"}}},{"name":"keyword.control.elixir","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"}],"beginCaptures":{"1":{"name":"keyword.control.module.elixir"},"2":{"name":"entity.name.function.public.elixir"},"4":{"name":"punctuation.section.function.elixir"}},"endCaptures":{"1":{"name":"constant.other.keywords.elixir"},"2":{"name":"keyword.control.module.elixir"}}},{"name":"meta.function.private.elixir","begin":"^\\s*(defp|defnp|defmacrop|defguardp)\\s+((?\u003e[a-zA-Z_]\\w*(?\u003e\\.|::))?(?\u003e[a-zA-Z_]\\w*(?\u003e[?!]|=(?!\u003e))?|===?|\u003e[\u003e=]?|\u003c=\u003e|\u003c[\u003c=]?|[%\u0026`/\\|]|\\*\\*?|=?~|[-+]@?|\\[\\]=?))((\\()|\\s*)","end":"(\\bdo:)|(\\bdo\\b)|(?=\\s+(defp|defmacrop|defguardp)\\b)","patterns":[{"include":"$self"},{"begin":"\\s(\\\\\\\\)","end":",|\\)|$","patterns":[{"include":"$self"}],"beginCaptures":{"1":{"name":"keyword.operator.other.elixir"}}},{"name":"keyword.control.elixir","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"}],"beginCaptures":{"1":{"name":"keyword.control.module.elixir"},"2":{"name":"entity.name.function.private.elixir"},"4":{"name":"punctuation.section.function.elixir"}},"endCaptures":{"1":{"name":"constant.other.keywords.elixir"},"2":{"name":"keyword.control.module.elixir"}}},{"name":"sigil.leex","begin":"\\s*~L\"\"\"","end":"\\s*\"\"\"","patterns":[{"include":"text.elixir"},{"include":"text.html.basic"}]},{"name":"sigil.heex","begin":"\\s*~H\"\"\"","end":"\\s*\"\"\"","patterns":[{"include":"text.elixir"},{"include":"text.html.basic"}]},{"name":"comment.block.documentation.heredoc","begin":"@(module|type)?doc (~[a-z])?\"\"\"","end":"\\s*\"\"\"","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}]},{"name":"comment.block.documentation.heredoc","begin":"@(module|type)?doc ~[A-Z]\"\"\"","end":"\\s*\"\"\""},{"name":"comment.block.documentation.heredoc","begin":"@(module|type)?doc (~[a-z])?'''","end":"\\s*'''","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}]},{"name":"comment.block.documentation.heredoc","begin":"@(module|type)?doc ~[A-Z]'''","end":"\\s*'''"},{"name":"comment.block.documentation.false","match":"@(module|type)?doc false"},{"name":"comment.block.documentation.string","begin":"@(module|type)?doc \"","end":"\"","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}]},{"name":"keyword.control.elixir","match":"(?\u003c!\\.)\\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.operator.elixir","match":"(?\u003c!\\.)\\b(and|not|or|when|xor|in)\\b"},{"name":"entity.name.type.class.elixir","match":"\\b[A-Z]\\w*\\b"},{"name":"constant.language.elixir","match":"\\b(nil|true|false)\\b(?![?!])"},{"name":"variable.language.elixir","match":"\\b(__(CALLER|ENV|MODULE|DIR|STACKTRACE)__)\\b(?![?!])"},{"name":"variable.other.readwrite.module.elixir","match":"(@)[a-zA-Z_]\\w*","captures":{"1":{"name":"punctuation.definition.variable.elixir"}}},{"name":"variable.other.anonymous.elixir","match":"(\u0026)\\d+","captures":{"1":{"name":"punctuation.definition.variable.elixir"}}},{"name":"variable.other.anonymous.elixir","match":"\u0026(?![\u0026])"},{"name":"variable.other.capture.elixir","match":"\\^[a-z_]\\w*","captures":{"1":{"name":"punctuation.definition.variable.elixir"}}},{"name":"constant.numeric.hex.elixir","match":"\\b0x[0-9A-Fa-f](?\u003e_?[0-9A-Fa-f])*\\b"},{"name":"constant.numeric.float.elixir","match":"\\b\\d(?\u003e_?\\d)*(\\.(?![^[:space:][:digit:]])(?\u003e_?\\d)+)([eE][-+]?\\d(?\u003e_?\\d)*)?\\b"},{"name":"constant.numeric.integer.elixir","match":"\\b\\d(?\u003e_?\\d)*\\b"},{"name":"constant.numeric.binary.elixir","match":"\\b0b[01](?\u003e_?[01])*\\b"},{"name":"constant.numeric.octal.elixir","match":"\\b0o[0-7](?\u003e_?[0-7])*\\b"},{"name":"constant.other.symbol.single-quoted.elixir","begin":":'","end":"'","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}],"captures":{"0":{"name":"punctuation.definition.constant.elixir"}}},{"name":"constant.other.symbol.double-quoted.elixir","begin":":\"","end":"\"","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}],"captures":{"0":{"name":"punctuation.definition.constant.elixir"}}},{"name":"string.quoted.single.heredoc.elixir","begin":"(?\u003e''')","end":"^\\s*'''","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}}},{"name":"string.quoted.single.elixir","begin":"'","end":"'","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}}},{"name":"string.quoted.double.heredoc.elixir","begin":"(?\u003e\"\"\")","end":"^\\s*\"\"\"","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}}},{"name":"string.quoted.double.elixir","begin":"\"","end":"\"","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}}},{"name":"string.quoted.other.sigil.heredoc.elixir","begin":"~[a-z](?\u003e\"\"\")","end":"^\\s*\"\"\"","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}}},{"name":"string.quoted.other.sigil.elixir","begin":"~[a-z]\\{","end":"\\}[a-z]*","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}}},{"name":"string.quoted.other.sigil.elixir","begin":"~[a-z]\\[","end":"\\][a-z]*","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}}},{"name":"string.quoted.other.sigil.elixir","begin":"~[a-z]\\\u003c","end":"\\\u003e[a-z]*","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}}},{"name":"string.quoted.other.sigil.elixir","begin":"~[a-z]\\(","end":"\\)[a-z]*","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}}},{"name":"string.quoted.other.sigil.elixir","begin":"~[a-z]([^\\w])","end":"\\1[a-z]*","patterns":[{"include":"#interpolated_elixir"},{"include":"#escaped_char"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}}},{"name":"string.quoted.other.sigil.heredoc.literal.elixir","begin":"~[A-Z](?\u003e\"\"\")","end":"^\\s*\"\"\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}}},{"name":"string.quoted.other.sigil.literal.elixir","begin":"~[A-Z]\\{","end":"\\}[a-z]*","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}}},{"name":"string.quoted.other.sigil.literal.elixir","begin":"~[A-Z]\\[","end":"\\][a-z]*","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}}},{"name":"string.quoted.other.sigil.literal.elixir","begin":"~[A-Z]\\\u003c","end":"\\\u003e[a-z]*","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}}},{"name":"string.quoted.other.sigil.literal.elixir","begin":"~[A-Z]\\(","end":"\\)[a-z]*","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}}},{"name":"string.quoted.other.sigil.literal.elixir","begin":"~[A-Z]([^\\w])","end":"\\1[a-z]*","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.elixir"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.elixir"}}},{"name":"constant.other.symbol.elixir","match":"(?\u003c!:)(:)(?\u003e[a-zA-Z_][\\w@]*(?\u003e[?!]|=(?![\u003e=]))?|\\\u003c\\\u003e|===?|!==?|\u003c\u003c\u003e\u003e|\u003c\u003c\u003c|\u003e\u003e\u003e|~~~|::|\u003c\\-|\\|\u003e|=\u003e|=~|=|/|\\\\\\\\|\\*\\*?|\\.\\.?\\.?|\\.\\.//|\u003e=?|\u003c=?|\u0026\u0026?\u0026?|\\+\\+?|\\-\\-?|\\|\\|?\\|?|\\!|@|\\%?\\{\\}|%|\\[\\]|\\^(\\^\\^)?)","captures":{"1":{"name":"punctuation.definition.constant.elixir"}}},{"name":"constant.other.keywords.elixir","match":"(?\u003e[a-zA-Z_][\\w@]*(?\u003e[?!])?)(:)(?!:)","captures":{"1":{"name":"punctuation.definition.constant.elixir"}}},{"begin":"(^[ \\t]+)?(?=##)","end":"(?!#)","patterns":[{"name":"comment.line.section.elixir","begin":"##","end":"\\n","beginCaptures":{"0":{"name":"punctuation.definition.comment.elixir"}}}],"beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.elixir"}}},{"begin":"(^[ \\t]+)?(?=#)","end":"(?!#)","patterns":[{"name":"comment.line.number-sign.elixir","begin":"#","end":"\\n","beginCaptures":{"0":{"name":"punctuation.definition.comment.elixir"}}}],"beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.elixir"}}},{"name":"comment.unused.elixir","match":"\\b_([^_][\\w]+[?!]?)"},{"name":"comment.wildcard.elixir","match":"\\b_\\b"},{"name":"constant.numeric.elixir","match":"(?\u003c!\\w)\\?(\\\\(x[0-9A-Fa-f]{1,2}(?![0-9A-Fa-f])\\b|[^xMC])|[^\\s\\\\])"},{"name":"keyword.operator.concatenation.elixir","match":"\\+\\+|\\-\\-|\u003c\\|\u003e"},{"name":"keyword.operator.sigils_1.elixir","match":"\\|\\\u003e|\u003c~\u003e|\u003c\u003e|\u003c\u003c\u003c|\u003e\u003e\u003e|~\u003e\u003e|\u003c\u003c~|~\u003e|\u003c~|\u003c\\|\u003e"},{"name":"keyword.operator.sigils_2.elixir","match":"\u0026\u0026\u0026|\u0026\u0026"},{"name":"keyword.operator.sigils_3.elixir","match":"\u003c\\-|\\\\\\\\"},{"name":"keyword.operator.comparison.elixir","match":"===?|!==?|\u003c=?|\u003e=?"},{"name":"keyword.operator.bitwise.elixir","match":"(\\|\\|\\||\u0026\u0026\u0026|\\^\\^\\^|\u003c\u003c\u003c|\u003e\u003e\u003e|~~~)"},{"name":"keyword.operator.logical.elixir","match":"(?\u003c=[ \\t])!+|\\bnot\\b|\u0026\u0026|\\band\\b|\\|\\||\\bor\\b|\\bxor\\b"},{"name":"keyword.operator.arithmetic.elixir","match":"(\\*|\\+|\\-|/)"},{"name":"keyword.operator.other.elixir","match":"\\||\\+\\+|\\-\\-|\\*\\*|\\\\\\\\|\\\u003c\\-|\\\u003c\\\u003e|\\\u003c\\\u003c|\\\u003e\\\u003e|\\:\\:|\\.\\.|//|\\|\u003e|~|=\u003e|\u0026"},{"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","match":"\\(|\\)"}]},"escaped_char":{"name":"constant.character.escaped.elixir","match":"\\\\(x[\\da-fA-F]{1,2}|.)"},"interpolated_elixir":{"name":"meta.embedded.line.elixir","contentName":"source.elixir","begin":"#\\{","end":"\\}","patterns":[{"include":"#nest_curly_and_self"},{"include":"$self"}],"beginCaptures":{"0":{"name":"punctuation.section.embedded.begin.elixir"}},"endCaptures":{"0":{"name":"punctuation.section.embedded.end.elixir"}}},"nest_curly_and_self":{"patterns":[{"begin":"\\{","end":"\\}","patterns":[{"include":"#nest_curly_and_self"}],"captures":{"0":{"name":"punctuation.section.scope.elixir"}}},{"include":"$self"}]}}}