From 37f7a4edbfb77e746ecd767e348d1279effa9cf8 Mon Sep 17 00:00:00 2001 From: Wilfred Hughes Date: Tue, 22 Jan 2019 00:45:55 +0000 Subject: [PATCH] Crude rust support --- src/language.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/language.rs b/src/language.rs index 32e290f28..1257dc558 100644 --- a/src/language.rs +++ b/src/language.rs @@ -18,14 +18,18 @@ pub enum Language { JavaScript, Lisp, Css, + Rust, } impl Language { + /// Given a human friendly name, return the corresponding enum + /// variant. pub fn from(s: &str) -> Option { match s { "css" => Some(Language::Css), "js" => Some(Language::JavaScript), "lisp" => Some(Language::Lisp), + "rust" => Some(Language::Rust), _ => None } } @@ -38,6 +42,8 @@ pub fn infer_language(filename: &str) -> Option { return Some(Language::Lisp); } else if filename.ends_with(".css") { return Some(Language::Css); + } else if filename.ends_with(".rs") { + return Some(Language::Rust); } None } @@ -47,6 +53,10 @@ pub fn language_lexer(lang: Language) -> Regex { Language::JavaScript => { Regex::new(r#"//.+|[a-zA-Z0-9_]+|"(\\.|[^"\\])*"|[^ \t\n]"#).unwrap() } + Language::Rust => { + // TODO: proper raw string literal lexing. + Regex::new(r#"//.+|[a-zA-Z0-9_]+!?|"(\\.|[^"\\])*"|[^ \t\n]"#).unwrap() + } Language::Lisp => Regex::new(r#";.+|[a-zA-Z0-9_*!.-]+|"(\\.|[^"\\])*"|[^ \t\n]"#).unwrap(), Language::Css => { Regex::new(r#"(?s)/\*.*?\*/|[a-zA-Z0-9_*!.-]+|"(\\.|[^"\\])*"|[^ \t\n]"#).unwrap()