| { |
| "name": "Rust", |
| "scopeName": "source.rust", |
| "patterns": [ |
| { |
| "comment": "Implementation", |
| "begin": "\\b(impl)\\b", |
| "end": "\\{", |
| "beginCaptures": { |
| "1": { |
| "name": "storage.type.rust" |
| } |
| }, |
| "patterns": [ |
| { |
| "include": "#block_comment" |
| }, |
| { |
| "include": "#line_comment" |
| }, |
| { |
| "include": "#sigils" |
| }, |
| { |
| "include": "#mut" |
| }, |
| { |
| "include": "#dyn" |
| }, |
| { |
| "include": "#ref_lifetime" |
| }, |
| { |
| "include": "#core_types" |
| }, |
| { |
| "include": "#core_marker" |
| }, |
| { |
| "include": "#core_traits" |
| }, |
| { |
| "include": "#std_types" |
| }, |
| { |
| "include": "#std_traits" |
| }, |
| { |
| "include": "#type_params" |
| }, |
| { |
| "include": "#where" |
| }, |
| { |
| "name": "storage.type.rust", |
| "match": "\\bfor\\b" |
| }, |
| { |
| "include": "#type" |
| } |
| ] |
| }, |
| { |
| "include": "#block_doc_comment" |
| }, |
| { |
| "include": "#block_comment" |
| }, |
| { |
| "include": "#line_doc_comment" |
| }, |
| { |
| "include": "#line_comment" |
| }, |
| { |
| "comment": "Attribute", |
| "name": "meta.attribute.rust", |
| "begin": "#\\!?\\[(\\w*)", |
| "end": "\\]", |
| "captures": { |
| "1": { |
| "name": "entity.name.function.attribute.rust" |
| } |
| }, |
| "patterns": [ |
| { |
| "include": "#string_literal" |
| }, |
| { |
| "include": "#block_doc_comment" |
| }, |
| { |
| "include": "#block_comment" |
| }, |
| { |
| "include": "#line_doc_comment" |
| }, |
| { |
| "include": "#line_comment" |
| } |
| ] |
| }, |
| { |
| "comment": "Single-quote string literal (character)", |
| "name": "string.quoted.single.rust", |
| "match": "b?'([^'\\\\]|\\\\(x[0-9A-Fa-f]{2}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.))'" |
| }, |
| { |
| "include": "#string_literal" |
| }, |
| { |
| "include": "#raw_string_literal" |
| }, |
| { |
| "comment": "Floating point literal (fraction)", |
| "name": "constant.numeric.float.rust", |
| "match": "\\b[0-9][0-9_]*\\.[0-9][0-9_]*([eE][+-]?[0-9_]+)?(f32|f64)?\\b" |
| }, |
| { |
| "comment": "Floating point literal (exponent)", |
| "name": "constant.numeric.float.rust", |
| "match": "\\b[0-9][0-9_]*(\\.[0-9][0-9_]*)?[eE][+-]?[0-9_]+(f32|f64)?\\b" |
| }, |
| { |
| "comment": "Floating point literal (typed)", |
| "name": "constant.numeric.float.rust", |
| "match": "\\b[0-9][0-9_]*(\\.[0-9][0-9_]*)?([eE][+-]?[0-9_]+)?(f32|f64)\\b" |
| }, |
| { |
| "comment": "Integer literal (decimal)", |
| "name": "constant.numeric.integer.decimal.rust", |
| "match": "\\b[0-9][0-9_]*([ui](8|16|32|64|128|s|size))?\\b" |
| }, |
| { |
| "comment": "Integer literal (hexadecimal)", |
| "name": "constant.numeric.integer.hexadecimal.rust", |
| "match": "\\b0x[a-fA-F0-9_]+([ui](8|16|32|64|128|s|size))?\\b" |
| }, |
| { |
| "comment": "Integer literal (octal)", |
| "name": "constant.numeric.integer.octal.rust", |
| "match": "\\b0o[0-7_]+([ui](8|16|32|64|128|s|size))?\\b" |
| }, |
| { |
| "comment": "Integer literal (binary)", |
| "name": "constant.numeric.integer.binary.rust", |
| "match": "\\b0b[01_]+([ui](8|16|32|64|128|s|size))?\\b" |
| }, |
| { |
| "comment": "Static storage modifier", |
| "name": "storage.modifier.static.rust", |
| "match": "\\bstatic\\b" |
| }, |
| { |
| "comment": "Boolean constant", |
| "name": "constant.language.boolean.rust", |
| "match": "\\b(true|false)\\b" |
| }, |
| { |
| "comment": "Control keyword", |
| "name": "keyword.control.rust", |
| "match": "\\b(async|await|break|continue|else|if|in|for|loop|match|return|try|while)\\b" |
| }, |
| { |
| "comment": "Keyword", |
| "name": "keyword.other.rust", |
| "match": "\\b(crate|extern|mod|let|ref|use|super|move|as)\\b" |
| }, |
| { |
| "comment": "Reserved keyword", |
| "name": "invalid.deprecated.rust", |
| "match": "\\b(abstract|alignof|become|do|final|macro|offsetof|override|priv|proc|pure|sizeof|typeof|virtual|yield)\\b" |
| }, |
| { |
| "include": "#unsafe" |
| }, |
| { |
| "include": "#sigils" |
| }, |
| { |
| "include": "#self" |
| }, |
| { |
| "include": "#mut" |
| }, |
| { |
| "include": "#dyn" |
| }, |
| { |
| "include": "#impl" |
| }, |
| { |
| "include": "#box" |
| }, |
| { |
| "include": "#lifetime" |
| }, |
| { |
| "include": "#ref_lifetime" |
| }, |
| { |
| "include": "#const" |
| }, |
| { |
| "include": "#pub" |
| }, |
| { |
| "comment": "Miscellaneous operator", |
| "name": "keyword.operator.misc.rust", |
| "match": "(=>|::|\\?)" |
| }, |
| { |
| "comment": "Comparison operator", |
| "name": "keyword.operator.comparison.rust", |
| "match": "(&&|\\|\\||==|!=)" |
| }, |
| { |
| "comment": "Assignment operator", |
| "name": "keyword.operator.assignment.rust", |
| "match": "(\\+=|-=|/=|\\*=|%=|\\^=|&=|\\|=|<<=|>>=|=)" |
| }, |
| { |
| "comment": "Arithmetic operator", |
| "name": "keyword.operator.arithmetic.rust", |
| "match": "(!|\\+|-|/|\\*|%|\\^|&|\\||<<|>>)" |
| }, |
| { |
| "comment": "Comparison operator (second group because of regex precedence)", |
| "name": "keyword.operator.comparison.rust", |
| "match": "(<=|>=|<|>)" |
| }, |
| { |
| "include": "#core_types" |
| }, |
| { |
| "include": "#core_vars" |
| }, |
| { |
| "include": "#core_marker" |
| }, |
| { |
| "include": "#core_traits" |
| }, |
| { |
| "include": "#std_types" |
| }, |
| { |
| "include": "#std_traits" |
| }, |
| { |
| "comment": "Built-in macro", |
| "name": "support.function.builtin.rust", |
| "match": "\\b(macro_rules|compile_error|format_args|env|option_env|concat_idents|concat|line|column|file|stringify|include|include_str|include_bytes|module_path|cfg)!" |
| }, |
| { |
| "comment": "Core macro", |
| "name": "support.function.core.rust", |
| "match": "\\b(panic|assert|assert_eq|assert_ne|debug_assert|debug_assert_eq|debug_assert_ne|try|write|writeln|unreachable|unimplemented)!" |
| }, |
| { |
| "comment": "Standard library macro", |
| "name": "support.function.std.rust", |
| "match": "\\b(format|print|println|eprint|eprintln|select|vec)!" |
| }, |
| { |
| "comment": "Logging macro", |
| "name": "support.function.log.rust", |
| "match": "\\b(log|error|warn|info|debug|trace|log_enabled)!" |
| }, |
| { |
| "comment": "Invokation of a macro", |
| "match": "\\b([a-zA-Z_][a-zA-Z0-9_]*\\!)\\s*[({\\[]", |
| "captures": { |
| "1": { |
| "name": "entity.name.function.macro.rust" |
| } |
| } |
| }, |
| { |
| "comment": "Function call", |
| "match": "\\b([A-Za-z][A-Za-z0-9_]*|_[A-Za-z0-9_]+)\\s*\\(", |
| "captures": { |
| "1": { |
| "name": "entity.name.function.rust" |
| } |
| } |
| }, |
| { |
| "comment": "Function call with type parameters", |
| "begin": "\\b([A-Za-z][A-Za-z0-9_]*|_[A-Za-z0-9_]+)\\s*(::)(?=\\s*<.*>\\s*\\()", |
| "end": "\\(", |
| "captures": { |
| "1": { |
| "name": "entity.name.function.rust" |
| }, |
| "2": { |
| "name": "keyword.operator.misc.rust" |
| } |
| }, |
| "patterns": [ |
| { |
| "include": "#type_params" |
| } |
| ] |
| }, |
| { |
| "comment": "Function definition", |
| "begin": "\\b(fn)\\s+([A-Za-z][A-Za-z0-9_]*|_[A-Za-z0-9_]+)", |
| "end": "[\\{;]", |
| "beginCaptures": { |
| "1": { |
| "name": "keyword.other.fn.rust" |
| }, |
| "2": { |
| "name": "entity.name.function.rust" |
| } |
| }, |
| "patterns": [ |
| { |
| "include": "#block_comment" |
| }, |
| { |
| "include": "#line_comment" |
| }, |
| { |
| "include": "#sigils" |
| }, |
| { |
| "include": "#self" |
| }, |
| { |
| "include": "#mut" |
| }, |
| { |
| "include": "#dyn" |
| }, |
| { |
| "include": "#impl" |
| }, |
| { |
| "include": "#ref_lifetime" |
| }, |
| { |
| "include": "#core_types" |
| }, |
| { |
| "include": "#core_marker" |
| }, |
| { |
| "include": "#core_traits" |
| }, |
| { |
| "include": "#std_types" |
| }, |
| { |
| "include": "#std_traits" |
| }, |
| { |
| "include": "#type_params" |
| }, |
| { |
| "include": "#const" |
| }, |
| { |
| "include": "#where" |
| }, |
| { |
| "include": "#unsafe" |
| }, |
| { |
| "comment": "Function arguments", |
| "match": "\bfn\b", |
| "name": "keyword.other.fn.rust" |
| } |
| ] |
| }, |
| { |
| "comment": "Type declaration", |
| "begin": "\\b(enum|struct|trait|union)\\s+([a-zA-Z_][a-zA-Z0-9_]*)", |
| "end": "[\\{\\(;]", |
| "beginCaptures": { |
| "1": { |
| "name": "storage.type.rust" |
| }, |
| "2": { |
| "name": "entity.name.type.rust" |
| } |
| }, |
| "patterns": [ |
| { |
| "include": "#block_comment" |
| }, |
| { |
| "include": "#line_comment" |
| }, |
| { |
| "include": "#core_traits" |
| }, |
| { |
| "include": "#std_traits" |
| }, |
| { |
| "include": "#type_params" |
| }, |
| { |
| "include": "#core_types" |
| }, |
| { |
| "include": "#pub" |
| }, |
| { |
| "include": "#where" |
| } |
| ] |
| }, |
| { |
| "comment": "Type alias", |
| "begin": "\\b(type)\\s+([a-zA-Z_][a-zA-Z0-9_]*)", |
| "end": ";", |
| "beginCaptures": { |
| "1": { |
| "name": "storage.type.rust" |
| }, |
| "2": { |
| "name": "entity.name.type.rust" |
| } |
| }, |
| "patterns": [ |
| { |
| "include": "#block_comment" |
| }, |
| { |
| "include": "#line_comment" |
| }, |
| { |
| "include": "#sigils" |
| }, |
| { |
| "include": "#mut" |
| }, |
| { |
| "include": "#dyn" |
| }, |
| { |
| "include": "#impl" |
| }, |
| { |
| "include": "#lifetime" |
| }, |
| { |
| "include": "#ref_lifetime" |
| }, |
| { |
| "include": "#core_types" |
| }, |
| { |
| "include": "#core_marker" |
| }, |
| { |
| "include": "#core_traits" |
| }, |
| { |
| "include": "#std_types" |
| }, |
| { |
| "include": "#std_traits" |
| }, |
| { |
| "include": "#type_params" |
| } |
| ] |
| } |
| ], |
| "repository": { |
| "block_doc_comment": { |
| "comment": "Block documentation comment", |
| "name": "comment.block.documentation.rust", |
| "begin": "/\\*[\\*!](?![\\*/])", |
| "end": "\\*/", |
| "patterns": [ |
| { |
| "include": "#block_doc_comment" |
| }, |
| { |
| "include": "#block_comment" |
| } |
| ] |
| }, |
| "block_comment": { |
| "comment": "Block comment", |
| "name": "comment.block.rust", |
| "begin": "/\\*", |
| "end": "\\*/", |
| "patterns": [ |
| { |
| "include": "#block_doc_comment" |
| }, |
| { |
| "include": "#block_comment" |
| } |
| ] |
| }, |
| "line_doc_comment": { |
| "comment": "Single-line documentation comment", |
| "name": "comment.line.documentation.rust", |
| "begin": "//[!/](?=[^/])", |
| "end": "$" |
| }, |
| "line_comment": { |
| "comment": "Single-line comment", |
| "name": "comment.line.double-slash.rust", |
| "begin": "//", |
| "end": "$" |
| }, |
| "escaped_character": { |
| "name": "constant.character.escape.rust", |
| "match": "\\\\(x[0-9A-Fa-f]{2}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)" |
| }, |
| "string_literal": { |
| "comment": "Double-quote string literal", |
| "name": "string.quoted.double.rust", |
| "begin": "b?\"", |
| "end": "\"", |
| "patterns": [ |
| { |
| "include": "#escaped_character" |
| } |
| ] |
| }, |
| "raw_string_literal": { |
| "comment": "Raw double-quote string literal", |
| "name": "string.quoted.double.raw.rust", |
| "begin": "b?r(#*)\"", |
| "end": "\"\\1" |
| }, |
| "sigils": { |
| "comment": "Sigil", |
| "name": "keyword.operator.sigil.rust", |
| "match": "[&*](?=[a-zA-Z0-9_\\(\\[\\|\\\"]+)" |
| }, |
| "self": { |
| "comment": "Self variable", |
| "name": "variable.language.rust", |
| "match": "\\bself\\b" |
| }, |
| "mut": { |
| "comment": "Mutable storage modifier", |
| "name": "storage.modifier.mut.rust", |
| "match": "\\bmut\\b" |
| }, |
| "dyn": { |
| "comment": "Dynamic modifier", |
| "name": "storage.modifier.dyn.rust", |
| "match": "\\bdyn\\b" |
| }, |
| "impl": { |
| "comment": "Existential type modifier", |
| "name": "storage.modifier.impl.rust", |
| "match": "\\bimpl\\b" |
| }, |
| "box": { |
| "comment": "Box storage modifier", |
| "name": "storage.modifier.box.rust", |
| "match": "\\bbox\\b" |
| }, |
| "const": { |
| "comment": "Const storage modifier", |
| "name": "storage.modifier.const.rust", |
| "match": "\\bconst\\b" |
| }, |
| "pub": { |
| "comment": "Visibility modifier", |
| "name": "storage.modifier.visibility.rust", |
| "match": "\\bpub\\b" |
| }, |
| "unsafe": { |
| "comment": "Unsafe code keyword", |
| "name": "keyword.other.unsafe.rust", |
| "match": "\\bunsafe\\b" |
| }, |
| "where": { |
| "comment": "Generic where clause", |
| "name": "keyword.other.where.rust", |
| "match": "\\bwhere\\b" |
| }, |
| "lifetime": { |
| "comment": "Named lifetime", |
| "name": "storage.modifier.lifetime.rust", |
| "match": "'([a-zA-Z_][a-zA-Z0-9_]*)\\b" |
| }, |
| "ref_lifetime": { |
| "comment": "Reference with named lifetime", |
| "match": "(&)('[a-zA-Z_][a-zA-Z0-9_]*)\\b", |
| "captures": { |
| "1": { |
| "name": "keyword.operator.sigil.rust" |
| }, |
| "2": { |
| "name": "storage.modifier.lifetime.rust" |
| } |
| } |
| }, |
| "core_types": { |
| "comment": "Built-in/core type", |
| "name": "support.type.primitive.rust", |
| "match": "\\b(bool|char|usize|isize|u8|u16|u32|u64|u128|i8|i16|i32|i64|i128|f32|f64|str|Self)\\b" |
| }, |
| "core_vars": { |
| "comment": "Core type variant", |
| "name": "support.constant.core.rust", |
| "match": "\\b(Some|None|Ok|Err)\\b" |
| }, |
| "core_marker": { |
| "comment": "Core trait (marker)", |
| "name": "entity.name.type.marker.rust", |
| "match": "\\b(Copy|Send|Sized|Sync)\\b" |
| }, |
| "core_traits": { |
| "comment": "Core trait", |
| "name": "entity.name.type.core.rust", |
| "match": "\\b(Drop|Fn|FnMut|FnOnce|Clone|PartialEq|PartialOrd|Eq|Ord|AsRef|AsMut|Into|From|Default|Iterator|Extend|IntoIterator|DoubleEndedIterator|ExactSizeIterator)\\b" |
| }, |
| "std_types": { |
| "comment": "Standard library type", |
| "name": "entity.name.type.class.std.rust", |
| "match": "\\b(Box|String|Vec|Path|PathBuf|Option|Result)\\b" |
| }, |
| "std_traits": { |
| "comment": "Standard library trait", |
| "name": "entity.name.type.std.rust", |
| "match": "\\b(ToOwned|ToString)\\b" |
| }, |
| "type": { |
| "comment": "A type", |
| "name": "entity.name.type.rust", |
| "match": "\\b([A-Za-z][_A-Za-z0-9]*|_[_A-Za-z0-9]+)\\b" |
| }, |
| "type_params": { |
| "comment": "Type parameters", |
| "name": "meta.type_params.rust", |
| "begin": "<(?![=<])", |
| "end": "(?<![-])>", |
| "patterns": [ |
| { |
| "include": "#block_comment" |
| }, |
| { |
| "include": "#line_comment" |
| }, |
| { |
| "include": "#sigils" |
| }, |
| { |
| "include": "#mut" |
| }, |
| { |
| "include": "#dyn" |
| }, |
| { |
| "include": "#impl" |
| }, |
| { |
| "include": "#lifetime" |
| }, |
| { |
| "include": "#core_types" |
| }, |
| { |
| "include": "#core_marker" |
| }, |
| { |
| "include": "#core_traits" |
| }, |
| { |
| "include": "#std_types" |
| }, |
| { |
| "include": "#std_traits" |
| }, |
| { |
| "include": "#type_params" |
| } |
| ] |
| } |
| } |
| } |