# Rust

environment comment start "//" begin
  include "url.lang"
  include "todo.lang"
end

# Strings.
string delim `(?<!r)b?\"` "\"" escape "\\"
string delim `b?r(#*)\"` "\"" + @{1} multiline

vardef common_escape = `(?:[\\nrt0']|x[a-fA-F0-9]{2})`
vardef unicode_escape = `u\{[a-fA-F0-9]{6}\}`

string = `b?'(?:[^\\']|\\(?:` + $common_escape + `|` + $unicode_escape + `))'`

# Not exactly Rust syntax.
include "number.lang"

# Reserved keywords aren't listed.
keyword = "as|box|break|const|continue|crate|else|enum|extern",
  "false|fn|for|if|impl|in|let|loop",
  "match|mod|move|mut|pub|ref|return",
  "self|static|struct|super|trait|true|type",
  "union|unsafe|use|where|while"

type = "i8|u8|i16|u16|i32|u32|i64|u64|i128|u128|isize|usize",
  "bool|char|Self|f32|f64|&str"

include "symbols.lang"

cbracket = "{|}"

include "function.lang"
