diff --git a/src/syntax/ast.rs b/src/syntax/ast.rs index 9b76d2927..73aa41e1e 100644 --- a/src/syntax/ast.rs +++ b/src/syntax/ast.rs @@ -427,6 +427,8 @@ node! { impl Shorthand { /// A list of all shorthands. pub const LIST: &[(&'static str, char)] = &[ + // Both. + ("...", '…'), // Text only. ("~", '\u{00A0}'), ("--", '\u{2013}'), @@ -437,25 +439,39 @@ impl Shorthand { ("'", '′'), ("*", '∗'), ("!=", '≠'), + (":=", '≔'), + ("::=", '⩴'), + ("=:", '≕'), ("<<", '≪'), ("<<<", '⋘'), (">>", '≫'), (">>>", '⋙'), ("<=", '≤'), (">=", '≥'), - ("<-", '←'), ("->", '→'), - ("=>", '⇒'), + ("-->", '⟶'), ("|->", '↦'), - ("|=>", '⤇'), + (">->", '↣'), + ("->>", '↠'), + ("<-", '←'), + ("<--", '⟵'), + ("<-<", '↢'), + ("<<-", '↞'), ("<->", '↔'), + ("<-->", '⟷'), + ("~>", '⇝'), + ("~~>", '⟿'), + ("<~", '⇜'), + ("<~~", '⬳'), + ("=>", '⇒'), + ("|=>", '⤇'), + ("==>", '⟹'), + ("<==", '⟸'), ("<=>", '⇔'), - (":=", '≔'), + ("<==>", '⟺'), ("[|", '⟦'), ("|]", '⟧'), ("||", '‖'), - // Both. - ("...", '…'), ]; /// Get the shorthanded character. diff --git a/src/syntax/lexer.rs b/src/syntax/lexer.rs index 3fea3fe1d..90a10f522 100644 --- a/src/syntax/lexer.rs +++ b/src/syntax/lexer.rs @@ -375,25 +375,41 @@ impl Lexer<'_> { '\\' => self.backslash(), '"' => self.string(), + '-' if self.s.eat_if(">>") => SyntaxKind::Shorthand, + '-' if self.s.eat_if('>') => SyntaxKind::Shorthand, + '-' if self.s.eat_if("->") => SyntaxKind::Shorthand, + ':' if self.s.eat_if('=') => SyntaxKind::Shorthand, + ':' if self.s.eat_if(":=") => SyntaxKind::Shorthand, + '!' if self.s.eat_if('=') => SyntaxKind::Shorthand, '.' if self.s.eat_if("..") => SyntaxKind::Shorthand, + '[' if self.s.eat_if('|') => SyntaxKind::Shorthand, + '<' if self.s.eat_if("==>") => SyntaxKind::Shorthand, + '<' if self.s.eat_if("-->") => SyntaxKind::Shorthand, + '<' if self.s.eat_if("--") => SyntaxKind::Shorthand, + '<' if self.s.eat_if("-<") => SyntaxKind::Shorthand, + '<' if self.s.eat_if("->") => SyntaxKind::Shorthand, + '<' if self.s.eat_if("<-") => SyntaxKind::Shorthand, + '<' if self.s.eat_if("<<") => SyntaxKind::Shorthand, + '<' if self.s.eat_if("=>") => SyntaxKind::Shorthand, + '<' if self.s.eat_if("==") => SyntaxKind::Shorthand, + '<' if self.s.eat_if("~~") => SyntaxKind::Shorthand, + '<' if self.s.eat_if('=') => SyntaxKind::Shorthand, + '<' if self.s.eat_if('<') => SyntaxKind::Shorthand, + '<' if self.s.eat_if('-') => SyntaxKind::Shorthand, + '<' if self.s.eat_if('~') => SyntaxKind::Shorthand, + '>' if self.s.eat_if("->") => SyntaxKind::Shorthand, + '>' if self.s.eat_if(">>") => SyntaxKind::Shorthand, + '=' if self.s.eat_if("=>") => SyntaxKind::Shorthand, + '=' if self.s.eat_if('>') => SyntaxKind::Shorthand, + '=' if self.s.eat_if(':') => SyntaxKind::Shorthand, + '>' if self.s.eat_if('=') => SyntaxKind::Shorthand, + '>' if self.s.eat_if('>') => SyntaxKind::Shorthand, '|' if self.s.eat_if("->") => SyntaxKind::Shorthand, '|' if self.s.eat_if("=>") => SyntaxKind::Shorthand, - '<' if self.s.eat_if("<<") => SyntaxKind::Shorthand, - '>' if self.s.eat_if(">>") => SyntaxKind::Shorthand, - '<' if self.s.eat_if("=>") => SyntaxKind::Shorthand, - '<' if self.s.eat_if("->") => SyntaxKind::Shorthand, - '!' if self.s.eat_if('=') => SyntaxKind::Shorthand, - '<' if self.s.eat_if('<') => SyntaxKind::Shorthand, - '>' if self.s.eat_if('>') => SyntaxKind::Shorthand, - '<' if self.s.eat_if('=') => SyntaxKind::Shorthand, - '>' if self.s.eat_if('=') => SyntaxKind::Shorthand, - '<' if self.s.eat_if('-') => SyntaxKind::Shorthand, - '-' if self.s.eat_if('>') => SyntaxKind::Shorthand, - '=' if self.s.eat_if('>') => SyntaxKind::Shorthand, - ':' if self.s.eat_if('=') => SyntaxKind::Shorthand, - '[' if self.s.eat_if('|') => SyntaxKind::Shorthand, '|' if self.s.eat_if(']') => SyntaxKind::Shorthand, '|' if self.s.eat_if('|') => SyntaxKind::Shorthand, + '~' if self.s.eat_if("~>") => SyntaxKind::Shorthand, + '~' if self.s.eat_if('>') => SyntaxKind::Shorthand, '*' | '\'' | '-' => SyntaxKind::Shorthand, '#' => SyntaxKind::Hashtag,