Skip to content

Commit 033a32f

Browse files
bors[bot]Sergey Parilin
and
Sergey Parilin
committed
Merge #1257
1257: Implemented tkn! macro for syntax kinds r=matklad a=pasa Implementation of #1248 Co-authored-by: Sergey Parilin <sergey.parilin@fxdd.com>
2 parents b22614f + 57bb618 commit 033a32f

File tree

6 files changed

+114
-1
lines changed

6 files changed

+114
-1
lines changed

crates/ra_ide_api/src/extend_selection.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use ra_syntax::{
44
algo::{find_covering_element, find_token_at_offset, TokenAtOffset},
55
SyntaxKind::*, SyntaxToken,
66
ast::{self, AstNode, AstToken},
7+
T
78
};
89

910
use crate::{FileRange, db::RootDatabase};
@@ -135,7 +136,7 @@ fn pick_best<'a>(l: SyntaxToken<'a>, r: SyntaxToken<'a>) -> SyntaxToken<'a> {
135136
fn priority(n: SyntaxToken) -> usize {
136137
match n.kind() {
137138
WHITESPACE => 0,
138-
IDENT | SELF_KW | SUPER_KW | CRATE_KW | LIFETIME => 2,
139+
IDENT | T![self] | T![super] | T![crate] | LIFETIME => 2,
139140
_ => 1,
140141
}
141142
}

crates/ra_parser/src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
1515
#[macro_use]
1616
mod token_set;
17+
#[macro_use]
1718
mod syntax_kind;
1819
mod event;
1920
mod parser;

crates/ra_parser/src/syntax_kind.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#[macro_use]
12
mod generated;
23

34
use std::fmt;

crates/ra_parser/src/syntax_kind/generated.rs

+95
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,101 @@ pub enum SyntaxKind {
241241
}
242242
use self::SyntaxKind::*;
243243

244+
#[macro_export]
245+
macro_rules! T {
246+
(;) => { $crate::SyntaxKind::SEMI };
247+
(,) => { $crate::SyntaxKind::COMMA };
248+
(() => { $crate::SyntaxKind::L_PAREN };
249+
()) => { $crate::SyntaxKind::R_PAREN };
250+
('{') => { $crate::SyntaxKind::L_CURLY };
251+
('}') => { $crate::SyntaxKind::R_CURLY };
252+
('[') => { $crate::SyntaxKind::L_BRACK };
253+
(']') => { $crate::SyntaxKind::R_BRACK };
254+
(<) => { $crate::SyntaxKind::L_ANGLE };
255+
(>) => { $crate::SyntaxKind::R_ANGLE };
256+
(@) => { $crate::SyntaxKind::AT };
257+
(#) => { $crate::SyntaxKind::POUND };
258+
(~) => { $crate::SyntaxKind::TILDE };
259+
(?) => { $crate::SyntaxKind::QUESTION };
260+
($) => { $crate::SyntaxKind::DOLLAR };
261+
(&) => { $crate::SyntaxKind::AMP };
262+
(|) => { $crate::SyntaxKind::PIPE };
263+
(+) => { $crate::SyntaxKind::PLUS };
264+
(*) => { $crate::SyntaxKind::STAR };
265+
(/) => { $crate::SyntaxKind::SLASH };
266+
(^) => { $crate::SyntaxKind::CARET };
267+
(%) => { $crate::SyntaxKind::PERCENT };
268+
(_) => { $crate::SyntaxKind::UNDERSCORE };
269+
(.) => { $crate::SyntaxKind::DOT };
270+
(..) => { $crate::SyntaxKind::DOTDOT };
271+
(...) => { $crate::SyntaxKind::DOTDOTDOT };
272+
(..=) => { $crate::SyntaxKind::DOTDOTEQ };
273+
(:) => { $crate::SyntaxKind::COLON };
274+
(::) => { $crate::SyntaxKind::COLONCOLON };
275+
(=) => { $crate::SyntaxKind::EQ };
276+
(==) => { $crate::SyntaxKind::EQEQ };
277+
(=>) => { $crate::SyntaxKind::FAT_ARROW };
278+
(!) => { $crate::SyntaxKind::EXCL };
279+
(!=) => { $crate::SyntaxKind::NEQ };
280+
(-) => { $crate::SyntaxKind::MINUS };
281+
(->) => { $crate::SyntaxKind::THIN_ARROW };
282+
(<=) => { $crate::SyntaxKind::LTEQ };
283+
(>=) => { $crate::SyntaxKind::GTEQ };
284+
(+=) => { $crate::SyntaxKind::PLUSEQ };
285+
(-=) => { $crate::SyntaxKind::MINUSEQ };
286+
(|=) => { $crate::SyntaxKind::PIPEEQ };
287+
(&=) => { $crate::SyntaxKind::AMPEQ };
288+
(^=) => { $crate::SyntaxKind::CARETEQ };
289+
(/=) => { $crate::SyntaxKind::SLASHEQ };
290+
(*=) => { $crate::SyntaxKind::STAREQ };
291+
(%=) => { $crate::SyntaxKind::PERCENTEQ };
292+
(&&) => { $crate::SyntaxKind::AMPAMP };
293+
(||) => { $crate::SyntaxKind::PIPEPIPE };
294+
(<<) => { $crate::SyntaxKind::SHL };
295+
(>>) => { $crate::SyntaxKind::SHR };
296+
(<<=) => { $crate::SyntaxKind::SHLEQ };
297+
(>>=) => { $crate::SyntaxKind::SHREQ };
298+
(async) => { $crate::SyntaxKind::ASYNC_KW };
299+
(use) => { $crate::SyntaxKind::USE_KW };
300+
(fn) => { $crate::SyntaxKind::FN_KW };
301+
(struct) => { $crate::SyntaxKind::STRUCT_KW };
302+
(enum) => { $crate::SyntaxKind::ENUM_KW };
303+
(trait) => { $crate::SyntaxKind::TRAIT_KW };
304+
(impl) => { $crate::SyntaxKind::IMPL_KW };
305+
(dyn) => { $crate::SyntaxKind::DYN_KW };
306+
(true) => { $crate::SyntaxKind::TRUE_KW };
307+
(false) => { $crate::SyntaxKind::FALSE_KW };
308+
(as) => { $crate::SyntaxKind::AS_KW };
309+
(extern) => { $crate::SyntaxKind::EXTERN_KW };
310+
(crate) => { $crate::SyntaxKind::CRATE_KW };
311+
(mod) => { $crate::SyntaxKind::MOD_KW };
312+
(pub) => { $crate::SyntaxKind::PUB_KW };
313+
(self) => { $crate::SyntaxKind::SELF_KW };
314+
(super) => { $crate::SyntaxKind::SUPER_KW };
315+
(in) => { $crate::SyntaxKind::IN_KW };
316+
(where) => { $crate::SyntaxKind::WHERE_KW };
317+
(for) => { $crate::SyntaxKind::FOR_KW };
318+
(loop) => { $crate::SyntaxKind::LOOP_KW };
319+
(while) => { $crate::SyntaxKind::WHILE_KW };
320+
(continue) => { $crate::SyntaxKind::CONTINUE_KW };
321+
(break) => { $crate::SyntaxKind::BREAK_KW };
322+
(if) => { $crate::SyntaxKind::IF_KW };
323+
(else) => { $crate::SyntaxKind::ELSE_KW };
324+
(match) => { $crate::SyntaxKind::MATCH_KW };
325+
(const) => { $crate::SyntaxKind::CONST_KW };
326+
(static) => { $crate::SyntaxKind::STATIC_KW };
327+
(mut) => { $crate::SyntaxKind::MUT_KW };
328+
(unsafe) => { $crate::SyntaxKind::UNSAFE_KW };
329+
(type) => { $crate::SyntaxKind::TYPE_KW };
330+
(ref) => { $crate::SyntaxKind::REF_KW };
331+
(let) => { $crate::SyntaxKind::LET_KW };
332+
(move) => { $crate::SyntaxKind::MOVE_KW };
333+
(return) => { $crate::SyntaxKind::RETURN_KW };
334+
(auto) => { $crate::SyntaxKind::AUTO_KW };
335+
(default) => { $crate::SyntaxKind::DEFAULT_KW };
336+
(union) => { $crate::SyntaxKind::UNION_KW };
337+
}
338+
244339
impl From<u16> for SyntaxKind {
245340
fn from(d: u16) -> SyntaxKind {
246341
assert!(d <= (__LAST as u16));

crates/ra_parser/src/syntax_kind/generated.rs.tera

+14
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,20 @@ pub enum SyntaxKind {
3333
}
3434
use self::SyntaxKind::*;
3535

36+
#[macro_export]
37+
macro_rules! T {
38+
{%- for t in concat(a=single_byte_tokens, b=multi_byte_tokens) %}
39+
{%- if t.0 == '{' or t.0 == '}' or t.0 == '[' or t.0 == ']' %}
40+
('{{t.0}}') => { $crate::SyntaxKind::{{t.1}} };
41+
{%- else %}
42+
({{t.0}}) => { $crate::SyntaxKind::{{t.1}} };
43+
{%- endif %}
44+
{%- endfor -%}
45+
{% for kw in concat(a=keywords, b=contextual_keywords) %}
46+
({{kw}}) => { $crate::SyntaxKind::{{kw | upper}}_KW };
47+
{%- endfor %}
48+
}
49+
3650
impl From<u16> for SyntaxKind {
3751
fn from(d: u16) -> SyntaxKind {
3852
assert!(d <= (__LAST as u16));

crates/ra_syntax/src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ pub mod fuzz;
3333

3434
pub use rowan::{SmolStr, TextRange, TextUnit};
3535
pub use ra_parser::SyntaxKind;
36+
pub use ra_parser::T;
3637
pub use crate::{
3738
ast::AstNode,
3839
syntax_error::{SyntaxError, SyntaxErrorKind, Location},

0 commit comments

Comments
 (0)