comment The recognition of function definitions and compiler directives (such as module, record and macro definitions) requires that each of the aforementioned constructs must be the first string inside a line (except for whitespace). Also, the function/module/record/macro names must be given unquoted. -- desp fileTypes erl hrl Emakefile emakefile keyEquivalent ^~E name Erlang patterns include #module-directive include #import-export-directive include #record-directive include #define-directive include #macro-directive include #directive include #function include #everything-else repository atom patterns begin (') beginCaptures 1 name punctuation.definition.symbol.begin.erlang end (') endCaptures 1 name punctuation.definition.symbol.end.erlang name constant.other.symbol.quoted.single.erlang patterns captures 1 name punctuation.definition.escape.erlang 3 name punctuation.definition.escape.erlang match (\\)([bdefnrstv\\'"]|(\^)[@-_]|[0-7]{1,3}) name constant.other.symbol.escape.erlang match \\\^?.? name invalid.illegal.atom.erlang match [a-z][a-zA-Z\d@_]*+ name constant.other.symbol.unquoted.erlang binary begin (<<) beginCaptures 1 name punctuation.definition.binary.begin.erlang end (>>) endCaptures 1 name punctuation.definition.binary.end.erlang name meta.structure.binary.erlang patterns captures 1 name punctuation.separator.binary.erlang 2 name punctuation.separator.value-size.erlang match (,)|(:) include #internal-type-specifiers include #everything-else character patterns captures 1 name punctuation.definition.character.erlang 2 name constant.character.escape.erlang 3 name punctuation.definition.escape.erlang 5 name punctuation.definition.escape.erlang match (\$)((\\)([bdefnrstv\\'"]|(\^)[@-_]|[0-7]{1,3})) name constant.character.erlang match \$\\\^?.? name invalid.illegal.character.erlang captures 1 name punctuation.definition.character.erlang match (\$)\S name constant.character.erlang match \$.? name invalid.illegal.character.erlang comment begin (%) beginCaptures 1 name punctuation.definition.comment.erlang end $\n? name comment.line.erlang define-directive patterns begin ^\s*+(-)\s*+(define)\s*+(\()\s*+([a-zA-Z\d@_]++)\s*+(,) beginCaptures 1 name punctuation.section.directive.begin.erlang 2 name keyword.control.directive.define.erlang 3 name punctuation.definition.parameters.begin.erlang 4 name entity.name.function.macro.definition.erlang 5 name punctuation.separator.parameters.erlang end (\))\s*+(\.) endCaptures 1 name punctuation.definition.parameters.end.erlang 2 name punctuation.section.directive.end.erlang name meta.directive.define.erlang patterns include #everything-else begin (?=^\s*+-\s*+define\s*+\(\s*+[a-zA-Z\d@_]++\s*+\() end (\))\s*+(\.) endCaptures 1 name punctuation.definition.parameters.end.erlang 2 name punctuation.section.directive.end.erlang name meta.directive.define.erlang patterns begin ^\s*+(-)\s*+(define)\s*+(\()\s*+([a-zA-Z\d@_]++)\s*+(\() beginCaptures 1 name punctuation.section.directive.begin.erlang 2 name keyword.control.directive.define.erlang 3 name punctuation.definition.parameters.begin.erlang 4 name entity.name.function.macro.definition.erlang 5 name punctuation.definition.parameters.begin.erlang end (\))\s*(,) endCaptures 1 name punctuation.definition.parameters.end.erlang 2 name punctuation.separator.parameters.erlang patterns match , name punctuation.separator.parameters.erlang include #everything-else match \|\||\||:|;|,|\.|-> name punctuation.separator.define.erlang include #everything-else directive patterns begin ^\s*+(-)\s*+([a-z][a-zA-Z\d@_]*+)\s*+(\() beginCaptures 1 name punctuation.section.directive.begin.erlang 2 name keyword.control.directive.erlang 3 name punctuation.definition.parameters.begin.erlang end (\))\s*+(\.) endCaptures 1 name punctuation.definition.parameters.end.erlang 2 name punctuation.section.directive.end.erlang name meta.directive.erlang patterns include #everything-else captures 1 name punctuation.section.directive.begin.erlang 2 name keyword.control.directive.erlang 3 name punctuation.section.directive.end.erlang match ^\s*+(-)\s*+([a-z][a-zA-Z\d@_]*+)\s*+(\.) name meta.directive.erlang everything-else patterns include #comment include #record-usage include #macro-usage include #expression include #keyword include #textual-operator include #function-call include #tuple include #list include #binary include #parenthesized-expression include #character include #number include #atom include #string include #symbolic-operator include #variable expression patterns begin \b(if)\b beginCaptures 1 name keyword.control.if.erlang end \b(end)\b endCaptures 1 name keyword.control.end.erlang name meta.expression.if.erlang patterns include #internal-expression-punctuation include #everything-else begin \b(case)\b beginCaptures 1 name keyword.control.case.erlang end \b(end)\b endCaptures 1 name keyword.control.end.erlang name meta.expression.case.erlang patterns include #internal-expression-punctuation include #everything-else begin \b(receive)\b beginCaptures 1 name keyword.control.receive.erlang end \b(end)\b endCaptures 1 name keyword.control.end.erlang name meta.expression.receive.erlang patterns include #internal-expression-punctuation include #everything-else captures 1 name keyword.control.fun.erlang 3 name entity.name.type.class.module.erlang 4 name punctuation.separator.module-function.erlang 5 name entity.name.function.erlang 6 name punctuation.separator.function-arity.erlang match \b(fun)\s*+(([a-z][a-zA-Z\d@_]*+)\s*+(:)\s*+)?([a-z][a-zA-Z\d@_]*+)\s*(/) begin \b(fun)\b beginCaptures 1 name keyword.control.fun.erlang end \b(end)\b endCaptures 1 name keyword.control.end.erlang name meta.expression.fun.erlang patterns begin (?=\() end (;)|(?=\bend\b) endCaptures 1 name punctuation.separator.clauses.erlang patterns include #internal-function-parts include #everything-else begin \b(try)\b beginCaptures 1 name keyword.control.try.erlang end \b(end)\b endCaptures 1 name keyword.control.end.erlang name meta.expression.try.erlang patterns include #internal-expression-punctuation include #everything-else begin \b(begin)\b beginCaptures 1 name keyword.control.begin.erlang end \b(end)\b endCaptures 1 name keyword.control.end.erlang name meta.expression.begin.erlang patterns include #internal-expression-punctuation include #everything-else begin \b(query)\b beginCaptures 1 name keyword.control.query.erlang end \b(end)\b endCaptures 1 name keyword.control.end.erlang name meta.expression.query.erlang patterns include #everything-else function begin ^\s*+([a-z][a-zA-Z\d@_]*+)\s*+(?=\() beginCaptures 1 name entity.name.function.definition.erlang end (\.) endCaptures 1 name punctuation.terminator.function.erlang name meta.function.erlang patterns captures 1 name entity.name.function.erlang match ^\s*+([a-z][a-zA-Z\d@_]*+)\s*+(?=\() begin (?=\() end (;)|(?=\.) endCaptures 1 name punctuation.separator.clauses.erlang patterns include #parenthesized-expression include #internal-function-parts include #everything-else function-call begin (?=[a-z][a-zA-Z\d@_]*+\s*+(\(|:\s*+[a-z][a-zA-Z\d@_]*+\s*+\()) end (\)) endCaptures 1 name punctuation.definition.parameters.end.erlang name meta.function-call.erlang patterns begin ((erlang)\s*+(:)\s*+)?(is_atom|is_binary|is_constant|is_float|is_function|is_integer|is_list|is_number|is_pid|is_port|is_reference|is_tuple|is_record|abs|element|hd|length|node|round|self|size|tl|trunc)\s*+(\() beginCaptures 2 name entity.name.type.class.module.erlang 3 name punctuation.separator.module-function.erlang 4 name entity.name.function.guard.erlang 5 name punctuation.definition.parameters.begin.erlang end (?=\)) patterns match , name punctuation.separator.parameters.erlang include #everything-else begin (([a-z][a-zA-Z\d@_]*+)\s*+(:)\s*+)?([a-z][a-zA-Z\d@_]*+)\s*+(\() beginCaptures 2 name entity.name.type.class.module.erlang 3 name punctuation.separator.module-function.erlang 4 name entity.name.function.erlang 5 name punctuation.definition.parameters.begin.erlang end (?=\)) patterns match , name punctuation.separator.parameters.erlang include #everything-else import-export-directive patterns begin ^\s*+(-)\s*+(import)\s*+(\()\s*+([a-z][a-zA-Z\d@_]*+)\s*+(,) beginCaptures 1 name punctuation.section.directive.begin.erlang 2 name keyword.control.directive.import.erlang 3 name punctuation.definition.parameters.begin.erlang 4 name entity.name.type.class.module.erlang 5 name punctuation.separator.parameters.erlang end (\))\s*+(\.) endCaptures 1 name punctuation.definition.parameters.end.erlang 2 name punctuation.section.directive.end.erlang name meta.directive.import.erlang patterns include #internal-function-list begin ^\s*+(-)\s*+(export)\s*+(\() beginCaptures 1 name punctuation.section.directive.begin.erlang 2 name keyword.control.directive.export.erlang 3 name punctuation.definition.parameters.begin.erlang end (\))\s*+(\.) endCaptures 1 name punctuation.definition.parameters.end.erlang 2 name punctuation.section.directive.end.erlang name meta.directive.export.erlang patterns include #internal-function-list internal-expression-punctuation captures 1 name punctuation.separator.clause-head-body.erlang 2 name punctuation.separator.clauses.erlang 3 name punctuation.separator.expressions.erlang match (->)|(;)|(,) internal-function-list begin (\[) beginCaptures 1 name punctuation.definition.list.begin.erlang end (\]) endCaptures 1 name punctuation.definition.list.end.erlang name meta.structure.list.function.erlang patterns begin ([a-z][a-zA-Z\d@_]*+)\s*+(/) beginCaptures 1 name entity.name.function.erlang 2 name punctuation.separator.function-arity.erlang end (,)|(?=\]) endCaptures 1 name punctuation.separator.list.erlang patterns include #everything-else include #everything-else internal-function-parts patterns begin (?=\() end (->) endCaptures 1 name punctuation.separator.clause-head-body.erlang patterns begin (\() beginCaptures 1 name punctuation.definition.parameters.begin.erlang end (\)) endCaptures 1 name punctuation.definition.parameters.end.erlang patterns match , name punctuation.separator.parameters.erlang include #everything-else match ,|; name punctuation.separator.guards.erlang include #everything-else match , name punctuation.separator.expressions.erlang include #everything-else internal-record-body begin (\{) beginCaptures 1 name punctuation.definition.class.record.begin.erlang end (?=\}) name meta.structure.record.erlang patterns begin (([a-z][a-zA-Z\d@_]*+)|(_))\s*+(=) beginCaptures 2 name variable.other.field.erlang 3 name variable.language.omitted.field.erlang 4 name keyword.operator.assignment.erlang end (,)|(?=\}) endCaptures 1 name punctuation.separator.class.record.erlang patterns include #everything-else captures 1 name variable.other.field.erlang 2 name punctuation.separator.class.record.erlang match ([a-z][a-zA-Z\d@_]*+)\s*+(,)? include #everything-else internal-type-specifiers begin (/) beginCaptures 1 name punctuation.separator.value-type.erlang end (?=,|:|>>) patterns captures 1 name storage.type.erlang 2 name storage.modifier.signedness.erlang 3 name storage.modifier.endianness.erlang 4 name storage.modifier.unit.erlang 5 name punctuation.separator.type-specifiers.erlang match (integer|float|binary)|(signed|unsigned)|(big|little|native)|(unit)|(-) keyword match \b(after|begin|case|catch|cond|end|fun|if|let|of|query|try|receive|when)\b name keyword.control.erlang list begin (\[) beginCaptures 1 name punctuation.definition.list.begin.erlang end (\]) endCaptures 1 name punctuation.definition.list.end.erlang name meta.structure.list.erlang patterns match \||\|\||, name punctuation.separator.list.erlang include #everything-else macro-directive patterns captures 1 name punctuation.section.directive.begin.erlang 2 name keyword.control.directive.ifdef.erlang 3 name punctuation.definition.parameters.begin.erlang 4 name entity.name.function.macro.erlang 5 name punctuation.definition.parameters.end.erlang 6 name punctuation.section.directive.end.erlang match ^\s*+(-)\s*+(ifdef)\s*+(\()\s*+([a-zA-z\d@_]++)\s*+(\))\s*+(\.) name meta.directive.ifdef.erlang captures 1 name punctuation.section.directive.begin.erlang 2 name keyword.control.directive.ifndef.erlang 3 name punctuation.definition.parameters.begin.erlang 4 name entity.name.function.macro.erlang 5 name punctuation.definition.parameters.end.erlang 6 name punctuation.section.directive.end.erlang match ^\s*+(-)\s*+(ifndef)\s*+(\()\s*+([a-zA-z\d@_]++)\s*+(\))\s*+(\.) name meta.directive.ifndef.erlang captures 1 name punctuation.section.directive.begin.erlang 2 name keyword.control.directive.undef.erlang 3 name punctuation.definition.parameters.begin.erlang 4 name entity.name.function.macro.erlang 5 name punctuation.definition.parameters.end.erlang 6 name punctuation.section.directive.end.erlang match ^\s*+(-)\s*+(undef)\s*+(\()\s*+([a-zA-z\d@_]++)\s*+(\))\s*+(\.) name meta.directive.undef.erlang macro-usage captures 1 name keyword.operator.macro.erlang 2 name entity.name.function.macro.erlang match (\?\??)\s*+([a-zA-Z\d@_]++) name meta.macro-usage.erlang module-directive captures 1 name punctuation.section.directive.begin.erlang 2 name keyword.control.directive.module.erlang 3 name punctuation.definition.parameters.begin.erlang 4 name entity.name.type.class.module.definition.erlang 5 name punctuation.definition.parameters.end.erlang 6 name punctuation.section.directive.end.erlang match ^\s*+(-)\s*+(module)\s*+(\()\s*+([a-z][a-zA-Z\d@_]*+)\s*+(\))\s*+(\.) name meta.directive.module.erlang number begin (?=\d) end (?!\d) patterns captures 1 name punctuation.separator.integer-float.erlang 3 name punctuation.separator.float-exponent.erlang match \d++(\.)\d++(([eE][\+\-])?\d++)? name constant.numeric.float.erlang captures 1 name punctuation.separator.base-integer.erlang match 2(#)[0-1]++ name constant.numeric.integer.binary.erlang captures 1 name punctuation.separator.base-integer.erlang match 3(#)[0-2]++ name constant.numeric.integer.base-3.erlang captures 1 name punctuation.separator.base-integer.erlang match 4(#)[0-3]++ name constant.numeric.integer.base-4.erlang captures 1 name punctuation.separator.base-integer.erlang match 5(#)[0-4]++ name constant.numeric.integer.base-5.erlang captures 1 name punctuation.separator.base-integer.erlang match 6(#)[0-5]++ name constant.numeric.integer.base-6.erlang captures 1 name punctuation.separator.base-integer.erlang match 7(#)[0-6]++ name constant.numeric.integer.base-7.erlang captures 1 name punctuation.separator.base-integer.erlang match 8(#)[0-7]++ name constant.numeric.integer.octal.erlang captures 1 name punctuation.separator.base-integer.erlang match 9(#)[0-8]++ name constant.numeric.integer.base-9.erlang captures 1 name punctuation.separator.base-integer.erlang match 10(#)\d++ name constant.numeric.integer.decimal.erlang captures 1 name punctuation.separator.base-integer.erlang match 11(#)[\daA]++ name constant.numeric.integer.base-11.erlang captures 1 name punctuation.separator.base-integer.erlang match 12(#)[\da-bA-B]++ name constant.numeric.integer.base-12.erlang captures 1 name punctuation.separator.base-integer.erlang match 13(#)[\da-cA-C]++ name constant.numeric.integer.base-13.erlang captures 1 name punctuation.separator.base-integer.erlang match 14(#)[\da-dA-D]++ name constant.numeric.integer.base-14.erlang captures 1 name punctuation.separator.base-integer.erlang match 15(#)[\da-eA-E]++ name constant.numeric.integer.base-15.erlang captures 1 name punctuation.separator.base-integer.erlang match 16(#)\h++ name constant.numeric.integer.hexadecimal.erlang captures 1 name punctuation.separator.base-integer.erlang match 17(#)[\da-gA-G]++ name constant.numeric.integer.base-17.erlang captures 1 name punctuation.separator.base-integer.erlang match 18(#)[\da-hA-H]++ name constant.numeric.integer.base-18.erlang captures 1 name punctuation.separator.base-integer.erlang match 19(#)[\da-iA-I]++ name constant.numeric.integer.base-19.erlang captures 1 name punctuation.separator.base-integer.erlang match 20(#)[\da-jA-J]++ name constant.numeric.integer.base-20.erlang captures 1 name punctuation.separator.base-integer.erlang match 21(#)[\da-kA-K]++ name constant.numeric.integer.base-21.erlang captures 1 name punctuation.separator.base-integer.erlang match 22(#)[\da-lA-L]++ name constant.numeric.integer.base-22.erlang captures 1 name punctuation.separator.base-integer.erlang match 23(#)[\da-mA-M]++ name constant.numeric.integer.base-23.erlang captures 1 name punctuation.separator.base-integer.erlang match 24(#)[\da-nA-N]++ name constant.numeric.integer.base-24.erlang captures 1 name punctuation.separator.base-integer.erlang match 25(#)[\da-oA-O]++ name constant.numeric.integer.base-25.erlang captures 1 name punctuation.separator.base-integer.erlang match 26(#)[\da-pA-P]++ name constant.numeric.integer.base-26.erlang captures 1 name punctuation.separator.base-integer.erlang match 27(#)[\da-qA-Q]++ name constant.numeric.integer.base-27.erlang captures 1 name punctuation.separator.base-integer.erlang match 28(#)[\da-rA-R]++ name constant.numeric.integer.base-28.erlang captures 1 name punctuation.separator.base-integer.erlang match 29(#)[\da-sA-S]++ name constant.numeric.integer.base-29.erlang captures 1 name punctuation.separator.base-integer.erlang match 30(#)[\da-tA-T]++ name constant.numeric.integer.base-30.erlang captures 1 name punctuation.separator.base-integer.erlang match 31(#)[\da-uA-U]++ name constant.numeric.integer.base-31.erlang captures 1 name punctuation.separator.base-integer.erlang match 32(#)[\da-vA-V]++ name constant.numeric.integer.base-32.erlang captures 1 name punctuation.separator.base-integer.erlang match 33(#)[\da-wA-W]++ name constant.numeric.integer.base-33.erlang captures 1 name punctuation.separator.base-integer.erlang match 34(#)[\da-xA-X]++ name constant.numeric.integer.base-34.erlang captures 1 name punctuation.separator.base-integer.erlang match 35(#)[\da-yA-Y]++ name constant.numeric.integer.base-35.erlang captures 1 name punctuation.separator.base-integer.erlang match 36(#)[\da-zA-Z]++ name constant.numeric.integer.base-36.erlang match \d++#[\da-zA-Z]++ name invalid.illegal.integer.erlang match \d++ name constant.numeric.integer.decimal.erlang parenthesized-expression begin (\() beginCaptures 1 name punctuation.section.expression.begin.erlang end (\)) endCaptures 1 name punctuation.section.expression.end.erlang name meta.expression.parenthesized patterns include #everything-else record-directive begin ^\s*+(-)\s*+(record)\s*+(\()\s*+([a-z][a-zA-Z\d@_]*+)\s*+(,) beginCaptures 1 name punctuation.section.directive.begin.erlang 2 name keyword.control.directive.import.erlang 3 name punctuation.definition.parameters.begin.erlang 4 name entity.name.type.class.record.definition.erlang 5 name punctuation.separator.parameters.erlang end ((\}))\s*+(\))\s*+(\.) endCaptures 1 name meta.structure.record.erlang 2 name punctuation.definition.class.record.end.erlang 3 name punctuation.definition.parameters.end.erlang 4 name punctuation.section.directive.end.erlang name meta.directive.record.erlang patterns include #internal-record-body record-usage patterns captures 1 name keyword.operator.record.erlang 2 name entity.name.type.class.record.erlang 3 name punctuation.separator.record-field.erlang 4 name variable.other.field.erlang match (#)\s*+([a-z][a-zA-Z\d@_]*+)\s*+(\.)\s*+([a-z][a-zA-Z\d@_]*+) name meta.record-usage.erlang begin (#)\s*+([a-z][a-zA-Z\d@_]*+) beginCaptures 1 name keyword.operator.record.erlang 2 name entity.name.type.class.record.erlang end ((\})) endCaptures 1 name meta.structure.record.erlang 2 name punctuation.definition.class.record.end.erlang name meta.record-usage.erlang patterns include #internal-record-body string begin (") beginCaptures 1 name punctuation.definition.string.begin.erlang end (") endCaptures 1 name punctuation.definition.string.end.erlang name string.quoted.double.erlang patterns captures 1 name punctuation.definition.escape.erlang 3 name punctuation.definition.escape.erlang match (\\)([bdefnrstv\\'"]|(\^)[@-_]|[0-7]{1,3}) name constant.character.escape.erlang match \\\^?.? name invalid.illegal.string.erlang captures 1 name punctuation.definition.placeholder.erlang 10 name punctuation.separator.placeholder-parts.erlang 12 name punctuation.separator.placeholder-parts.erlang 3 name punctuation.separator.placeholder-parts.erlang 4 name punctuation.separator.placeholder-parts.erlang 6 name punctuation.separator.placeholder-parts.erlang 8 name punctuation.separator.placeholder-parts.erlang match (~)((\-)?\d++|(\*))?((\.)(\d++|(\*)))?((\.)((\*)|.))?[~cfegswpWPBX#bx\+ni] name constant.other.placeholder.erlang captures 1 name punctuation.definition.placeholder.erlang 2 name punctuation.separator.placeholder-parts.erlang match (~)(\*)?(\d++)?[~du\-#fsacl] name constant.other.placeholder.erlang match ~.? name invalid.illegal.string.erlang symbolic-operator match \+\+|\+|--|-|\*|/=|/|=/=|=:=|==|=<|=|<-|<|>=|>|! name keyword.operator.symbolic.erlang textual-operator match \b(andalso|band|and|bxor|xor|bor|orelse|or|bnot|not|bsl|bsr|div|rem)\b name keyword.operator.textual.erlang tuple begin (\{) beginCaptures 1 name punctuation.definition.tuple.begin.erlang end (\}) endCaptures 1 name punctuation.definition.tuple.end.erlang name meta.structure.tuple.erlang patterns match , name punctuation.separator.tuple.erlang include #everything-else variable captures 1 name variable.other.erlang 2 name variable.language.omitted.erlang match (_[a-zA-Z\d@_]++|[A-Z][a-zA-Z\d@_]*+)|(_) scopeName source.erlang uuid 58EA597D-5158-4BF7-9FB2-B05135D1E166