Skip to content

Commit 2e13684

Browse files
authored
Merge pull request #18790 from ChayimFriedman2/proper-make
internal: Create a quoting mechanism instead of textual AST make
2 parents bd083d0 + 791a632 commit 2e13684

File tree

8 files changed

+1672
-60
lines changed

8 files changed

+1672
-60
lines changed

Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,8 @@ new_ret_no_self = "allow"
203203
useless_asref = "allow"
204204
# Has false positives
205205
assigning_clones = "allow"
206+
# Does not work with macros
207+
vec_init_then_push = "allow"
206208

207209
## Following lints should be tackled at some point
208210
too_many_arguments = "allow"

crates/ide-assists/src/handlers/generate_fn_type_alias.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,6 @@ pub(crate) fn generate_fn_type_alias(acc: &mut Assists, ctx: &AssistContext<'_>)
8585

8686
let is_unsafe = func_node.unsafe_token().is_some();
8787
let ty = make::ty_fn_ptr(
88-
None,
8988
is_unsafe,
9089
func_node.abi(),
9190
fn_params_vec.into_iter(),

crates/parser/src/syntax_kind/generated.rs

Lines changed: 325 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,331 @@ pub enum SyntaxKind {
331331
}
332332
use self::SyntaxKind::*;
333333
impl SyntaxKind {
334+
#[allow(unreachable_patterns)]
335+
pub const fn text(self) -> &'static str {
336+
match self {
337+
TOMBSTONE
338+
| EOF
339+
| __LAST
340+
| BYTE
341+
| BYTE_STRING
342+
| CHAR
343+
| C_STRING
344+
| FLOAT_NUMBER
345+
| INT_NUMBER
346+
| RAW_BYTE_STRING
347+
| RAW_C_STRING
348+
| RAW_STRING
349+
| STRING
350+
| ABI
351+
| ADT
352+
| ARG_LIST
353+
| ARRAY_EXPR
354+
| ARRAY_TYPE
355+
| ASM_CLOBBER_ABI
356+
| ASM_CONST
357+
| ASM_DIR_SPEC
358+
| ASM_EXPR
359+
| ASM_LABEL
360+
| ASM_OPERAND
361+
| ASM_OPERAND_EXPR
362+
| ASM_OPERAND_NAMED
363+
| ASM_OPTION
364+
| ASM_OPTIONS
365+
| ASM_PIECE
366+
| ASM_REG_OPERAND
367+
| ASM_REG_SPEC
368+
| ASM_SYM
369+
| ASSOC_ITEM
370+
| ASSOC_ITEM_LIST
371+
| ASSOC_TYPE_ARG
372+
| ATTR
373+
| AWAIT_EXPR
374+
| BECOME_EXPR
375+
| BIN_EXPR
376+
| BLOCK_EXPR
377+
| BOX_PAT
378+
| BREAK_EXPR
379+
| CALL_EXPR
380+
| CAST_EXPR
381+
| CLOSURE_BINDER
382+
| CLOSURE_EXPR
383+
| CONST
384+
| CONST_ARG
385+
| CONST_BLOCK_PAT
386+
| CONST_PARAM
387+
| CONTINUE_EXPR
388+
| DYN_TRAIT_TYPE
389+
| ENUM
390+
| EXPR
391+
| EXPR_STMT
392+
| EXTERN_BLOCK
393+
| EXTERN_CRATE
394+
| EXTERN_ITEM
395+
| EXTERN_ITEM_LIST
396+
| FIELD_EXPR
397+
| FIELD_LIST
398+
| FN
399+
| FN_PTR_TYPE
400+
| FORMAT_ARGS_ARG
401+
| FORMAT_ARGS_EXPR
402+
| FOR_EXPR
403+
| FOR_TYPE
404+
| GENERIC_ARG
405+
| GENERIC_ARG_LIST
406+
| GENERIC_PARAM
407+
| GENERIC_PARAM_LIST
408+
| IDENT_PAT
409+
| IF_EXPR
410+
| IMPL
411+
| IMPL_TRAIT_TYPE
412+
| INDEX_EXPR
413+
| INFER_TYPE
414+
| ITEM
415+
| ITEM_LIST
416+
| LABEL
417+
| LET_ELSE
418+
| LET_EXPR
419+
| LET_STMT
420+
| LIFETIME
421+
| LIFETIME_ARG
422+
| LIFETIME_PARAM
423+
| LITERAL
424+
| LITERAL_PAT
425+
| LOOP_EXPR
426+
| MACRO_CALL
427+
| MACRO_DEF
428+
| MACRO_EXPR
429+
| MACRO_ITEMS
430+
| MACRO_PAT
431+
| MACRO_RULES
432+
| MACRO_STMTS
433+
| MACRO_TYPE
434+
| MATCH_ARM
435+
| MATCH_ARM_LIST
436+
| MATCH_EXPR
437+
| MATCH_GUARD
438+
| META
439+
| METHOD_CALL_EXPR
440+
| MODULE
441+
| NAME
442+
| NAME_REF
443+
| NEVER_TYPE
444+
| OFFSET_OF_EXPR
445+
| OR_PAT
446+
| PARAM
447+
| PARAM_LIST
448+
| PARENTHESIZED_ARG_LIST
449+
| PAREN_EXPR
450+
| PAREN_PAT
451+
| PAREN_TYPE
452+
| PAT
453+
| PATH
454+
| PATH_EXPR
455+
| PATH_PAT
456+
| PATH_SEGMENT
457+
| PATH_TYPE
458+
| PREFIX_EXPR
459+
| PTR_TYPE
460+
| RANGE_EXPR
461+
| RANGE_PAT
462+
| RECORD_EXPR
463+
| RECORD_EXPR_FIELD
464+
| RECORD_EXPR_FIELD_LIST
465+
| RECORD_FIELD
466+
| RECORD_FIELD_LIST
467+
| RECORD_PAT
468+
| RECORD_PAT_FIELD
469+
| RECORD_PAT_FIELD_LIST
470+
| REF_EXPR
471+
| REF_PAT
472+
| REF_TYPE
473+
| RENAME
474+
| REST_PAT
475+
| RETURN_EXPR
476+
| RETURN_TYPE_SYNTAX
477+
| RET_TYPE
478+
| SELF_PARAM
479+
| SLICE_PAT
480+
| SLICE_TYPE
481+
| SOURCE_FILE
482+
| STATIC
483+
| STMT
484+
| STMT_LIST
485+
| STRUCT
486+
| TOKEN_TREE
487+
| TRAIT
488+
| TRAIT_ALIAS
489+
| TRY_EXPR
490+
| TUPLE_EXPR
491+
| TUPLE_FIELD
492+
| TUPLE_FIELD_LIST
493+
| TUPLE_PAT
494+
| TUPLE_STRUCT_PAT
495+
| TUPLE_TYPE
496+
| TYPE
497+
| TYPE_ALIAS
498+
| TYPE_ARG
499+
| TYPE_BOUND
500+
| TYPE_BOUND_LIST
501+
| TYPE_PARAM
502+
| UNDERSCORE_EXPR
503+
| UNION
504+
| USE
505+
| USE_BOUND_GENERIC_ARG
506+
| USE_BOUND_GENERIC_ARGS
507+
| USE_TREE
508+
| USE_TREE_LIST
509+
| VARIANT
510+
| VARIANT_LIST
511+
| VISIBILITY
512+
| WHERE_CLAUSE
513+
| WHERE_PRED
514+
| WHILE_EXPR
515+
| WILDCARD_PAT
516+
| YEET_EXPR
517+
| YIELD_EXPR
518+
| COMMENT
519+
| ERROR
520+
| IDENT
521+
| LIFETIME_IDENT
522+
| NEWLINE
523+
| SHEBANG
524+
| WHITESPACE => panic!("no text for these `SyntaxKind`s"),
525+
DOLLAR => "$",
526+
SEMICOLON => ";",
527+
COMMA => ",",
528+
L_PAREN => "(",
529+
R_PAREN => ")",
530+
L_CURLY => "{",
531+
R_CURLY => "}",
532+
L_BRACK => "[",
533+
R_BRACK => "]",
534+
L_ANGLE => "<",
535+
R_ANGLE => ">",
536+
AT => "@",
537+
POUND => "#",
538+
TILDE => "~",
539+
QUESTION => "?",
540+
AMP => "&",
541+
PIPE => "|",
542+
PLUS => "+",
543+
STAR => "*",
544+
SLASH => "/",
545+
CARET => "^",
546+
PERCENT => "%",
547+
UNDERSCORE => "_",
548+
DOT => ".",
549+
DOT2 => "..",
550+
DOT3 => "...",
551+
DOT2EQ => "..=",
552+
COLON => ":",
553+
COLON2 => "::",
554+
EQ => "=",
555+
EQ2 => "==",
556+
FAT_ARROW => "=>",
557+
BANG => "!",
558+
NEQ => "!=",
559+
MINUS => "-",
560+
THIN_ARROW => "->",
561+
LTEQ => "<=",
562+
GTEQ => ">=",
563+
PLUSEQ => "+=",
564+
MINUSEQ => "-=",
565+
PIPEEQ => "|=",
566+
AMPEQ => "&=",
567+
CARETEQ => "^=",
568+
SLASHEQ => "/=",
569+
STAREQ => "*=",
570+
PERCENTEQ => "%=",
571+
AMP2 => "&&",
572+
PIPE2 => "||",
573+
SHL => "<<",
574+
SHR => ">>",
575+
SHLEQ => "<<=",
576+
SHREQ => ">>=",
577+
SELF_TYPE_KW => "Self",
578+
ABSTRACT_KW => "abstract",
579+
AS_KW => "as",
580+
BECOME_KW => "become",
581+
BOX_KW => "box",
582+
BREAK_KW => "break",
583+
CONST_KW => "const",
584+
CONTINUE_KW => "continue",
585+
CRATE_KW => "crate",
586+
DO_KW => "do",
587+
ELSE_KW => "else",
588+
ENUM_KW => "enum",
589+
EXTERN_KW => "extern",
590+
FALSE_KW => "false",
591+
FINAL_KW => "final",
592+
FN_KW => "fn",
593+
FOR_KW => "for",
594+
IF_KW => "if",
595+
IMPL_KW => "impl",
596+
IN_KW => "in",
597+
LET_KW => "let",
598+
LOOP_KW => "loop",
599+
MACRO_KW => "macro",
600+
MATCH_KW => "match",
601+
MOD_KW => "mod",
602+
MOVE_KW => "move",
603+
MUT_KW => "mut",
604+
OVERRIDE_KW => "override",
605+
PRIV_KW => "priv",
606+
PUB_KW => "pub",
607+
REF_KW => "ref",
608+
RETURN_KW => "return",
609+
SELF_KW => "self",
610+
STATIC_KW => "static",
611+
STRUCT_KW => "struct",
612+
SUPER_KW => "super",
613+
TRAIT_KW => "trait",
614+
TRUE_KW => "true",
615+
TYPE_KW => "type",
616+
TYPEOF_KW => "typeof",
617+
UNSAFE_KW => "unsafe",
618+
UNSIZED_KW => "unsized",
619+
USE_KW => "use",
620+
VIRTUAL_KW => "virtual",
621+
WHERE_KW => "where",
622+
WHILE_KW => "while",
623+
YIELD_KW => "yield",
624+
ASM_KW => "asm",
625+
ATT_SYNTAX_KW => "att_syntax",
626+
AUTO_KW => "auto",
627+
BUILTIN_KW => "builtin",
628+
CLOBBER_ABI_KW => "clobber_abi",
629+
DEFAULT_KW => "default",
630+
DYN_KW => "dyn",
631+
FORMAT_ARGS_KW => "format_args",
632+
INLATEOUT_KW => "inlateout",
633+
INOUT_KW => "inout",
634+
LABEL_KW => "label",
635+
LATEOUT_KW => "lateout",
636+
MACRO_RULES_KW => "macro_rules",
637+
MAY_UNWIND_KW => "may_unwind",
638+
NOMEM_KW => "nomem",
639+
NORETURN_KW => "noreturn",
640+
NOSTACK_KW => "nostack",
641+
OFFSET_OF_KW => "offset_of",
642+
OPTIONS_KW => "options",
643+
OUT_KW => "out",
644+
PRESERVES_FLAGS_KW => "preserves_flags",
645+
PURE_KW => "pure",
646+
RAW_KW => "raw",
647+
READONLY_KW => "readonly",
648+
SAFE_KW => "safe",
649+
SYM_KW => "sym",
650+
UNION_KW => "union",
651+
YEET_KW => "yeet",
652+
ASYNC_KW => "async",
653+
AWAIT_KW => "await",
654+
DYN_KW => "dyn",
655+
GEN_KW => "gen",
656+
TRY_KW => "try",
657+
}
658+
}
334659
#[doc = r" Checks whether this syntax kind is a strict keyword for the given edition."]
335660
#[doc = r" Strict keywords are identifiers that are always considered keywords."]
336661
pub fn is_strict_keyword(self, edition: Edition) -> bool {

crates/syntax/src/ast.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,14 @@ pub use self::{
4242
/// the same representation: a pointer to the tree root and a pointer to the
4343
/// node itself.
4444
pub trait AstNode {
45+
/// This panics if the `SyntaxKind` is not statically known.
46+
fn kind() -> SyntaxKind
47+
where
48+
Self: Sized,
49+
{
50+
panic!("dynamic `SyntaxKind` for `AstNode::kind()`")
51+
}
52+
4553
fn can_cast(kind: SyntaxKind) -> bool
4654
where
4755
Self: Sized;

0 commit comments

Comments
 (0)