1use std::hash::{Hash, Hasher};
6use std::{fmt, str};
7
8use rustc_arena::DroplessArena;
9use rustc_data_structures::fx::{FxHashSet, FxIndexSet};
10use rustc_data_structures::stable_hasher::{
11 HashStable, StableCompare, StableHasher, ToStableHashKey,
12};
13use rustc_data_structures::sync::Lock;
14use rustc_macros::{Decodable, Encodable, HashStable_Generic, symbols};
15
16use crate::edit_distance::find_best_match_for_name;
17use crate::{DUMMY_SP, Edition, Span, with_session_globals};
18
19#[cfg(test)]
20mod tests;
21
22impl Interner {
#[doc =
r" Creates an `Interner` with the predefined symbols from the `symbols!` macro and"]
#[doc = r" any extra symbols provided by external drivers such as Clippy"]
pub(crate) fn with_extra_symbols(extra_symbols: &[&'static str]) -> Self {
Interner::prefill(&["$crate", "{{root}}", "_", "as", "break", "const",
"continue", "crate", "else", "enum", "extern", "false",
"fn", "for", "if", "impl", "in", "let", "loop", "match",
"mod", "move", "mut", "pub", "ref", "return", "self",
"Self", "static", "struct", "super", "trait", "true",
"type", "unsafe", "use", "where", "while", "abstract",
"become", "box", "do", "final", "macro", "override", "priv",
"typeof", "unsized", "virtual", "yield", "async", "await",
"dyn", "gen", "try", "'static", "'_", "auto", "builtin",
"catch", "contract_ensures", "contract_requires", "default",
"macro_rules", "raw", "reuse", "safe", "union", "yeet",
"Abi", "AcqRel", "Acquire", "Alignment", "Arc", "ArcWeak",
"Array", "AsMut", "AsRef", "AssertParamIsClone",
"AssertParamIsCopy", "AssertParamIsEq", "AsyncGenFinished",
"AsyncGenPending", "AsyncGenReady", "AtomicBool",
"AtomicI8", "AtomicI16", "AtomicI32", "AtomicI64",
"AtomicI128", "AtomicIsize", "AtomicPtr", "AtomicU8",
"AtomicU16", "AtomicU32", "AtomicU64", "AtomicU128",
"AtomicUsize", "BTreeMap", "Bool", "Borrow", "BorrowMut",
"Break", "BuildHasher", "C", "CStr", "CallOnceFuture",
"CallRefFuture", "Capture", "Cell", "Char", "Cleanup",
"Clone", "CoercePointee", "CoercePointeeValidated",
"CoerceUnsized", "Const", "ConstParamTy", "ConstParamTy_",
"Context", "Continue", "ControlFlow", "Copy", "Debug",
"Default", "Deref", "DispatchFromDyn", "Display",
"DynTrait", "Enum", "Eq", "Equal", "Err", "ExternC",
"ExternRust", "Float", "FmtArgumentsNew", "Fn", "FnMut",
"FnOnce", "FnPtr", "Formatter", "Forward", "From",
"FromIterator", "FromResidual", "GlobalAlloc", "Hash",
"HashMap", "HashSet", "Hasher", "InCleanup", "IndexOutput",
"Input", "Int", "Into", "IntoFuture", "IntoIterator",
"IntoIteratorItem", "IrTyKind", "Item", "ItemContext",
"Iterator", "IteratorItem", "IteratorMap", "Layout",
"Lifetime", "LintPass", "LocalKey", "Mutex", "MutexGuard",
"Named", "NonNull", "NonZero", "None", "Normal", "Ok",
"Option", "Ord", "Ordering", "Other", "Output", "ParamSet",
"PartialEq", "PartialOrd", "Pending", "PinDerefMutHelper",
"Pointer", "Poll", "ProcMacro", "Range", "RangeCopy",
"RangeFrom", "RangeFromCopy", "RangeFull", "RangeInclusive",
"RangeInclusiveCopy", "RangeMax", "RangeMin", "RangeSub",
"RangeTo", "RangeToInclusive", "RangeToInclusiveCopy", "Rc",
"RcWeak", "Ready", "RefCell", "Reference", "Relaxed",
"Release", "Result", "ResumeTy", "Reverse", "Rust",
"RustaceansAreAwesome", "RwLock", "RwLockReadGuard",
"RwLockWriteGuard", "SelfTy", "Send", "SeqCst", "Sized",
"Slice", "SliceIndex", "Some", "SpanCtxt", "Str", "String",
"Struct", "StructuralPartialEq", "SymbolIntern", "Sync",
"SyncUnsafeCell", "Target", "This", "TokenStream", "Trait",
"TrivialClone", "Try", "TryCaptureGeneric",
"TryCapturePrintable", "TryFrom", "TryInto", "Tuple", "Ty",
"TyCtxt", "TyKind", "Type", "Union", "Unsize", "Vec",
"Wrapper", "_DECLS", "__H", "__S", "__awaitee", "__try_var",
"_t", "_task_context", "a32", "aarch64",
"aarch64_target_feature", "aarch64_unstable_target_feature",
"aarch64_ver_target_feature", "abi", "abi_amdgpu_kernel",
"abi_avr_interrupt", "abi_c_cmse_nonsecure_call",
"abi_cmse_nonsecure_call", "abi_custom", "abi_efiapi",
"abi_gpu_kernel", "abi_msp430_interrupt", "abi_ptx",
"abi_riscv_interrupt", "abi_sysv64", "abi_thiscall",
"abi_unadjusted", "abi_vectorcall", "abi_x86_interrupt",
"abort", "add", "add_assign", "add_with_overflow",
"address", "adt_const_params", "advanced_slice_patterns",
"adx_target_feature", "aes", "aggregate_raw_ptr", "alias",
"align", "align_of", "align_of_val", "alignment", "all",
"alloc", "alloc_error_handler", "alloc_layout",
"alloc_zeroed", "allocator", "allocator_api",
"allocator_internals", "allow", "allow_fail",
"allow_internal_unsafe", "allow_internal_unstable",
"altivec", "alu32", "always", "amdgpu",
"amdgpu_dispatch_ptr", "analysis", "and", "and_then",
"anon", "anon_assoc", "anonymous_lifetime_in_impl_trait",
"any", "append_const_msg", "apx_target_feature",
"arbitrary_enum_discriminant", "arbitrary_self_types",
"arbitrary_self_types_pointers", "areg", "args",
"arith_offset", "arm", "arm64ec", "arm::a32", "arm::t32",
"arm_target_feature", "array", "as-needed", "as_ref", "asm",
"asm_cfg", "asm_const", "asm_experimental_arch",
"asm_experimental_reg", "asm_goto", "asm_goto_with_outputs",
"asm_sym", "asm_unwind", "assert", "assert_eq",
"assert_eq_macro", "assert_inhabited", "assert_macro",
"assert_mem_uninitialized_valid", "assert_ne_macro",
"assert_receiver_is_total_eq", "assert_zero_valid",
"asserting", "associated_const_equality",
"associated_consts", "associated_type_bounds",
"associated_type_defaults", "associated_types", "assume",
"assume_init", "*", "async_await", "async_call",
"async_call_mut", "async_call_once", "async_closure",
"async_drop", "async_drop_in_place", "async_fn",
"async_fn_in_dyn_trait", "async_fn_in_trait",
"async_fn_kind_helper", "async_fn_kind_upvars",
"async_fn_mut", "async_fn_once", "async_fn_once_output",
"async_fn_track_caller", "async_fn_traits",
"async_for_loop", "async_gen_internals", "async_iterator",
"async_iterator_poll_next", "async_trait_bounds",
"atomic_and", "atomic_cxchg", "atomic_cxchgweak",
"atomic_fence", "atomic_load", "atomic_max", "atomic_min",
"atomic_mod", "atomic_nand", "atomic_or",
"atomic_singlethreadfence", "atomic_store", "atomic_umax",
"atomic_umin", "atomic_xadd", "atomic_xchg", "atomic_xor",
"atomic_xsub", "atomics", "att_syntax", "attr",
"attr_literals", "attribute", "attributes", "audit_that",
"augmented_assignments", "auto_cfg", "auto_traits",
"autodiff", "autodiff_forward", "autodiff_reverse",
"automatically_derived", "available_externally", "avr",
"avr_target_feature", "avx", "avx10_target_feature",
"avx512_target_feature", "avx512bw", "avx512f",
"await_macro", "bang", "begin_panic", "bench", "bevy_ecs",
"bikeshed", "bikeshed_guaranteed_no_drop", "bin",
"bind_by_move_pattern_guards", "bindings_after_at",
"bitand", "bitand_assign", "bitor", "bitor_assign",
"bitreverse", "bits", "bitxor", "bitxor_assign",
"black_box", "block", "blocking", "bool",
"borrowck_graphviz_format", "borrowck_graphviz_postflow",
"box_new", "box_patterns", "box_syntax", "boxed_slice",
"bpf", "bpf_target_feature", "braced_empty_structs",
"branch", "breakpoint", "bridge", "bswap", "built",
"builtin_syntax", "bundle", "c", "c_dash_variadic",
"c_str_literals", "c_unwind", "c_variadic",
"c_variadic_naked_functions", "c_void", "call", "call_mut",
"call_once", "call_once_future", "call_ref_future",
"caller", "caller_location", "capture_disjoint_fields",
"carrying_mul_add", "carryless_mul", "catch_unwind",
"cause", "cdylib", "ceilf16", "ceilf32", "ceilf64",
"ceilf128", "cfg", "cfg_accessible", "cfg_attr",
"cfg_attr_multi", "<cfg_attr_trace>",
"cfg_boolean_literals", "cfg_contract_checks",
"cfg_doctest", "cfg_emscripten_wasm_eh", "cfg_eval",
"cfg_overflow_checks", "cfg_panic", "cfg_relocation_model",
"cfg_sanitize", "cfg_sanitizer_cfi", "cfg_select",
"cfg_target_abi", "cfg_target_compact",
"cfg_target_feature", "cfg_target_has_atomic",
"cfg_target_has_atomic_equal_alignment",
"cfg_target_has_reliable_f16_f128",
"cfg_target_thread_local", "cfg_target_vendor",
"<cfg_trace>", "cfg_ub_checks", "cfg_version", "cfi",
"cfi_encoding", "char", "client", "clippy", "clobber_abi",
"clone", "clone_closures", "clone_fn", "clone_from",
"closure", "closure_lifetime_binder",
"closure_to_fn_coercion", "closure_track_caller", "cmp",
"cmp_ord_max", "cmp_ord_min", "cmp_partialeq_eq",
"cmp_partialeq_ne", "cmp_partialord_cmp",
"cmp_partialord_ge", "cmp_partialord_gt",
"cmp_partialord_le", "cmp_partialord_lt",
"cmpxchg16b_target_feature", "cmse_nonsecure_entry",
"coerce_pointee_validated", "coerce_shared",
"coerce_unsized", "cold", "cold_path", "collapse_debuginfo",
"column", "common", "compare_bytes", "compare_exchange",
"compare_exchange_weak", "compile_error", "compiler",
"compiler_builtins", "compiler_copy", "compiler_fence",
"compiler_move", "concat", "concat_bytes", "concat_idents",
"conservative_impl_trait", "console", "const_allocate",
"const_async_blocks", "const_block_items",
"const_c_variadic", "const_closures",
"const_compare_raw_pointers", "const_constructor",
"const_continue", "const_deallocate", "const_destruct",
"const_eval_limit", "const_eval_select",
"const_evaluatable_checked", "const_extern_fn", "const_fn",
"const_fn_floating_point_arithmetic",
"const_fn_fn_ptr_basics", "const_fn_trait_bound",
"const_fn_transmute", "const_fn_union", "const_fn_unsize",
"const_for", "const_format_args", "const_generics",
"const_generics_defaults", "const_if_match",
"const_impl_trait", "const_in_array_repeat_expressions",
"const_indexing", "const_let", "const_loop",
"const_make_global", "const_mut_refs", "const_panic",
"const_panic_fmt", "const_param_ty",
"const_precise_live_drops", "const_ptr_cast",
"const_raw_ptr_deref", "const_raw_ptr_to_usize_cast",
"const_refs_to_cell", "const_refs_to_static",
"const_trait_bound_opt_out", "const_trait_impl",
"const_try", "<const_ty>", "constant", "constructor",
"contract_build_check_ensures", "contract_check_ensures",
"contract_check_requires", "contract_checks", "contracts",
"contracts_ensures", "contracts_internals",
"contracts_requires", "convert", "copy", "copy_closures",
"copy_nonoverlapping", "copysignf16", "copysignf32",
"copysignf64", "copysignf128", "core", "core_panic",
"core_panic_2015_macro", "core_panic_macro", "coroutine",
"coroutine_clone", "coroutine_resume", "coroutine_return",
"coroutine_state", "coroutine_yield", "coroutines",
"cosf16", "cosf32", "cosf64", "cosf128", "count",
"coverage", "coverage_attribute", "cr", "crate_in_paths",
"crate_local", "crate_name", "crate_type",
"crate_visibility_modifier", "crt-static", "csky",
"csky_target_feature", "cstr_type", "cstring_type", "ctlz",
"ctlz_nonzero", "ctpop", "ctr", "cttz", "cttz_nonzero",
"custom_attribute", "custom_code_classes_in_docs",
"custom_derive", "custom_inner_attributes", "custom_mir",
"custom_test_frameworks", "d", "d32", "dead_code",
"dealloc", "debug", "debug_assert_eq_macro",
"debug_assert_macro", "debug_assert_ne_macro",
"debug_assertions", "debug_struct_fields_finish",
"debug_tuple_fields_finish", "debugger_visualizer",
"decl_macro", "declare_lint_pass", "decorated",
"default_alloc_error_handler", "default_field_values",
"default_fn", "default_lib_allocator",
"default_method_body_is_const", "default_trait1",
"default_trait2", "default_trait3", "default_trait4",
"default_type_parameter_fallback", "default_type_params",
"define_opaque", "deny", "deprecated", "deprecated_safe",
"deprecated_suggestion", "deref", "deref_method",
"deref_mut", "deref_patterns", "deref_pure", "deref_target",
"derive", "derive_const", "118304", "derive_default_enum",
"derive_from", "derive_smart_pointer", "destruct",
"destructuring_assignment", "diagnostic",
"diagnostic_namespace", "diagnostic_on_const", "dialect",
"direct", "discriminant_kind", "discriminant_type",
"discriminant_value", "disjoint_bitor", "dispatch_from_dyn",
"div", "div_assign", "diverging_block_default", "dl",
"do_not_recommend", "doc", "doc_alias", "doc_auto_cfg",
"doc_cfg", "doc_cfg_hide", "doc_keyword", "doc_masked",
"doc_notable_trait", "doc_primitive", "doc_spotlight",
"doctest", "dotdot_in_tuple_patterns",
"dotdoteq_in_patterns", "dreg", "dreg_low8", "dreg_low16",
"drop", "drop_in_place", "drop_types_in_const",
"dropck_eyepatch", "dropck_parametricity", "<!dummy!>",
"dummy_cgu_name", "dylib", "dyn_compatible_for_dispatch",
"dyn_metadata", "dyn_star", "dyn_trait", "dynamic-no-pic",
"e", "edition_panic", "effective_target_features",
"effects", "eh_catch_typeinfo", "eh_personality", "eii",
"eii_declaration", "eii_internals", "eii_shared_macro",
"element_ty", "", "emscripten_wasm_eh", "enable", "end",
"entry_nops", "env", "eq", "ergonomic_clones",
"ermsb_target_feature", "exact_div", "except",
"exception-handling", "exclusive_range_pattern",
"exhaustive_integer_patterns", "exhaustive_patterns",
"existential_type", "exp2f16", "exp2f32", "exp2f64",
"exp2f128", "expect", "expected", "expf16", "expf32",
"expf64", "expf128", "explicit_extern_abis",
"explicit_generic_args_with_impl_trait",
"explicit_tail_calls", "export_name", "export_stable",
"export-symbols", "expr", "expr_2021",
"expr_fragment_specifier_2024",
"extended_key_value_attributes",
"extended_varargs_abi_support", "extern_absolute_paths",
"extern_crate_item_prelude", "extern_crate_self",
"extern_in_paths", "extern_item_impls", "extern_prelude",
"extern_system_varargs", "extern_types", "extern_weak",
"external", "external_doc", "f", "f16", "f16_nan",
"f16c_target_feature", "f32", "f32_nan", "f64", "f64_nan",
"f128", "f128_nan", "fabsf16", "fabsf32", "fabsf64",
"fabsf128", "fadd_algebraic", "fadd_fast", "fake_variadic",
"fallback", "fdiv_algebraic", "fdiv_fast", "feature",
"fence", "🦀", "fetch_update", "ffi_const", "ffi_pure",
"ffi_returns_twice", "field_init_shorthand", "fields",
"file", "final_associated_functions",
"float_to_int_unchecked", "floorf16", "floorf32",
"floorf64", "floorf128", "fmaf16", "fmaf32", "fmaf64",
"fmaf128", "fmt", "fmt_debug", "fmul_algebraic",
"fmul_fast", "fmuladdf16", "fmuladdf32", "fmuladdf64",
"fmuladdf128", "fn_align", "fn_body", "fn_delegation",
"fn_must_use", "fn_mut", "fn_once", "fn_once_output",
"fn_ptr_addr", "fn_ptr_trait", "forbid",
"force_target_feature", "forget", "format_args",
"format_args_capture", "format_args_nl", "format_argument",
"format_arguments", "format_macro", "framework", "freeze",
"freeze_impls", "freg", "frem_algebraic", "frem_fast",
"from", "from_desugaring", "from_iter", "from_output",
"from_residual", "from_size_align_unchecked",
"from_size_alignment_unchecked", "from_str",
"from_str_nonconst", "from_usize", "from_yeet",
"frontmatter", "fsub_algebraic", "fsub_fast", "full",
"fundamental", "fused_iterator", "future_output",
"future_trait", "fxsr", "gdb_script_file", "ge",
"gen_blocks", "gen_future", "generator_clone", "generators",
"generic_arg_infer", "generic_assert",
"generic_associated_types",
"generic_associated_types_extended", "generic_const_exprs",
"generic_const_items", "generic_const_parameter_types",
"generic_param_attrs", "generic_pattern_types", "generics",
"get_context", "global_alloc_ty", "global_allocator",
"global_asm", "global_registration", "globs", "gt",
"guard_patterns", "half_open_range_patterns",
"half_open_range_patterns_in_slices", "hash", "hexagon",
"hexagon_target_feature", "hidden", "hide",
"homogeneous_aggregate", "html_favicon_url",
"html_logo_url", "html_no_source", "html_playground_url",
"html_root_url", "hwaddress", "i8", "i16", "i32", "i64",
"i128", "i128_type", "ident", "if_let", "if_let_guard",
"if_let_rescope", "if_while_or_patterns", "ignore",
"immediate-abort", "impl_header_lifetime_elision",
"impl_lint_pass", "impl_trait_in_assoc_type",
"impl_trait_in_bindings", "impl_trait_in_fn_trait_return",
"impl_trait_projections", "implied_by", "import",
"import_name_type", "import_shadowing",
"import_trait_associated_functions", "imported_main",
"in_band_lifetimes", "include", "include_bytes",
"include_str", "inclusive_range_syntax", "index",
"index_mut", "infer_outlives_requirements",
"infer_static_outlives_requirements",
"inherent_associated_types", "initial", "inlateout",
"inline", "inline_const", "inline_const_pat", "inout",
"inputs", "instruction_set", "integer", "integral",
"internal", "internal_features",
"into_async_iter_into_iter", "into_future", "into_iter",
"into_try_type", "intra_doc_pointers", "intrinsics",
"irrefutable_let_patterns", "is", "is_auto",
"is_val_statically_known", "isa_attribute", "isize",
"issue", "issue_5723_bootstrap", "issue_tracker_base_url",
"item", "item_like_imports", "iter", "iter_mut", "iterator",
"iterator_collect_fn", "kcfi", "kernel_address",
"keylocker_x86", "keyword", "kind", "kreg", "kreg0",
"label", "label_break_value", "lahfsahf_target_feature",
"lang", "lang_items", "large_assignments", "last",
"lateout", "lazy_normalization_consts", "lazy_type_alias",
"le", "legacy_receiver", "len", "let_chains", "let_else",
"lhs", "lib", "libc", "lifetime",
"lifetime_capture_rules_2024", "lifetimes", "line", "link",
"link_arg_attribute", "link_args", "link_cfg", "link-arg",
"link_llvm_intrinsics", "link_name", "link_ordinal",
"link_section", "linkage", "linker", "linker_messages",
"linkonce", "linkonce_odr", "lint_reasons", "literal",
"load", "loaded_from_disk", "local", "local_inner_macros",
"log2f16", "log2f32", "log2f64", "log2f128", "log10f16",
"log10f32", "log10f64", "log10f128", "log_syntax", "logf16",
"logf32", "logf64", "logf128", "loongarch32", "loongarch64",
"loongarch_target_feature", "loop_break_value",
"loop_match", "lr", "lt", "m68k", "m68k_target_feature",
"macro_at_most_once_rep", "macro_attr",
"macro_attributes_in_derive_output", "macro_derive",
"macro_escape", "macro_export", "macro_lifetime_matcher",
"macro_literal_matcher", "macro_metavar_expr",
"macro_metavar_expr_concat", "macro_reexport", "macro_use",
"macro_vis_matcher", "macros_in_extern", "main",
"managed_boxes", "manually_drop", "map", "map_err",
"marker", "marker_trait_attr", "masked",
"match_beginning_vert", "match_default_bindings",
"maximumf16", "maximumf32", "maximumf64", "maximumf128",
"maxnumf16", "maxnumf32", "maxnumf64", "maxnumf128",
"may_dangle", "may_unwind", "maybe_uninit",
"maybe_uninit_uninit", "maybe_uninit_zeroed",
"mem_align_const", "mem_discriminant", "mem_drop",
"mem_forget", "mem_size_const", "mem_swap",
"mem_uninitialized", "mem_variant_count", "mem_zeroed",
"member_constraints", "memory", "memtag", "message", "meta",
"meta_sized", "metadata_type", "mgca_type_const_syntax",
"min_const_fn", "min_const_generics", "min_const_unsafe_fn",
"min_exhaustive_patterns", "min_generic_const_args",
"min_specialization", "min_type_alias_impl_trait",
"minimumf16", "minimumf32", "minimumf64", "minimumf128",
"minnumf16", "minnumf32", "minnumf64", "minnumf128", "mips",
"mips32r6", "mips64", "mips64r6", "mips_target_feature",
"mir_assume", "mir_basic_block", "mir_call",
"mir_cast_ptr_to_ptr", "mir_cast_transmute",
"mir_cast_unsize", "mir_checked", "mir_debuginfo",
"mir_discriminant", "mir_drop", "mir_field", "mir_goto",
"mir_make_place", "mir_move", "mir_offset",
"mir_ptr_metadata", "mir_retag", "mir_return",
"mir_return_to", "mir_set_discriminant", "mir_static",
"mir_static_mut", "mir_storage_dead", "mir_storage_live",
"mir_tail_call", "mir_unreachable", "mir_unwind_cleanup",
"mir_unwind_continue", "mir_unwind_resume",
"mir_unwind_terminate", "mir_unwind_terminate_reason",
"mir_unwind_unreachable", "mir_variant", "miri", "mmx_reg",
"modifiers", "module", "module_path", "more_maybe_bounds",
"more_qualified_paths", "more_struct_aliases",
"movbe_target_feature", "move_ref_pattern",
"move_size_limit", "movrs_target_feature", "msp430", "mul",
"mul_assign", "mul_with_overflow",
"multiple_supertrait_upcastable", "must_not_suspend",
"must_use", "mut_preserve_binding_mode_2024", "mut_ref",
"mutable", "naked", "naked_asm", "naked_functions",
"naked_functions_rustic_abi",
"naked_functions_target_feature", "name", "names",
"native_link_modifiers", "native_link_modifiers_as_needed",
"native_link_modifiers_bundle",
"native_link_modifiers_verbatim",
"native_link_modifiers_whole_archive", "natvis_file", "ne",
"needs_allocator", "needs_drop", "needs_panic_runtime",
"neg", "negate_unsigned", "negative_bounds",
"negative_impls", "neon", "nested", "never",
"never_patterns", "never_type", "never_type_fallback",
"new", "new_binary", "new_debug", "new_debug_noop",
"new_display", "new_lower_exp", "new_lower_hex",
"new_octal", "new_pointer", "new_range", "new_unchecked",
"new_upper_exp", "new_upper_hex", "next", "nll", "no",
"no_builtins", "no_core", "no_coverage", "no_crate_inject",
"no_debug", "no_default_passes", "no_implicit_prelude",
"no_inline", "no_link", "no_main", "no_mangle",
"no_sanitize", "no_stack_check", "no_std", "nomem",
"non_ascii_idents", "non_exhaustive",
"non_exhaustive_omitted_patterns_lint",
"non_lifetime_binders", "non_modrs_mods", "nonblocking",
"none", "nontemporal_store", "noop_method_borrow",
"noop_method_clone", "noop_method_deref", "noprefix",
"noreturn", "nostack", "not", "notable_trait", "note",
"null", "nvptx64", "nvptx_target_feature",
"object_safe_for_dispatch", "of", "off", "offload",
"offset", "offset_of", "offset_of_enum", "offset_of_nested",
"offset_of_slice", "ok_or_else", "old_name",
"omit_gdb_pretty_printer_section", "on", "on_const",
"on_unimplemented", "opaque", "opaque_generic_const_args",
"<opaque>", "ops", "opt_out_copy", "optimize",
"optimize_attribute", "optimized", "optin_builtin_traits",
"option", "option_env", "options", "or", "or_patterns",
"ord_cmp_method", "other", "out", "output",
"overflow_checks", "overlapping_marker_traits", "owned_box",
"packed", "packed_bundled_libs", "panic", "panic_2015",
"panic_2021", "panic_abort", "panic_bounds_check",
"panic_cannot_unwind", "panic_const_add_overflow",
"panic_const_async_fn_resumed",
"panic_const_async_fn_resumed_drop",
"panic_const_async_fn_resumed_panic",
"panic_const_async_gen_fn_resumed",
"panic_const_async_gen_fn_resumed_drop",
"panic_const_async_gen_fn_resumed_panic",
"panic_const_coroutine_resumed",
"panic_const_coroutine_resumed_drop",
"panic_const_coroutine_resumed_panic",
"panic_const_div_by_zero", "panic_const_div_overflow",
"panic_const_gen_fn_none", "panic_const_gen_fn_none_drop",
"panic_const_gen_fn_none_panic", "panic_const_mul_overflow",
"panic_const_neg_overflow", "panic_const_rem_by_zero",
"panic_const_rem_overflow", "panic_const_shl_overflow",
"panic_const_shr_overflow", "panic_const_sub_overflow",
"panic_display", "panic_fmt", "panic_handler", "panic_impl",
"panic_implementation", "panic_in_cleanup", "panic_info",
"panic_invalid_enum_construction", "panic_location",
"panic_misaligned_pointer_dereference", "panic_nounwind",
"panic_null_pointer_dereference", "panic_runtime",
"panic_str_2015", "panic_unwind", "panicking",
"param_attrs", "parent_label", "partial_cmp", "partial_ord",
"passes", "pat", "pat_param", "patchable_function_entry",
"path", "pattern_complexity_limit", "pattern_parentheses",
"pattern_type", "pattern_type_range_trait", "pattern_types",
"phantom_data", "phase", "pic", "pie", "pin",
"pin_ergonomics", "pin_v2", "platform_intrinsics", "plugin",
"plugin_registrar", "plugins", "pointee", "pointee_sized",
"pointee_trait", "pointer", "poll", "post-cleanup",
"post-lto", "postfix_match", "powerpc", "powerpc64",
"powerpc_target_feature", "powf16", "powf32", "powf64",
"powf128", "powif16", "powif32", "powif64", "powif128",
"pre-lto", "precise_capturing",
"precise_capturing_in_traits",
"precise_pointer_size_matching", "predicates",
"pref_align_of", "prefetch_read_data",
"prefetch_read_instruction", "prefetch_write_data",
"prefetch_write_instruction", "prefix_nops", "preg",
"prelude", "prelude_import", "preserves_flags",
"prfchw_target_feature", "proc-macro", "proc_macro",
"proc_macro_attribute", "proc_macro_derive",
"proc_macro_expr", "proc_macro_gen", "proc_macro_hygiene",
"proc_macro_internals", "proc_macro_mod",
"proc_macro_non_items", "proc_macro_path_invoc",
"profiler_runtime", "ptr", "ptr_cast", "ptr_cast_const",
"ptr_cast_mut", "ptr_const_is_null", "ptr_copy",
"ptr_copy_nonoverlapping", "ptr_from_ref",
"ptr_guaranteed_cmp", "ptr_is_null", "ptr_mask",
"ptr_metadata", "ptr_null", "ptr_null_mut",
"ptr_offset_from", "ptr_offset_from_unsigned", "ptr_read",
"ptr_read_unaligned", "ptr_replace", "ptr_swap",
"ptr_swap_nonoverlapping", "ptr_write", "ptr_write_bytes",
"ptr_write_unaligned", "ptr_write_volatile",
"pub_macro_rules", "pub_restricted", "public", "pure",
"pushpop_unsafe", "qreg", "qreg_low4", "qreg_low8",
"quad_precision_float", "question_mark", "quote",
"range_inclusive_new", "raw-dylib", "raw_dylib",
"raw_dylib_elf", "raw_eq", "raw_identifiers", "raw_ref_op",
"re_rebalance_coherence", "read_via_copy", "readonly",
"realloc", "realtime", "reason", "reborrow", "receiver",
"receiver_target", "recursion_limit",
"reexport_test_harness_main", "ref_pat_eat_one_layer_2024",
"ref_pat_eat_one_layer_2024_structural",
"ref_pat_everywhere", "ref_unwind_safe_trait", "reference",
"reflect", "reg", "reg16", "reg32", "reg64", "reg_abcd",
"reg_addr", "reg_byte", "reg_data", "reg_iw", "reg_nonzero",
"reg_pair", "reg_ptr", "reg_upper", "register_attr",
"register_tool", "relaxed_adts", "relaxed_struct_unsize",
"relocation_model", "rem", "rem_assign", "repr", "repr128",
"repr_align", "repr_align_enum", "repr_packed", "repr_simd",
"repr_transparent", "require", "reserve-x18", "residual",
"result", "result_ffi_guarantees",
"return_position_impl_trait_in_trait",
"return_type_notation", "riscv32", "riscv64",
"riscv_target_feature", "rlib", "ropi", "ropi-rwpi",
"rotate_left", "rotate_right", "round_ties_even_f16",
"round_ties_even_f32", "round_ties_even_f64",
"round_ties_even_f128", "roundf16", "roundf32", "roundf64",
"roundf128", "rtm_target_feature", "runtime", "rust",
"rust_2015", "rust_2018", "rust_2018_preview", "rust_2021",
"rust_2024", "rust_analyzer", "rust_begin_unwind",
"rust_cold_cc", "rust_eh_catch_typeinfo",
"rust_eh_personality", "rust_future", "rust_logo",
"rust_out", "rust_preserve_none_cc", "rustc", "rustc_abi",
"rustc_align", "rustc_align_static", "rustc_allocator",
"rustc_allocator_zeroed", "rustc_allocator_zeroed_variant",
"rustc_allow_const_fn_unstable",
"rustc_allow_incoherent_impl",
"rustc_allowed_through_unstable_modules", "rustc_as_ptr",
"rustc_attrs", "rustc_autodiff", "rustc_builtin_macro",
"rustc_capture_analysis", "rustc_clean",
"rustc_coherence_is_core", "rustc_coinductive",
"rustc_confusables", "rustc_const_stable",
"rustc_const_stable_indirect", "rustc_const_unstable",
"rustc_conversion_suggestion", "rustc_deallocator",
"rustc_def_path", "rustc_default_body_unstable",
"rustc_delayed_bug_from_inside_query",
"rustc_deny_explicit_impl", "rustc_deprecated_safe_2024",
"rustc_diagnostic_item", "rustc_diagnostic_macros",
"rustc_do_not_const_check", "rustc_doc_primitive",
"rustc_driver", "rustc_dummy", "rustc_dump_def_parents",
"rustc_dump_item_bounds", "rustc_dump_predicates",
"rustc_dump_user_args", "rustc_dump_vtable",
"rustc_dyn_incompatible_trait",
"rustc_effective_visibility", "rustc_eii_foreign_item",
"rustc_evaluate_where_clauses", "rustc_expected_cgu_reuse",
"rustc_force_inline", "rustc_has_incoherent_inherent_impls",
"rustc_hidden_type_of_opaques", "rustc_if_this_changed",
"rustc_inherit_overflow_checks", "rustc_insignificant_dtor",
"rustc_intrinsic", "rustc_intrinsic_const_stable_indirect",
"rustc_layout", "rustc_layout_scalar_valid_range_end",
"rustc_layout_scalar_valid_range_start",
"rustc_legacy_const_generics",
"rustc_lint_opt_deny_field_access", "rustc_lint_opt_ty",
"rustc_lint_query_instability",
"rustc_lint_untracked_query_information",
"rustc_macro_transparency", "rustc_main", "rustc_mir",
"rustc_must_implement_one_of",
"rustc_never_returns_null_ptr", "rustc_never_type_options",
"rustc_no_implicit_autorefs", "rustc_no_implicit_bounds",
"rustc_no_mir_inline", "rustc_non_const_trait_method",
"rustc_nonnull_optimization_guaranteed", "rustc_nounwind",
"rustc_objc_class", "rustc_objc_selector",
"rustc_object_lifetime_default", "rustc_offload_kernel",
"rustc_on_unimplemented", "rustc_outlives",
"rustc_paren_sugar", "rustc_partition_codegened",
"rustc_partition_reused", "rustc_pass_by_value",
"rustc_pass_indirectly_in_non_rustic_abis", "rustc_peek",
"rustc_peek_liveness", "rustc_peek_maybe_init",
"rustc_peek_maybe_uninit", "rustc_preserve_ub_checks",
"rustc_private", "rustc_proc_macro_decls",
"rustc_promotable", "rustc_pub_transparent",
"rustc_reallocator", "rustc_regions",
"rustc_reservation_impl", "rustc_scalable_vector",
"rustc_should_not_be_called_on_const_items",
"rustc_simd_monomorphize_lane_limit",
"rustc_skip_during_method_dispatch",
"rustc_specialization_trait", "rustc_std_internal_symbol",
"rustc_strict_coherence", "rustc_symbol_name",
"rustc_test_marker", "rustc_then_this_would_need",
"rustc_trivial_field_reads",
"rustc_unsafe_specialization_marker", "rustc_variance",
"rustc_variance_of_opaques", "rustdoc", "rustdoc_internals",
"rustdoc_missing_doc_code_examples", "rustfmt",
"rvalue_static_promotion", "rwpi", "s390x",
"s390x_target_feature", "s390x_target_feature_vector",
"safety", "sanitize", "sanitizer_cfi_generalize_pointers",
"sanitizer_cfi_normalize_integers", "sanitizer_runtime",
"saturating_add", "saturating_sub", "sdylib",
"search_unbox", "select_unpredictable", "self_in_typedefs",
"self_struct_ctor", "semiopaque", "sha2", "sha3",
"sha512_sm_x86", "shadow_call_stack", "shallow", "shl",
"shl_assign", "shorter_tail_lifetimes", "should_panic",
"show", "shr", "shr_assign", "signed", "simd", "simd_add",
"simd_and", "simd_arith_offset", "simd_as", "simd_bitmask",
"simd_bitreverse", "simd_bswap", "simd_carryless_mul",
"simd_cast", "simd_cast_ptr", "simd_ceil", "simd_ctlz",
"simd_ctpop", "simd_cttz", "simd_div", "simd_eq",
"simd_expose_provenance", "simd_extract",
"simd_extract_dyn", "simd_fabs", "simd_fcos", "simd_fexp",
"simd_fexp2", "simd_ffi", "simd_flog", "simd_flog2",
"simd_flog10", "simd_floor", "simd_fma", "simd_fmax",
"simd_fmin", "simd_fsin", "simd_fsqrt", "simd_funnel_shl",
"simd_funnel_shr", "simd_gather", "simd_ge", "simd_gt",
"simd_insert", "simd_insert_dyn", "simd_le", "simd_lt",
"simd_masked_load", "simd_masked_store", "simd_mul",
"simd_ne", "simd_neg", "simd_or", "simd_reduce_add_ordered",
"simd_reduce_add_unordered", "simd_reduce_all",
"simd_reduce_and", "simd_reduce_any", "simd_reduce_max",
"simd_reduce_min", "simd_reduce_mul_ordered",
"simd_reduce_mul_unordered", "simd_reduce_or",
"simd_reduce_xor", "simd_relaxed_fma", "simd_rem",
"simd_round", "simd_round_ties_even", "simd_saturating_add",
"simd_saturating_sub", "simd_scatter", "simd_select",
"simd_select_bitmask", "simd_shl", "simd_shr",
"simd_shuffle", "simd_shuffle_const_generic", "simd_splat",
"simd_sub", "simd_trunc", "simd_with_exposed_provenance",
"simd_xor", "since", "sinf16", "sinf32", "sinf64",
"sinf128", "size", "size_of", "size_of_val", "sized",
"sized_hierarchy", "slice", "slice_from_raw_parts",
"slice_from_raw_parts_mut", "slice_get_unchecked",
"slice_len_fn", "slice_patterns", "slicing_syntax", "soft",
"sparc", "sparc64", "sparc_target_feature", "spe_acc",
"specialization", "speed", "spirv", "spotlight", "sqrtf16",
"sqrtf32", "sqrtf64", "sqrtf128", "sreg", "sreg_low16",
"sse", "sse2", "sse4a_target_feature", "stable",
"staged_api", "start", "state", "static_align",
"static_in_const", "static_nobundle", "static_recursion",
"staticlib", "std", "std_lib_injection", "std_panic",
"std_panic_2015_macro", "std_panic_macro", "stmt",
"stmt_expr_attributes", "stop_after_dataflow", "store",
"str", "str_from_utf8", "str_from_utf8_mut",
"str_from_utf8_unchecked", "str_from_utf8_unchecked_mut",
"str_inherent_from_utf8", "str_inherent_from_utf8_mut",
"str_inherent_from_utf8_unchecked",
"str_inherent_from_utf8_unchecked_mut",
"strict_provenance_lints", "string_deref_patterns",
"stringify", "struct_field_attributes", "struct_inherit",
"struct_variant", "structural_match", "structural_peq",
"sub", "sub_assign", "sub_with_overflow", "suggestion",
"super_let", "supertrait_item_shadowing", "sym", "sync",
"synthetic", "t32", "target", "target_abi", "target_arch",
"target_endian", "target_env", "target_family",
"target_feature", "target_feature_11",
"target_feature_inline_always", "target_has_atomic",
"target_has_atomic_equal_alignment",
"target_has_atomic_load_store", "target_has_reliable_f16",
"target_has_reliable_f16_math", "target_has_reliable_f128",
"target_has_reliable_f128_math", "target_os",
"target_pointer_width", "target_thread_local",
"target_vendor", "tbm_target_feature", "termination",
"termination_trait", "termination_trait_test", "test",
"test_2018_feature", "test_accepted_feature", "test_case",
"test_removed_feature", "test_runner", "test_unstable_lint",
"thread", "thread_local", "three_way_compare", "thumb2",
"thumb-mode", "tmm_reg", "to_string", "to_vec",
"tool_attributes", "tool_lints", "trace_macros",
"track_caller", "trait_alias", "trait_ty",
"trait_upcasting", "transmute", "transmute_generic_consts",
"transmute_opts", "transmute_trait", "transmute_unchecked",
"transparent", "transparent_enums", "transparent_unions",
"trivial_bounds", "trivial_clone", "truncf16", "truncf32",
"truncf64", "truncf128", "try_blocks",
"try_blocks_heterogeneous", "try_capture", "try_from",
"try_into", "try_trait_v2", "try_trait_v2_residual",
"try_update", "tt", "tuple", "tuple_indexing",
"tuple_trait", "two_phase", "ty",
"type_alias_enum_variants", "type_alias_impl_trait",
"type_ascribe", "type_ascription",
"type_changing_struct_update", "type_id", "type_id_eq",
"type_info", "type_ir", "type_ir_infer_ctxt_like",
"type_ir_inherent", "type_ir_interner", "type_length_limit",
"type_macros", "type_name", "type_of", "type_privacy_lints",
"typed_swap_nonoverlapping", "u8", "u8_legacy_const_max",
"u8_legacy_const_min", "u8_legacy_fn_max_value",
"u8_legacy_fn_min_value", "u8_legacy_mod", "u16",
"u16_legacy_const_max", "u16_legacy_const_min",
"u16_legacy_fn_max_value", "u16_legacy_fn_min_value",
"u16_legacy_mod", "u32", "u32_legacy_const_max",
"u32_legacy_const_min", "u32_legacy_fn_max_value",
"u32_legacy_fn_min_value", "u32_legacy_mod", "u64",
"u64_legacy_const_max", "u64_legacy_const_min",
"u64_legacy_fn_max_value", "u64_legacy_fn_min_value",
"u64_legacy_mod", "u128", "u128_legacy_const_max",
"u128_legacy_const_min", "u128_legacy_fn_max_value",
"u128_legacy_fn_min_value", "u128_legacy_mod", "ub_checks",
"unaligned_volatile_load", "unaligned_volatile_store",
"unboxed_closures", "unchecked_add", "unchecked_div",
"unchecked_funnel_shl", "unchecked_funnel_shr",
"unchecked_mul", "unchecked_rem", "unchecked_shl",
"unchecked_shr", "unchecked_sub", "undecorated",
"underscore_const_names", "underscore_imports",
"underscore_lifetimes", "uniform_paths", "unit",
"universal_impl_trait", "unix", "unlikely", "unmarked_api",
"unnamed_fields", "unpin", "unqualified_local_imports",
"unreachable", "unreachable_2015", "unreachable_2015_macro",
"unreachable_2021", "unreachable_code",
"unreachable_display", "unreachable_macro",
"unrestricted_attribute_tokens", "unsafe_attributes",
"unsafe_binders", "unsafe_block_in_unsafe_fn",
"unsafe_cell", "unsafe_cell_raw_get", "unsafe_eii",
"unsafe_extern_blocks", "unsafe_fields",
"unsafe_no_drop_flag", "unsafe_pinned", "unsafe_unpin",
"unsafety", "unsize", "unsized_const_param_ty",
"unsized_const_params", "unsized_fn_params",
"unsized_locals", "unsized_tuple_coercion", "unstable",
"unstable_feature_bound",
"this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via `Cargo.toml` instead?",
"untagged_unions", "unused_imports", "unwind",
"unwind_attributes", "unwind_safe_trait", "unwrap",
"unwrap_binder", "unwrap_or", "update", "use_cloned",
"use_extern_macros", "use_nested_groups", "used",
"used_with_arg", "using", "usize", "usize_legacy_const_max",
"usize_legacy_const_min", "usize_legacy_fn_max_value",
"usize_legacy_fn_min_value", "usize_legacy_mod", "v1",
"v8plus", "va_arg", "va_copy", "va_end", "va_list",
"va_start", "val", "validity", "value", "values", "var",
"variadic", "variant_count", "variants", "vec", "vector",
"verbatim", "version", "vfp2", "vis",
"visible_private_types", "volatile", "volatile_copy_memory",
"volatile_copy_nonoverlapping_memory", "volatile_load",
"volatile_set_memory", "volatile_store", "vreg",
"vreg_low16", "vsreg", "vsx", "vtable_align", "vtable_for",
"vtable_size", "warn", "wasip2", "wasm32", "wasm64",
"wasm_abi", "wasm_import_module", "wasm_target_feature",
"weak", "weak_odr", "where_clause_attrs", "while_let",
"whole-archive", "width", "windows", "windows_subsystem",
"with_negative_coherence", "wrap_binder", "wrapping_add",
"wrapping_div", "wrapping_mul", "wrapping_rem",
"wrapping_rem_euclid", "wrapping_sub", "wreg",
"write_box_via_move", "write_bytes", "write_fmt",
"write_macro", "write_str", "write_via_move",
"writeln_macro", "x86", "x86_64", "x86_amx_intrinsics",
"x87_reg", "x87_target_feature", "xer", "xmm_reg",
"xop_target_feature", "xtensa", "yeet_desugar_details",
"yeet_expr", "yes", "yield_expr", "ymm_reg", "yreg", "zca",
"zfh", "zfhmin", "zmm_reg", "ztso", "0", "1", "2", "3", "4",
"5", "6", "7", "8", "9", "1.95.0-nightly"], extra_symbols)
}
}symbols! {
24 Keywords {
33 DollarCrate: "$crate",
39 PathRoot: "{{root}}",
40 Underscore: "_",
41 As: "as",
47 Break: "break",
48 Const: "const",
49 Continue: "continue",
50 Crate: "crate",
51 Else: "else",
52 Enum: "enum",
53 Extern: "extern",
54 False: "false",
55 Fn: "fn",
56 For: "for",
57 If: "if",
58 Impl: "impl",
59 In: "in",
60 Let: "let",
61 Loop: "loop",
62 Match: "match",
63 Mod: "mod",
64 Move: "move",
65 Mut: "mut",
66 Pub: "pub",
67 Ref: "ref",
68 Return: "return",
69 SelfLower: "self",
70 SelfUpper: "Self",
71 Static: "static",
72 Struct: "struct",
73 Super: "super",
74 Trait: "trait",
75 True: "true",
76 Type: "type",
77 Unsafe: "unsafe",
78 Use: "use",
79 Where: "where",
80 While: "while",
81 Abstract: "abstract",
87 Become: "become",
88 Box: "box",
89 Do: "do",
90 Final: "final",
91 Macro: "macro",
92 Override: "override",
93 Priv: "priv",
94 Typeof: "typeof",
95 Unsized: "unsized",
96 Virtual: "virtual",
97 Yield: "yield",
98 Async: "async", Await: "await", Dyn: "dyn", Gen: "gen", Try: "try", StaticLifetime: "'static",
121 UnderscoreLifetime: "'_",
122 Auto: "auto",
128 Builtin: "builtin",
129 Catch: "catch",
130 ContractEnsures: "contract_ensures",
131 ContractRequires: "contract_requires",
132 Default: "default",
133 MacroRules: "macro_rules",
134 Raw: "raw",
135 Reuse: "reuse",
136 Safe: "safe",
137 Union: "union",
138 Yeet: "yeet",
139 }
141
142 Symbols {
156 Abi,
158 AcqRel,
159 Acquire,
160 Alignment,
161 Arc,
162 ArcWeak,
163 Array,
164 AsMut,
165 AsRef,
166 AssertParamIsClone,
167 AssertParamIsCopy,
168 AssertParamIsEq,
169 AsyncGenFinished,
170 AsyncGenPending,
171 AsyncGenReady,
172 AtomicBool,
173 AtomicI8,
174 AtomicI16,
175 AtomicI32,
176 AtomicI64,
177 AtomicI128,
178 AtomicIsize,
179 AtomicPtr,
180 AtomicU8,
181 AtomicU16,
182 AtomicU32,
183 AtomicU64,
184 AtomicU128,
185 AtomicUsize,
186 BTreeMap,
187 Bool,
188 Borrow,
189 BorrowMut,
190 Break,
191 BuildHasher,
192 C,
193 CStr,
194 CallOnceFuture,
195 CallRefFuture,
196 Capture,
197 Cell,
198 Char,
199 Cleanup,
200 Clone,
201 CoercePointee,
202 CoercePointeeValidated,
203 CoerceUnsized,
204 Const,
205 ConstParamTy,
206 ConstParamTy_,
207 Context,
208 Continue,
209 ControlFlow,
210 Copy,
211 Debug,
212 Default,
213 Deref,
214 DispatchFromDyn,
215 Display,
216 DynTrait,
217 Enum,
218 Eq,
219 Equal,
220 Err,
221 ExternC,
222 ExternRust,
223 Float,
224 FmtArgumentsNew,
225 Fn,
226 FnMut,
227 FnOnce,
228 FnPtr,
229 Formatter,
230 Forward,
231 From,
232 FromIterator,
233 FromResidual,
234 GlobalAlloc,
235 Hash,
236 HashMap,
237 HashSet,
238 Hasher,
239 InCleanup,
240 IndexOutput,
241 Input,
242 Int,
243 Into,
244 IntoFuture,
245 IntoIterator,
246 IntoIteratorItem,
247 IrTyKind,
248 Item,
249 ItemContext,
250 Iterator,
251 IteratorItem,
252 IteratorMap,
253 Layout,
254 Lifetime,
255 LintPass,
256 LocalKey,
257 Mutex,
258 MutexGuard,
259 Named,
260 NonNull,
261 NonZero,
262 None,
263 Normal,
264 Ok,
265 Option,
266 Ord,
267 Ordering,
268 Other,
269 Output,
270 ParamSet,
271 PartialEq,
272 PartialOrd,
273 Pending,
274 PinDerefMutHelper,
275 Pointer,
276 Poll,
277 ProcMacro,
278 Range,
279 RangeCopy,
280 RangeFrom,
281 RangeFromCopy,
282 RangeFull,
283 RangeInclusive,
284 RangeInclusiveCopy,
285 RangeMax,
286 RangeMin,
287 RangeSub,
288 RangeTo,
289 RangeToInclusive,
290 RangeToInclusiveCopy,
291 Rc,
292 RcWeak,
293 Ready,
294 RefCell,
295 Reference,
296 Relaxed,
297 Release,
298 Result,
299 ResumeTy,
300 Reverse,
301 Rust,
302 RustaceansAreAwesome,
303 RwLock,
304 RwLockReadGuard,
305 RwLockWriteGuard,
306 SelfTy,
307 Send,
308 SeqCst,
309 Sized,
310 Slice,
311 SliceIndex,
312 Some,
313 SpanCtxt,
314 Str,
315 String,
316 Struct,
317 StructuralPartialEq,
318 SymbolIntern,
319 Sync,
320 SyncUnsafeCell,
321 Target,
322 This,
323 TokenStream,
324 Trait,
325 TrivialClone,
326 Try,
327 TryCaptureGeneric,
328 TryCapturePrintable,
329 TryFrom,
330 TryInto,
331 Tuple,
332 Ty,
333 TyCtxt,
334 TyKind,
335 Type,
336 Union,
337 Unsize,
338 Vec,
339 Wrapper,
340 _DECLS,
341 __H,
342 __S,
343 __awaitee,
344 __try_var,
345 _t,
346 _task_context,
347 a32,
348 aarch64,
349 aarch64_target_feature,
350 aarch64_unstable_target_feature,
351 aarch64_ver_target_feature,
352 abi,
353 abi_amdgpu_kernel,
354 abi_avr_interrupt,
355 abi_c_cmse_nonsecure_call,
356 abi_cmse_nonsecure_call,
357 abi_custom,
358 abi_efiapi,
359 abi_gpu_kernel,
360 abi_msp430_interrupt,
361 abi_ptx,
362 abi_riscv_interrupt,
363 abi_sysv64,
364 abi_thiscall,
365 abi_unadjusted,
366 abi_vectorcall,
367 abi_x86_interrupt,
368 abort,
369 add,
370 add_assign,
371 add_with_overflow,
372 address,
373 adt_const_params,
374 advanced_slice_patterns,
375 adx_target_feature,
376 aes,
377 aggregate_raw_ptr,
378 alias,
379 align,
380 align_of,
381 align_of_val,
382 alignment,
383 all,
384 alloc,
385 alloc_error_handler,
386 alloc_layout,
387 alloc_zeroed,
388 allocator,
389 allocator_api,
390 allocator_internals,
391 allow,
392 allow_fail,
393 allow_internal_unsafe,
394 allow_internal_unstable,
395 altivec,
396 alu32,
397 always,
398 amdgpu,
399 amdgpu_dispatch_ptr,
400 analysis,
401 and,
402 and_then,
403 anon,
404 anon_assoc,
405 anonymous_lifetime_in_impl_trait,
406 any,
407 append_const_msg,
408 apx_target_feature,
409 arbitrary_enum_discriminant,
410 arbitrary_self_types,
411 arbitrary_self_types_pointers,
412 areg,
413 args,
414 arith_offset,
415 arm,
416 arm64ec,
417 arm_a32: "arm::a32",
418 arm_t32: "arm::t32",
419 arm_target_feature,
420 array,
421 as_dash_needed: "as-needed",
422 as_ref,
423 asm,
424 asm_cfg,
425 asm_const,
426 asm_experimental_arch,
427 asm_experimental_reg,
428 asm_goto,
429 asm_goto_with_outputs,
430 asm_sym,
431 asm_unwind,
432 assert,
433 assert_eq,
434 assert_eq_macro,
435 assert_inhabited,
436 assert_macro,
437 assert_mem_uninitialized_valid,
438 assert_ne_macro,
439 assert_receiver_is_total_eq,
440 assert_zero_valid,
441 asserting,
442 associated_const_equality,
443 associated_consts,
444 associated_type_bounds,
445 associated_type_defaults,
446 associated_types,
447 assume,
448 assume_init,
449 asterisk: "*",
450 async_await,
451 async_call,
452 async_call_mut,
453 async_call_once,
454 async_closure,
455 async_drop,
456 async_drop_in_place,
457 async_fn,
458 async_fn_in_dyn_trait,
459 async_fn_in_trait,
460 async_fn_kind_helper,
461 async_fn_kind_upvars,
462 async_fn_mut,
463 async_fn_once,
464 async_fn_once_output,
465 async_fn_track_caller,
466 async_fn_traits,
467 async_for_loop,
468 async_gen_internals,
469 async_iterator,
470 async_iterator_poll_next,
471 async_trait_bounds,
472 atomic_and,
473 atomic_cxchg,
474 atomic_cxchgweak,
475 atomic_fence,
476 atomic_load,
477 atomic_max,
478 atomic_min,
479 atomic_mod,
480 atomic_nand,
481 atomic_or,
482 atomic_singlethreadfence,
483 atomic_store,
484 atomic_umax,
485 atomic_umin,
486 atomic_xadd,
487 atomic_xchg,
488 atomic_xor,
489 atomic_xsub,
490 atomics,
491 att_syntax,
492 attr,
493 attr_literals,
494 attribute,
495 attributes,
496 audit_that,
497 augmented_assignments,
498 auto_cfg,
499 auto_traits,
500 autodiff,
501 autodiff_forward,
502 autodiff_reverse,
503 automatically_derived,
504 available_externally,
505 avr,
506 avr_target_feature,
507 avx,
508 avx10_target_feature,
509 avx512_target_feature,
510 avx512bw,
511 avx512f,
512 await_macro,
513 bang,
514 begin_panic,
515 bench,
516 bevy_ecs,
517 bikeshed,
518 bikeshed_guaranteed_no_drop,
519 bin,
520 bind_by_move_pattern_guards,
521 bindings_after_at,
522 bitand,
523 bitand_assign,
524 bitor,
525 bitor_assign,
526 bitreverse,
527 bits,
528 bitxor,
529 bitxor_assign,
530 black_box,
531 block,
532 blocking,
533 bool,
534 borrowck_graphviz_format,
535 borrowck_graphviz_postflow,
536 box_new,
537 box_patterns,
538 box_syntax,
539 boxed_slice,
540 bpf,
541 bpf_target_feature,
542 braced_empty_structs,
543 branch,
544 breakpoint,
545 bridge,
546 bswap,
547 built,
548 builtin_syntax,
549 bundle,
550 c,
551 c_dash_variadic,
552 c_str_literals,
553 c_unwind,
554 c_variadic,
555 c_variadic_naked_functions,
556 c_void,
557 call,
558 call_mut,
559 call_once,
560 call_once_future,
561 call_ref_future,
562 caller,
563 caller_location,
564 capture_disjoint_fields,
565 carrying_mul_add,
566 carryless_mul,
567 catch_unwind,
568 cause,
569 cdylib,
570 ceilf16,
571 ceilf32,
572 ceilf64,
573 ceilf128,
574 cfg,
575 cfg_accessible,
576 cfg_attr,
577 cfg_attr_multi,
578 cfg_attr_trace: "<cfg_attr_trace>", cfg_boolean_literals,
580 cfg_contract_checks,
581 cfg_doctest,
582 cfg_emscripten_wasm_eh,
583 cfg_eval,
584 cfg_overflow_checks,
585 cfg_panic,
586 cfg_relocation_model,
587 cfg_sanitize,
588 cfg_sanitizer_cfi,
589 cfg_select,
590 cfg_target_abi,
591 cfg_target_compact,
592 cfg_target_feature,
593 cfg_target_has_atomic,
594 cfg_target_has_atomic_equal_alignment,
595 cfg_target_has_reliable_f16_f128,
596 cfg_target_thread_local,
597 cfg_target_vendor,
598 cfg_trace: "<cfg_trace>", cfg_ub_checks,
600 cfg_version,
601 cfi,
602 cfi_encoding,
603 char,
604 client,
605 clippy,
606 clobber_abi,
607 clone,
608 clone_closures,
609 clone_fn,
610 clone_from,
611 closure,
612 closure_lifetime_binder,
613 closure_to_fn_coercion,
614 closure_track_caller,
615 cmp,
616 cmp_ord_max,
617 cmp_ord_min,
618 cmp_partialeq_eq,
619 cmp_partialeq_ne,
620 cmp_partialord_cmp,
621 cmp_partialord_ge,
622 cmp_partialord_gt,
623 cmp_partialord_le,
624 cmp_partialord_lt,
625 cmpxchg16b_target_feature,
626 cmse_nonsecure_entry,
627 coerce_pointee_validated,
628 coerce_shared,
629 coerce_unsized,
630 cold,
631 cold_path,
632 collapse_debuginfo,
633 column,
634 common,
635 compare_bytes,
636 compare_exchange,
637 compare_exchange_weak,
638 compile_error,
639 compiler,
640 compiler_builtins,
641 compiler_copy,
642 compiler_fence,
643 compiler_move,
644 concat,
645 concat_bytes,
646 concat_idents,
647 conservative_impl_trait,
648 console,
649 const_allocate,
650 const_async_blocks,
651 const_block_items,
652 const_c_variadic,
653 const_closures,
654 const_compare_raw_pointers,
655 const_constructor,
656 const_continue,
657 const_deallocate,
658 const_destruct,
659 const_eval_limit,
660 const_eval_select,
661 const_evaluatable_checked,
662 const_extern_fn,
663 const_fn,
664 const_fn_floating_point_arithmetic,
665 const_fn_fn_ptr_basics,
666 const_fn_trait_bound,
667 const_fn_transmute,
668 const_fn_union,
669 const_fn_unsize,
670 const_for,
671 const_format_args,
672 const_generics,
673 const_generics_defaults,
674 const_if_match,
675 const_impl_trait,
676 const_in_array_repeat_expressions,
677 const_indexing,
678 const_let,
679 const_loop,
680 const_make_global,
681 const_mut_refs,
682 const_panic,
683 const_panic_fmt,
684 const_param_ty,
685 const_precise_live_drops,
686 const_ptr_cast,
687 const_raw_ptr_deref,
688 const_raw_ptr_to_usize_cast,
689 const_refs_to_cell,
690 const_refs_to_static,
691 const_trait_bound_opt_out,
692 const_trait_impl,
693 const_try,
694 const_ty_placeholder: "<const_ty>",
695 constant,
696 constructor,
697 contract_build_check_ensures,
698 contract_check_ensures,
699 contract_check_requires,
700 contract_checks,
701 contracts,
702 contracts_ensures,
703 contracts_internals,
704 contracts_requires,
705 convert,
706 copy,
707 copy_closures,
708 copy_nonoverlapping,
709 copysignf16,
710 copysignf32,
711 copysignf64,
712 copysignf128,
713 core,
714 core_panic,
715 core_panic_2015_macro,
716 core_panic_macro,
717 coroutine,
718 coroutine_clone,
719 coroutine_resume,
720 coroutine_return,
721 coroutine_state,
722 coroutine_yield,
723 coroutines,
724 cosf16,
725 cosf32,
726 cosf64,
727 cosf128,
728 count,
729 coverage,
730 coverage_attribute,
731 cr,
732 crate_in_paths,
733 crate_local,
734 crate_name,
735 crate_type,
736 crate_visibility_modifier,
737 crt_dash_static: "crt-static",
738 csky,
739 csky_target_feature,
740 cstr_type,
741 cstring_type,
742 ctlz,
743 ctlz_nonzero,
744 ctpop,
745 ctr,
746 cttz,
747 cttz_nonzero,
748 custom_attribute,
749 custom_code_classes_in_docs,
750 custom_derive,
751 custom_inner_attributes,
752 custom_mir,
753 custom_test_frameworks,
754 d,
755 d32,
756 dead_code,
757 dealloc,
758 debug,
759 debug_assert_eq_macro,
760 debug_assert_macro,
761 debug_assert_ne_macro,
762 debug_assertions,
763 debug_struct_fields_finish,
764 debug_tuple_fields_finish,
765 debugger_visualizer,
766 decl_macro,
767 declare_lint_pass,
768 decorated,
769 default_alloc_error_handler,
770 default_field_values,
771 default_fn,
772 default_lib_allocator,
773 default_method_body_is_const,
774 default_trait1,
779 default_trait2,
780 default_trait3,
781 default_trait4,
782 default_type_parameter_fallback,
784 default_type_params,
785 define_opaque,
786 deny,
787 deprecated,
788 deprecated_safe,
789 deprecated_suggestion,
790 deref,
791 deref_method,
792 deref_mut,
793 deref_patterns,
794 deref_pure,
795 deref_target,
796 derive,
797 derive_const,
798 derive_const_issue: "118304",
799 derive_default_enum,
800 derive_from,
801 derive_smart_pointer,
802 destruct,
803 destructuring_assignment,
804 diagnostic,
805 diagnostic_namespace,
806 diagnostic_on_const,
807 dialect,
808 direct,
809 discriminant_kind,
810 discriminant_type,
811 discriminant_value,
812 disjoint_bitor,
813 dispatch_from_dyn,
814 div,
815 div_assign,
816 diverging_block_default,
817 dl,
818 do_not_recommend,
819 doc,
820 doc_alias,
821 doc_auto_cfg,
822 doc_cfg,
823 doc_cfg_hide,
824 doc_keyword,
825 doc_masked,
826 doc_notable_trait,
827 doc_primitive,
828 doc_spotlight,
829 doctest,
830 dotdot_in_tuple_patterns,
831 dotdoteq_in_patterns,
832 dreg,
833 dreg_low8,
834 dreg_low16,
835 drop,
836 drop_in_place,
837 drop_types_in_const,
838 dropck_eyepatch,
839 dropck_parametricity,
840 dummy: "<!dummy!>", dummy_cgu_name,
842 dylib,
843 dyn_compatible_for_dispatch,
844 dyn_metadata,
845 dyn_star,
846 dyn_trait,
847 dynamic_no_pic: "dynamic-no-pic",
848 e,
849 edition_panic,
850 effective_target_features,
851 effects,
852 eh_catch_typeinfo,
853 eh_personality,
854 eii,
855 eii_declaration,
856 eii_internals,
857 eii_shared_macro,
858 element_ty,
859 empty: "",
867 emscripten_wasm_eh,
868 enable,
869 end,
870 entry_nops,
871 env,
872 env_CFG_RELEASE: env!("CFG_RELEASE"),
873 eq,
874 ergonomic_clones,
875 ermsb_target_feature,
876 exact_div,
877 except,
878 exception_handling: "exception-handling",
879 exclusive_range_pattern,
880 exhaustive_integer_patterns,
881 exhaustive_patterns,
882 existential_type,
883 exp2f16,
884 exp2f32,
885 exp2f64,
886 exp2f128,
887 expect,
888 expected,
889 expf16,
890 expf32,
891 expf64,
892 expf128,
893 explicit_extern_abis,
894 explicit_generic_args_with_impl_trait,
895 explicit_tail_calls,
896 export_name,
897 export_stable,
898 export_symbols: "export-symbols",
899 expr,
900 expr_2021,
901 expr_fragment_specifier_2024,
902 extended_key_value_attributes,
903 extended_varargs_abi_support,
904 extern_absolute_paths,
905 extern_crate_item_prelude,
906 extern_crate_self,
907 extern_in_paths,
908 extern_item_impls,
909 extern_prelude,
910 extern_system_varargs,
911 extern_types,
912 extern_weak,
913 external,
914 external_doc,
915 f,
916 f16,
917 f16_nan,
918 f16c_target_feature,
919 f32,
920 f32_nan,
921 f64,
922 f64_nan,
923 f128,
924 f128_nan,
925 fabsf16,
926 fabsf32,
927 fabsf64,
928 fabsf128,
929 fadd_algebraic,
930 fadd_fast,
931 fake_variadic,
932 fallback,
933 fdiv_algebraic,
934 fdiv_fast,
935 feature,
936 fence,
937 ferris: "🦀",
938 fetch_update,
939 ffi_const,
940 ffi_pure,
941 ffi_returns_twice,
942 field_init_shorthand,
943 fields,
944 file,
945 final_associated_functions,
946 float_to_int_unchecked,
947 floorf16,
948 floorf32,
949 floorf64,
950 floorf128,
951 fmaf16,
952 fmaf32,
953 fmaf64,
954 fmaf128,
955 fmt,
956 fmt_debug,
957 fmul_algebraic,
958 fmul_fast,
959 fmuladdf16,
960 fmuladdf32,
961 fmuladdf64,
962 fmuladdf128,
963 fn_align,
964 fn_body,
965 fn_delegation,
966 fn_must_use,
967 fn_mut,
968 fn_once,
969 fn_once_output,
970 fn_ptr_addr,
971 fn_ptr_trait,
972 forbid,
973 force_target_feature,
974 forget,
975 format_args,
976 format_args_capture,
977 format_args_nl,
978 format_argument,
979 format_arguments,
980 format_macro,
981 framework,
982 freeze,
983 freeze_impls,
984 freg,
985 frem_algebraic,
986 frem_fast,
987 from,
988 from_desugaring,
989 from_iter,
990 from_output,
991 from_residual,
992 from_size_align_unchecked,
993 from_size_alignment_unchecked,
994 from_str,
995 from_str_nonconst,
996 from_usize,
997 from_yeet,
998 frontmatter,
999 fsub_algebraic,
1000 fsub_fast,
1001 full,
1002 fundamental,
1003 fused_iterator,
1004 future_output,
1005 future_trait,
1006 fxsr,
1007 gdb_script_file,
1008 ge,
1009 gen_blocks,
1010 gen_future,
1011 generator_clone,
1012 generators,
1013 generic_arg_infer,
1014 generic_assert,
1015 generic_associated_types,
1016 generic_associated_types_extended,
1017 generic_const_exprs,
1018 generic_const_items,
1019 generic_const_parameter_types,
1020 generic_param_attrs,
1021 generic_pattern_types,
1022 generics,
1023 get_context,
1024 global_alloc_ty,
1025 global_allocator,
1026 global_asm,
1027 global_registration,
1028 globs,
1029 gt,
1030 guard_patterns,
1031 half_open_range_patterns,
1032 half_open_range_patterns_in_slices,
1033 hash,
1034 hexagon,
1035 hexagon_target_feature,
1036 hidden,
1037 hide,
1038 homogeneous_aggregate,
1039 html_favicon_url,
1040 html_logo_url,
1041 html_no_source,
1042 html_playground_url,
1043 html_root_url,
1044 hwaddress,
1045 i8,
1046 i16,
1047 i32,
1048 i64,
1049 i128,
1050 i128_type,
1051 ident,
1052 if_let,
1053 if_let_guard,
1054 if_let_rescope,
1055 if_while_or_patterns,
1056 ignore,
1057 immediate_abort: "immediate-abort",
1058 impl_header_lifetime_elision,
1059 impl_lint_pass,
1060 impl_trait_in_assoc_type,
1061 impl_trait_in_bindings,
1062 impl_trait_in_fn_trait_return,
1063 impl_trait_projections,
1064 implied_by,
1065 import,
1066 import_name_type,
1067 import_shadowing,
1068 import_trait_associated_functions,
1069 imported_main,
1070 in_band_lifetimes,
1071 include,
1072 include_bytes,
1073 include_str,
1074 inclusive_range_syntax,
1075 index,
1076 index_mut,
1077 infer_outlives_requirements,
1078 infer_static_outlives_requirements,
1079 inherent_associated_types,
1080 initial,
1081 inlateout,
1082 inline,
1083 inline_const,
1084 inline_const_pat,
1085 inout,
1086 inputs,
1087 instruction_set,
1088 integer_: "integer", integral,
1090 internal,
1091 internal_features,
1092 into_async_iter_into_iter,
1093 into_future,
1094 into_iter,
1095 into_try_type,
1096 intra_doc_pointers,
1097 intrinsics,
1098 irrefutable_let_patterns,
1099 is,
1100 is_auto,
1101 is_val_statically_known,
1102 isa_attribute,
1103 isize,
1104 issue,
1105 issue_5723_bootstrap,
1106 issue_tracker_base_url,
1107 item,
1108 item_like_imports,
1109 iter,
1110 iter_mut,
1111 iterator,
1112 iterator_collect_fn,
1113 kcfi,
1114 kernel_address,
1115 keylocker_x86,
1116 keyword,
1117 kind,
1118 kreg,
1119 kreg0,
1120 label,
1121 label_break_value,
1122 lahfsahf_target_feature,
1123 lang,
1124 lang_items,
1125 large_assignments,
1126 last,
1127 lateout,
1128 lazy_normalization_consts,
1129 lazy_type_alias,
1130 le,
1131 legacy_receiver,
1132 len,
1133 let_chains,
1134 let_else,
1135 lhs,
1136 lib,
1137 libc,
1138 lifetime,
1139 lifetime_capture_rules_2024,
1140 lifetimes,
1141 line,
1142 link,
1143 link_arg_attribute,
1144 link_args,
1145 link_cfg,
1146 link_dash_arg: "link-arg",
1147 link_llvm_intrinsics,
1148 link_name,
1149 link_ordinal,
1150 link_section,
1151 linkage,
1152 linker,
1153 linker_messages,
1154 linkonce,
1155 linkonce_odr,
1156 lint_reasons,
1157 literal,
1158 load,
1159 loaded_from_disk,
1160 local,
1161 local_inner_macros,
1162 log2f16,
1163 log2f32,
1164 log2f64,
1165 log2f128,
1166 log10f16,
1167 log10f32,
1168 log10f64,
1169 log10f128,
1170 log_syntax,
1171 logf16,
1172 logf32,
1173 logf64,
1174 logf128,
1175 loongarch32,
1176 loongarch64,
1177 loongarch_target_feature,
1178 loop_break_value,
1179 loop_match,
1180 lr,
1181 lt,
1182 m68k,
1183 m68k_target_feature,
1184 macro_at_most_once_rep,
1185 macro_attr,
1186 macro_attributes_in_derive_output,
1187 macro_derive,
1188 macro_escape,
1189 macro_export,
1190 macro_lifetime_matcher,
1191 macro_literal_matcher,
1192 macro_metavar_expr,
1193 macro_metavar_expr_concat,
1194 macro_reexport,
1195 macro_use,
1196 macro_vis_matcher,
1197 macros_in_extern,
1198 main,
1199 managed_boxes,
1200 manually_drop,
1201 map,
1202 map_err,
1203 marker,
1204 marker_trait_attr,
1205 masked,
1206 match_beginning_vert,
1207 match_default_bindings,
1208 maximumf16,
1209 maximumf32,
1210 maximumf64,
1211 maximumf128,
1212 maxnumf16,
1213 maxnumf32,
1214 maxnumf64,
1215 maxnumf128,
1216 may_dangle,
1217 may_unwind,
1218 maybe_uninit,
1219 maybe_uninit_uninit,
1220 maybe_uninit_zeroed,
1221 mem_align_const,
1222 mem_discriminant,
1223 mem_drop,
1224 mem_forget,
1225 mem_size_const,
1226 mem_swap,
1227 mem_uninitialized,
1228 mem_variant_count,
1229 mem_zeroed,
1230 member_constraints,
1231 memory,
1232 memtag,
1233 message,
1234 meta,
1235 meta_sized,
1236 metadata_type,
1237 mgca_type_const_syntax,
1238 min_const_fn,
1239 min_const_generics,
1240 min_const_unsafe_fn,
1241 min_exhaustive_patterns,
1242 min_generic_const_args,
1243 min_specialization,
1244 min_type_alias_impl_trait,
1245 minimumf16,
1246 minimumf32,
1247 minimumf64,
1248 minimumf128,
1249 minnumf16,
1250 minnumf32,
1251 minnumf64,
1252 minnumf128,
1253 mips,
1254 mips32r6,
1255 mips64,
1256 mips64r6,
1257 mips_target_feature,
1258 mir_assume,
1259 mir_basic_block,
1260 mir_call,
1261 mir_cast_ptr_to_ptr,
1262 mir_cast_transmute,
1263 mir_cast_unsize,
1264 mir_checked,
1265 mir_debuginfo,
1266 mir_discriminant,
1267 mir_drop,
1268 mir_field,
1269 mir_goto,
1270 mir_make_place,
1271 mir_move,
1272 mir_offset,
1273 mir_ptr_metadata,
1274 mir_retag,
1275 mir_return,
1276 mir_return_to,
1277 mir_set_discriminant,
1278 mir_static,
1279 mir_static_mut,
1280 mir_storage_dead,
1281 mir_storage_live,
1282 mir_tail_call,
1283 mir_unreachable,
1284 mir_unwind_cleanup,
1285 mir_unwind_continue,
1286 mir_unwind_resume,
1287 mir_unwind_terminate,
1288 mir_unwind_terminate_reason,
1289 mir_unwind_unreachable,
1290 mir_variant,
1291 miri,
1292 mmx_reg,
1293 modifiers,
1294 module,
1295 module_path,
1296 more_maybe_bounds,
1297 more_qualified_paths,
1298 more_struct_aliases,
1299 movbe_target_feature,
1300 move_ref_pattern,
1301 move_size_limit,
1302 movrs_target_feature,
1303 msp430,
1304 mul,
1305 mul_assign,
1306 mul_with_overflow,
1307 multiple_supertrait_upcastable,
1308 must_not_suspend,
1309 must_use,
1310 mut_preserve_binding_mode_2024,
1311 mut_ref,
1312 mutable,
1313 naked,
1314 naked_asm,
1315 naked_functions,
1316 naked_functions_rustic_abi,
1317 naked_functions_target_feature,
1318 name,
1319 names,
1320 native_link_modifiers,
1321 native_link_modifiers_as_needed,
1322 native_link_modifiers_bundle,
1323 native_link_modifiers_verbatim,
1324 native_link_modifiers_whole_archive,
1325 natvis_file,
1326 ne,
1327 needs_allocator,
1328 needs_drop,
1329 needs_panic_runtime,
1330 neg,
1331 negate_unsigned,
1332 negative_bounds,
1333 negative_impls,
1334 neon,
1335 nested,
1336 never,
1337 never_patterns,
1338 never_type,
1339 never_type_fallback,
1340 new,
1341 new_binary,
1342 new_debug,
1343 new_debug_noop,
1344 new_display,
1345 new_lower_exp,
1346 new_lower_hex,
1347 new_octal,
1348 new_pointer,
1349 new_range,
1350 new_unchecked,
1351 new_upper_exp,
1352 new_upper_hex,
1353 next,
1354 nll,
1355 no,
1356 no_builtins,
1357 no_core,
1358 no_coverage,
1359 no_crate_inject,
1360 no_debug,
1361 no_default_passes,
1362 no_implicit_prelude,
1363 no_inline,
1364 no_link,
1365 no_main,
1366 no_mangle,
1367 no_sanitize,
1368 no_stack_check,
1369 no_std,
1370 nomem,
1371 non_ascii_idents,
1372 non_exhaustive,
1373 non_exhaustive_omitted_patterns_lint,
1374 non_lifetime_binders,
1375 non_modrs_mods,
1376 nonblocking,
1377 none,
1378 nontemporal_store,
1379 noop_method_borrow,
1380 noop_method_clone,
1381 noop_method_deref,
1382 noprefix,
1383 noreturn,
1384 nostack,
1385 not,
1386 notable_trait,
1387 note,
1388 null,
1389 nvptx64,
1390 nvptx_target_feature,
1391 object_safe_for_dispatch,
1392 of,
1393 off,
1394 offload,
1395 offset,
1396 offset_of,
1397 offset_of_enum,
1398 offset_of_nested,
1399 offset_of_slice,
1400 ok_or_else,
1401 old_name,
1402 omit_gdb_pretty_printer_section,
1403 on,
1404 on_const,
1405 on_unimplemented,
1406 opaque,
1407 opaque_generic_const_args,
1408 opaque_module_name_placeholder: "<opaque>",
1409 ops,
1410 opt_out_copy,
1411 optimize,
1412 optimize_attribute,
1413 optimized,
1414 optin_builtin_traits,
1415 option,
1416 option_env,
1417 options,
1418 or,
1419 or_patterns,
1420 ord_cmp_method,
1421 other,
1422 out,
1423 output,
1424 overflow_checks,
1425 overlapping_marker_traits,
1426 owned_box,
1427 packed,
1428 packed_bundled_libs,
1429 panic,
1430 panic_2015,
1431 panic_2021,
1432 panic_abort,
1433 panic_bounds_check,
1434 panic_cannot_unwind,
1435 panic_const_add_overflow,
1436 panic_const_async_fn_resumed,
1437 panic_const_async_fn_resumed_drop,
1438 panic_const_async_fn_resumed_panic,
1439 panic_const_async_gen_fn_resumed,
1440 panic_const_async_gen_fn_resumed_drop,
1441 panic_const_async_gen_fn_resumed_panic,
1442 panic_const_coroutine_resumed,
1443 panic_const_coroutine_resumed_drop,
1444 panic_const_coroutine_resumed_panic,
1445 panic_const_div_by_zero,
1446 panic_const_div_overflow,
1447 panic_const_gen_fn_none,
1448 panic_const_gen_fn_none_drop,
1449 panic_const_gen_fn_none_panic,
1450 panic_const_mul_overflow,
1451 panic_const_neg_overflow,
1452 panic_const_rem_by_zero,
1453 panic_const_rem_overflow,
1454 panic_const_shl_overflow,
1455 panic_const_shr_overflow,
1456 panic_const_sub_overflow,
1457 panic_display,
1458 panic_fmt,
1459 panic_handler,
1460 panic_impl,
1461 panic_implementation,
1462 panic_in_cleanup,
1463 panic_info,
1464 panic_invalid_enum_construction,
1465 panic_location,
1466 panic_misaligned_pointer_dereference,
1467 panic_nounwind,
1468 panic_null_pointer_dereference,
1469 panic_runtime,
1470 panic_str_2015,
1471 panic_unwind,
1472 panicking,
1473 param_attrs,
1474 parent_label,
1475 partial_cmp,
1476 partial_ord,
1477 passes,
1478 pat,
1479 pat_param,
1480 patchable_function_entry,
1481 path,
1482 pattern_complexity_limit,
1483 pattern_parentheses,
1484 pattern_type,
1485 pattern_type_range_trait,
1486 pattern_types,
1487 phantom_data,
1488 phase,
1489 pic,
1490 pie,
1491 pin,
1492 pin_ergonomics,
1493 pin_v2,
1494 platform_intrinsics,
1495 plugin,
1496 plugin_registrar,
1497 plugins,
1498 pointee,
1499 pointee_sized,
1500 pointee_trait,
1501 pointer,
1502 poll,
1503 post_cleanup: "post-cleanup",
1504 post_dash_lto: "post-lto",
1505 postfix_match,
1506 powerpc,
1507 powerpc64,
1508 powerpc_target_feature,
1509 powf16,
1510 powf32,
1511 powf64,
1512 powf128,
1513 powif16,
1514 powif32,
1515 powif64,
1516 powif128,
1517 pre_dash_lto: "pre-lto",
1518 precise_capturing,
1519 precise_capturing_in_traits,
1520 precise_pointer_size_matching,
1521 predicates,
1522 pref_align_of,
1523 prefetch_read_data,
1524 prefetch_read_instruction,
1525 prefetch_write_data,
1526 prefetch_write_instruction,
1527 prefix_nops,
1528 preg,
1529 prelude,
1530 prelude_import,
1531 preserves_flags,
1532 prfchw_target_feature,
1533 proc_dash_macro: "proc-macro",
1534 proc_macro,
1535 proc_macro_attribute,
1536 proc_macro_derive,
1537 proc_macro_expr,
1538 proc_macro_gen,
1539 proc_macro_hygiene,
1540 proc_macro_internals,
1541 proc_macro_mod,
1542 proc_macro_non_items,
1543 proc_macro_path_invoc,
1544 profiler_runtime,
1545 ptr,
1546 ptr_cast,
1547 ptr_cast_const,
1548 ptr_cast_mut,
1549 ptr_const_is_null,
1550 ptr_copy,
1551 ptr_copy_nonoverlapping,
1552 ptr_from_ref,
1553 ptr_guaranteed_cmp,
1554 ptr_is_null,
1555 ptr_mask,
1556 ptr_metadata,
1557 ptr_null,
1558 ptr_null_mut,
1559 ptr_offset_from,
1560 ptr_offset_from_unsigned,
1561 ptr_read,
1562 ptr_read_unaligned,
1563 ptr_replace,
1564 ptr_swap,
1565 ptr_swap_nonoverlapping,
1566 ptr_write,
1567 ptr_write_bytes,
1568 ptr_write_unaligned,
1569 ptr_write_volatile,
1570 pub_macro_rules,
1571 pub_restricted,
1572 public,
1573 pure,
1574 pushpop_unsafe,
1575 qreg,
1576 qreg_low4,
1577 qreg_low8,
1578 quad_precision_float,
1579 question_mark,
1580 quote,
1581 range_inclusive_new,
1582 raw_dash_dylib: "raw-dylib",
1583 raw_dylib,
1584 raw_dylib_elf,
1585 raw_eq,
1586 raw_identifiers,
1587 raw_ref_op,
1588 re_rebalance_coherence,
1589 read_via_copy,
1590 readonly,
1591 realloc,
1592 realtime,
1593 reason,
1594 reborrow,
1595 receiver,
1596 receiver_target,
1597 recursion_limit,
1598 reexport_test_harness_main,
1599 ref_pat_eat_one_layer_2024,
1600 ref_pat_eat_one_layer_2024_structural,
1601 ref_pat_everywhere,
1602 ref_unwind_safe_trait,
1603 reference,
1604 reflect,
1605 reg,
1606 reg16,
1607 reg32,
1608 reg64,
1609 reg_abcd,
1610 reg_addr,
1611 reg_byte,
1612 reg_data,
1613 reg_iw,
1614 reg_nonzero,
1615 reg_pair,
1616 reg_ptr,
1617 reg_upper,
1618 register_attr,
1619 register_tool,
1620 relaxed_adts,
1621 relaxed_struct_unsize,
1622 relocation_model,
1623 rem,
1624 rem_assign,
1625 repr,
1626 repr128,
1627 repr_align,
1628 repr_align_enum,
1629 repr_packed,
1630 repr_simd,
1631 repr_transparent,
1632 require,
1633 reserve_x18: "reserve-x18",
1634 residual,
1635 result,
1636 result_ffi_guarantees,
1637 return_position_impl_trait_in_trait,
1638 return_type_notation,
1639 riscv32,
1640 riscv64,
1641 riscv_target_feature,
1642 rlib,
1643 ropi,
1644 ropi_rwpi: "ropi-rwpi",
1645 rotate_left,
1646 rotate_right,
1647 round_ties_even_f16,
1648 round_ties_even_f32,
1649 round_ties_even_f64,
1650 round_ties_even_f128,
1651 roundf16,
1652 roundf32,
1653 roundf64,
1654 roundf128,
1655 rtm_target_feature,
1656 runtime,
1657 rust,
1658 rust_2015,
1659 rust_2018,
1660 rust_2018_preview,
1661 rust_2021,
1662 rust_2024,
1663 rust_analyzer,
1664 rust_begin_unwind,
1665 rust_cold_cc,
1666 rust_eh_catch_typeinfo,
1667 rust_eh_personality,
1668 rust_future,
1669 rust_logo,
1670 rust_out,
1671 rust_preserve_none_cc,
1672 rustc,
1673 rustc_abi,
1674 rustc_align,
1676 rustc_align_static,
1677 rustc_allocator,
1678 rustc_allocator_zeroed,
1679 rustc_allocator_zeroed_variant,
1680 rustc_allow_const_fn_unstable,
1681 rustc_allow_incoherent_impl,
1682 rustc_allowed_through_unstable_modules,
1683 rustc_as_ptr,
1684 rustc_attrs,
1685 rustc_autodiff,
1686 rustc_builtin_macro,
1687 rustc_capture_analysis,
1688 rustc_clean,
1689 rustc_coherence_is_core,
1690 rustc_coinductive,
1691 rustc_confusables,
1692 rustc_const_stable,
1693 rustc_const_stable_indirect,
1694 rustc_const_unstable,
1695 rustc_conversion_suggestion,
1696 rustc_deallocator,
1697 rustc_def_path,
1698 rustc_default_body_unstable,
1699 rustc_delayed_bug_from_inside_query,
1700 rustc_deny_explicit_impl,
1701 rustc_deprecated_safe_2024,
1702 rustc_diagnostic_item,
1703 rustc_diagnostic_macros,
1704 rustc_do_not_const_check,
1705 rustc_doc_primitive,
1706 rustc_driver,
1707 rustc_dummy,
1708 rustc_dump_def_parents,
1709 rustc_dump_item_bounds,
1710 rustc_dump_predicates,
1711 rustc_dump_user_args,
1712 rustc_dump_vtable,
1713 rustc_dyn_incompatible_trait,
1714 rustc_effective_visibility,
1715 rustc_eii_foreign_item,
1716 rustc_evaluate_where_clauses,
1717 rustc_expected_cgu_reuse,
1718 rustc_force_inline,
1719 rustc_has_incoherent_inherent_impls,
1720 rustc_hidden_type_of_opaques,
1721 rustc_if_this_changed,
1722 rustc_inherit_overflow_checks,
1723 rustc_insignificant_dtor,
1724 rustc_intrinsic,
1725 rustc_intrinsic_const_stable_indirect,
1726 rustc_layout,
1727 rustc_layout_scalar_valid_range_end,
1728 rustc_layout_scalar_valid_range_start,
1729 rustc_legacy_const_generics,
1730 rustc_lint_opt_deny_field_access,
1731 rustc_lint_opt_ty,
1732 rustc_lint_query_instability,
1733 rustc_lint_untracked_query_information,
1734 rustc_macro_transparency,
1735 rustc_main,
1736 rustc_mir,
1737 rustc_must_implement_one_of,
1738 rustc_never_returns_null_ptr,
1739 rustc_never_type_options,
1740 rustc_no_implicit_autorefs,
1741 rustc_no_implicit_bounds,
1742 rustc_no_mir_inline,
1743 rustc_non_const_trait_method,
1744 rustc_nonnull_optimization_guaranteed,
1745 rustc_nounwind,
1746 rustc_objc_class,
1747 rustc_objc_selector,
1748 rustc_object_lifetime_default,
1749 rustc_offload_kernel,
1750 rustc_on_unimplemented,
1751 rustc_outlives,
1752 rustc_paren_sugar,
1753 rustc_partition_codegened,
1754 rustc_partition_reused,
1755 rustc_pass_by_value,
1756 rustc_pass_indirectly_in_non_rustic_abis,
1757 rustc_peek,
1758 rustc_peek_liveness,
1759 rustc_peek_maybe_init,
1760 rustc_peek_maybe_uninit,
1761 rustc_preserve_ub_checks,
1762 rustc_private,
1763 rustc_proc_macro_decls,
1764 rustc_promotable,
1765 rustc_pub_transparent,
1766 rustc_reallocator,
1767 rustc_regions,
1768 rustc_reservation_impl,
1769 rustc_scalable_vector,
1770 rustc_should_not_be_called_on_const_items,
1771 rustc_simd_monomorphize_lane_limit,
1772 rustc_skip_during_method_dispatch,
1773 rustc_specialization_trait,
1774 rustc_std_internal_symbol,
1775 rustc_strict_coherence,
1776 rustc_symbol_name,
1777 rustc_test_marker,
1778 rustc_then_this_would_need,
1779 rustc_trivial_field_reads,
1780 rustc_unsafe_specialization_marker,
1781 rustc_variance,
1782 rustc_variance_of_opaques,
1783 rustdoc,
1784 rustdoc_internals,
1785 rustdoc_missing_doc_code_examples,
1786 rustfmt,
1787 rvalue_static_promotion,
1788 rwpi,
1789 s390x,
1790 s390x_target_feature,
1791 s390x_target_feature_vector,
1792 safety,
1793 sanitize,
1794 sanitizer_cfi_generalize_pointers,
1795 sanitizer_cfi_normalize_integers,
1796 sanitizer_runtime,
1797 saturating_add,
1798 saturating_sub,
1799 sdylib,
1800 search_unbox,
1801 select_unpredictable,
1802 self_in_typedefs,
1803 self_struct_ctor,
1804 semiopaque,
1805 sha2,
1806 sha3,
1807 sha512_sm_x86,
1808 shadow_call_stack,
1809 shallow,
1810 shl,
1811 shl_assign,
1812 shorter_tail_lifetimes,
1813 should_panic,
1814 show,
1815 shr,
1816 shr_assign,
1817 signed,
1818 simd,
1819 simd_add,
1820 simd_and,
1821 simd_arith_offset,
1822 simd_as,
1823 simd_bitmask,
1824 simd_bitreverse,
1825 simd_bswap,
1826 simd_carryless_mul,
1827 simd_cast,
1828 simd_cast_ptr,
1829 simd_ceil,
1830 simd_ctlz,
1831 simd_ctpop,
1832 simd_cttz,
1833 simd_div,
1834 simd_eq,
1835 simd_expose_provenance,
1836 simd_extract,
1837 simd_extract_dyn,
1838 simd_fabs,
1839 simd_fcos,
1840 simd_fexp,
1841 simd_fexp2,
1842 simd_ffi,
1843 simd_flog,
1844 simd_flog2,
1845 simd_flog10,
1846 simd_floor,
1847 simd_fma,
1848 simd_fmax,
1849 simd_fmin,
1850 simd_fsin,
1851 simd_fsqrt,
1852 simd_funnel_shl,
1853 simd_funnel_shr,
1854 simd_gather,
1855 simd_ge,
1856 simd_gt,
1857 simd_insert,
1858 simd_insert_dyn,
1859 simd_le,
1860 simd_lt,
1861 simd_masked_load,
1862 simd_masked_store,
1863 simd_mul,
1864 simd_ne,
1865 simd_neg,
1866 simd_or,
1867 simd_reduce_add_ordered,
1868 simd_reduce_add_unordered,
1869 simd_reduce_all,
1870 simd_reduce_and,
1871 simd_reduce_any,
1872 simd_reduce_max,
1873 simd_reduce_min,
1874 simd_reduce_mul_ordered,
1875 simd_reduce_mul_unordered,
1876 simd_reduce_or,
1877 simd_reduce_xor,
1878 simd_relaxed_fma,
1879 simd_rem,
1880 simd_round,
1881 simd_round_ties_even,
1882 simd_saturating_add,
1883 simd_saturating_sub,
1884 simd_scatter,
1885 simd_select,
1886 simd_select_bitmask,
1887 simd_shl,
1888 simd_shr,
1889 simd_shuffle,
1890 simd_shuffle_const_generic,
1891 simd_splat,
1892 simd_sub,
1893 simd_trunc,
1894 simd_with_exposed_provenance,
1895 simd_xor,
1896 since,
1897 sinf16,
1898 sinf32,
1899 sinf64,
1900 sinf128,
1901 size,
1902 size_of,
1903 size_of_val,
1904 sized,
1905 sized_hierarchy,
1906 slice,
1907 slice_from_raw_parts,
1908 slice_from_raw_parts_mut,
1909 slice_get_unchecked,
1910 slice_len_fn,
1911 slice_patterns,
1912 slicing_syntax,
1913 soft,
1914 sparc,
1915 sparc64,
1916 sparc_target_feature,
1917 spe_acc,
1918 specialization,
1919 speed,
1920 spirv,
1921 spotlight,
1922 sqrtf16,
1923 sqrtf32,
1924 sqrtf64,
1925 sqrtf128,
1926 sreg,
1927 sreg_low16,
1928 sse,
1929 sse2,
1930 sse4a_target_feature,
1931 stable,
1932 staged_api,
1933 start,
1934 state,
1935 static_align,
1936 static_in_const,
1937 static_nobundle,
1938 static_recursion,
1939 staticlib,
1940 std,
1941 std_lib_injection,
1942 std_panic,
1943 std_panic_2015_macro,
1944 std_panic_macro,
1945 stmt,
1946 stmt_expr_attributes,
1947 stop_after_dataflow,
1948 store,
1949 str,
1950 str_from_utf8,
1951 str_from_utf8_mut,
1952 str_from_utf8_unchecked,
1953 str_from_utf8_unchecked_mut,
1954 str_inherent_from_utf8,
1955 str_inherent_from_utf8_mut,
1956 str_inherent_from_utf8_unchecked,
1957 str_inherent_from_utf8_unchecked_mut,
1958 strict_provenance_lints,
1959 string_deref_patterns,
1960 stringify,
1961 struct_field_attributes,
1962 struct_inherit,
1963 struct_variant,
1964 structural_match,
1965 structural_peq,
1966 sub,
1967 sub_assign,
1968 sub_with_overflow,
1969 suggestion,
1970 super_let,
1971 supertrait_item_shadowing,
1972 sym,
1973 sync,
1974 synthetic,
1975 t32,
1976 target,
1977 target_abi,
1978 target_arch,
1979 target_endian,
1980 target_env,
1981 target_family,
1982 target_feature,
1983 target_feature_11,
1984 target_feature_inline_always,
1985 target_has_atomic,
1986 target_has_atomic_equal_alignment,
1987 target_has_atomic_load_store,
1988 target_has_reliable_f16,
1989 target_has_reliable_f16_math,
1990 target_has_reliable_f128,
1991 target_has_reliable_f128_math,
1992 target_os,
1993 target_pointer_width,
1994 target_thread_local,
1995 target_vendor,
1996 tbm_target_feature,
1997 termination,
1998 termination_trait,
1999 termination_trait_test,
2000 test,
2001 test_2018_feature,
2002 test_accepted_feature,
2003 test_case,
2004 test_removed_feature,
2005 test_runner,
2006 test_unstable_lint,
2007 thread,
2008 thread_local,
2009 three_way_compare,
2010 thumb2,
2011 thumb_mode: "thumb-mode",
2012 tmm_reg,
2013 to_string,
2014 to_vec,
2015 tool_attributes,
2016 tool_lints,
2017 trace_macros,
2018 track_caller,
2019 trait_alias,
2020 trait_ty,
2021 trait_upcasting,
2022 transmute,
2023 transmute_generic_consts,
2024 transmute_opts,
2025 transmute_trait,
2026 transmute_unchecked,
2027 transparent,
2028 transparent_enums,
2029 transparent_unions,
2030 trivial_bounds,
2031 trivial_clone,
2032 truncf16,
2033 truncf32,
2034 truncf64,
2035 truncf128,
2036 try_blocks,
2037 try_blocks_heterogeneous,
2038 try_capture,
2039 try_from,
2040 try_into,
2041 try_trait_v2,
2042 try_trait_v2_residual,
2043 try_update,
2044 tt,
2045 tuple,
2046 tuple_indexing,
2047 tuple_trait,
2048 two_phase,
2049 ty,
2050 type_alias_enum_variants,
2051 type_alias_impl_trait,
2052 type_ascribe,
2053 type_ascription,
2054 type_changing_struct_update,
2055 type_id,
2056 type_id_eq,
2057 type_info,
2058 type_ir,
2059 type_ir_infer_ctxt_like,
2060 type_ir_inherent,
2061 type_ir_interner,
2062 type_length_limit,
2063 type_macros,
2064 type_name,
2065 type_of,
2066 type_privacy_lints,
2067 typed_swap_nonoverlapping,
2068 u8,
2069 u8_legacy_const_max,
2070 u8_legacy_const_min,
2071 u8_legacy_fn_max_value,
2072 u8_legacy_fn_min_value,
2073 u8_legacy_mod,
2074 u16,
2075 u16_legacy_const_max,
2076 u16_legacy_const_min,
2077 u16_legacy_fn_max_value,
2078 u16_legacy_fn_min_value,
2079 u16_legacy_mod,
2080 u32,
2081 u32_legacy_const_max,
2082 u32_legacy_const_min,
2083 u32_legacy_fn_max_value,
2084 u32_legacy_fn_min_value,
2085 u32_legacy_mod,
2086 u64,
2087 u64_legacy_const_max,
2088 u64_legacy_const_min,
2089 u64_legacy_fn_max_value,
2090 u64_legacy_fn_min_value,
2091 u64_legacy_mod,
2092 u128,
2093 u128_legacy_const_max,
2094 u128_legacy_const_min,
2095 u128_legacy_fn_max_value,
2096 u128_legacy_fn_min_value,
2097 u128_legacy_mod,
2098 ub_checks,
2099 unaligned_volatile_load,
2100 unaligned_volatile_store,
2101 unboxed_closures,
2102 unchecked_add,
2103 unchecked_div,
2104 unchecked_funnel_shl,
2105 unchecked_funnel_shr,
2106 unchecked_mul,
2107 unchecked_rem,
2108 unchecked_shl,
2109 unchecked_shr,
2110 unchecked_sub,
2111 undecorated,
2112 underscore_const_names,
2113 underscore_imports,
2114 underscore_lifetimes,
2115 uniform_paths,
2116 unit,
2117 universal_impl_trait,
2118 unix,
2119 unlikely,
2120 unmarked_api,
2121 unnamed_fields,
2122 unpin,
2123 unqualified_local_imports,
2124 unreachable,
2125 unreachable_2015,
2126 unreachable_2015_macro,
2127 unreachable_2021,
2128 unreachable_code,
2129 unreachable_display,
2130 unreachable_macro,
2131 unrestricted_attribute_tokens,
2132 unsafe_attributes,
2133 unsafe_binders,
2134 unsafe_block_in_unsafe_fn,
2135 unsafe_cell,
2136 unsafe_cell_raw_get,
2137 unsafe_eii,
2138 unsafe_extern_blocks,
2139 unsafe_fields,
2140 unsafe_no_drop_flag,
2141 unsafe_pinned,
2142 unsafe_unpin,
2143 unsafety,
2144 unsize,
2145 unsized_const_param_ty,
2146 unsized_const_params,
2147 unsized_fn_params,
2148 unsized_locals,
2149 unsized_tuple_coercion,
2150 unstable,
2151 unstable_feature_bound,
2152 unstable_location_reason_default: "this crate is being loaded from the sysroot, an \
2153 unstable location; did you mean to load this crate \
2154 from crates.io via `Cargo.toml` instead?",
2155 untagged_unions,
2156 unused_imports,
2157 unwind,
2158 unwind_attributes,
2159 unwind_safe_trait,
2160 unwrap,
2161 unwrap_binder,
2162 unwrap_or,
2163 update,
2164 use_cloned,
2165 use_extern_macros,
2166 use_nested_groups,
2167 used,
2168 used_with_arg,
2169 using,
2170 usize,
2171 usize_legacy_const_max,
2172 usize_legacy_const_min,
2173 usize_legacy_fn_max_value,
2174 usize_legacy_fn_min_value,
2175 usize_legacy_mod,
2176 v1,
2177 v8plus,
2178 va_arg,
2179 va_copy,
2180 va_end,
2181 va_list,
2182 va_start,
2183 val,
2184 validity,
2185 value,
2186 values,
2187 var,
2188 variadic,
2189 variant_count,
2190 variants,
2191 vec,
2192 vector,
2193 verbatim,
2194 version,
2195 vfp2,
2196 vis,
2197 visible_private_types,
2198 volatile,
2199 volatile_copy_memory,
2200 volatile_copy_nonoverlapping_memory,
2201 volatile_load,
2202 volatile_set_memory,
2203 volatile_store,
2204 vreg,
2205 vreg_low16,
2206 vsreg,
2207 vsx,
2208 vtable_align,
2209 vtable_for,
2210 vtable_size,
2211 warn,
2212 wasip2,
2213 wasm32,
2214 wasm64,
2215 wasm_abi,
2216 wasm_import_module,
2217 wasm_target_feature,
2218 weak,
2219 weak_odr,
2220 where_clause_attrs,
2221 while_let,
2222 whole_dash_archive: "whole-archive",
2223 width,
2224 windows,
2225 windows_subsystem,
2226 with_negative_coherence,
2227 wrap_binder,
2228 wrapping_add,
2229 wrapping_div,
2230 wrapping_mul,
2231 wrapping_rem,
2232 wrapping_rem_euclid,
2233 wrapping_sub,
2234 wreg,
2235 write_box_via_move,
2236 write_bytes,
2237 write_fmt,
2238 write_macro,
2239 write_str,
2240 write_via_move,
2241 writeln_macro,
2242 x86,
2243 x86_64,
2244 x86_amx_intrinsics,
2245 x87_reg,
2246 x87_target_feature,
2247 xer,
2248 xmm_reg,
2249 xop_target_feature,
2250 xtensa,
2251 yeet_desugar_details,
2252 yeet_expr,
2253 yes,
2254 yield_expr,
2255 ymm_reg,
2256 yreg,
2257 zca,
2258 zfh,
2259 zfhmin,
2260 zmm_reg,
2261 ztso,
2262 }
2264}
2265
2266pub const STDLIB_STABLE_CRATES: &[Symbol] = &[sym::std, sym::core, sym::alloc, sym::proc_macro];
2269
2270#[derive(#[automatically_derived]
impl ::core::marker::Copy for Ident { }Copy, #[automatically_derived]
impl ::core::clone::Clone for Ident {
#[inline]
fn clone(&self) -> Ident {
let _: ::core::clone::AssertParamIsClone<Symbol>;
let _: ::core::clone::AssertParamIsClone<Span>;
*self
}
}Clone, #[automatically_derived]
impl ::core::cmp::Eq for Ident {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_receiver_is_total_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<Symbol>;
let _: ::core::cmp::AssertParamIsEq<Span>;
}
}Eq, const _: () =
{
impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
for Ident where __CTX: crate::HashStableContext {
#[inline]
fn hash_stable(&self, __hcx: &mut __CTX,
__hasher:
&mut ::rustc_data_structures::stable_hasher::StableHasher) {
match *self {
Ident { name: ref __binding_0, span: ref __binding_1 } => {
{ __binding_0.hash_stable(__hcx, __hasher); }
{ __binding_1.hash_stable(__hcx, __hasher); }
}
}
}
}
};HashStable_Generic, const _: () =
{
impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
for Ident {
fn encode(&self, __encoder: &mut __E) {
match *self {
Ident { name: ref __binding_0, span: ref __binding_1 } => {
::rustc_serialize::Encodable::<__E>::encode(__binding_0,
__encoder);
::rustc_serialize::Encodable::<__E>::encode(__binding_1,
__encoder);
}
}
}
}
};Encodable, const _: () =
{
impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
for Ident {
fn decode(__decoder: &mut __D) -> Self {
Ident {
name: ::rustc_serialize::Decodable::decode(__decoder),
span: ::rustc_serialize::Decodable::decode(__decoder),
}
}
}
};Decodable)]
2271pub struct Ident {
2272 pub name: Symbol,
2277 pub span: Span,
2278}
2279
2280impl Ident {
2281 #[inline]
2282 pub fn new(name: Symbol, span: Span) -> Ident {
2284 if true {
match (&name, &sym::empty) {
(left_val, right_val) => {
if *left_val == *right_val {
let kind = ::core::panicking::AssertKind::Ne;
::core::panicking::assert_failed(kind, &*left_val,
&*right_val, ::core::option::Option::None);
}
}
};
};debug_assert_ne!(name, sym::empty);
2285 Ident { name, span }
2286 }
2287
2288 #[inline]
2290 pub fn with_dummy_span(name: Symbol) -> Ident {
2291 Ident::new(name, DUMMY_SP)
2292 }
2293
2294 #[inline]
2299 pub fn dummy() -> Ident {
2300 Ident::with_dummy_span(sym::dummy)
2301 }
2302
2303 pub fn from_str(string: &str) -> Ident {
2305 Ident::with_dummy_span(Symbol::intern(string))
2306 }
2307
2308 pub fn from_str_and_span(string: &str, span: Span) -> Ident {
2310 Ident::new(Symbol::intern(string), span)
2311 }
2312
2313 pub fn with_span_pos(self, span: Span) -> Ident {
2315 Ident::new(self.name, span.with_ctxt(self.span.ctxt()))
2316 }
2317
2318 pub fn without_first_quote(self) -> Ident {
2321 self.as_str()
2322 .strip_prefix('\'')
2323 .map_or(self, |name| Ident::new(Symbol::intern(name), self.span))
2324 }
2325
2326 pub fn normalize_to_macros_2_0(self) -> Ident {
2332 Ident::new(self.name, self.span.normalize_to_macros_2_0())
2333 }
2334
2335 #[inline]
2341 pub fn normalize_to_macro_rules(self) -> Ident {
2342 Ident::new(self.name, self.span.normalize_to_macro_rules())
2343 }
2344
2345 pub fn as_str(&self) -> &str {
2351 self.name.as_str()
2352 }
2353}
2354
2355impl PartialEq for Ident {
2356 #[inline]
2357 fn eq(&self, rhs: &Self) -> bool {
2358 self.name == rhs.name && self.span.eq_ctxt(rhs.span)
2359 }
2360}
2361
2362impl Hash for Ident {
2363 fn hash<H: Hasher>(&self, state: &mut H) {
2364 self.name.hash(state);
2365 self.span.ctxt().hash(state);
2366 }
2367}
2368
2369impl fmt::Debug for Ident {
2370 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2371 fmt::Display::fmt(self, f)?;
2372 fmt::Debug::fmt(&self.span.ctxt(), f)
2373 }
2374}
2375
2376impl fmt::Display for Ident {
2380 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2381 fmt::Display::fmt(&IdentPrinter::new(self.name, self.guess_print_mode(), None), f)
2382 }
2383}
2384
2385pub enum IdentPrintMode {
2386 Normal,
2387 RawIdent,
2388 RawLifetime,
2389}
2390
2391pub struct IdentPrinter {
2405 symbol: Symbol,
2406 mode: IdentPrintMode,
2407 convert_dollar_crate: Option<Span>,
2410}
2411
2412impl IdentPrinter {
2413 pub fn new(
2415 symbol: Symbol,
2416 mode: IdentPrintMode,
2417 convert_dollar_crate: Option<Span>,
2418 ) -> IdentPrinter {
2419 IdentPrinter { symbol, mode, convert_dollar_crate }
2420 }
2421
2422 pub fn for_ast_ident(ident: Ident, mode: IdentPrintMode) -> IdentPrinter {
2426 IdentPrinter::new(ident.name, mode, Some(ident.span))
2427 }
2428}
2429
2430impl fmt::Display for IdentPrinter {
2431 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2432 let s = match self.mode {
2433 IdentPrintMode::Normal
2434 if self.symbol == kw::DollarCrate
2435 && let Some(span) = self.convert_dollar_crate =>
2436 {
2437 let converted = span.ctxt().dollar_crate_name();
2438 if !converted.is_path_segment_keyword() {
2439 f.write_str("::")?;
2440 }
2441 converted
2442 }
2443 IdentPrintMode::Normal => self.symbol,
2444 IdentPrintMode::RawIdent => {
2445 f.write_str("r#")?;
2446 self.symbol
2447 }
2448 IdentPrintMode::RawLifetime => {
2449 f.write_str("'r#")?;
2450 let s = self
2451 .symbol
2452 .as_str()
2453 .strip_prefix("'")
2454 .expect("only lifetime idents should be passed with RawLifetime mode");
2455 Symbol::intern(s)
2456 }
2457 };
2458 s.fmt(f)
2459 }
2460}
2461
2462#[derive(#[automatically_derived]
impl ::core::marker::Copy for MacroRulesNormalizedIdent { }Copy, #[automatically_derived]
impl ::core::clone::Clone for MacroRulesNormalizedIdent {
#[inline]
fn clone(&self) -> MacroRulesNormalizedIdent {
let _: ::core::clone::AssertParamIsClone<Ident>;
*self
}
}Clone, #[automatically_derived]
impl ::core::cmp::Eq for MacroRulesNormalizedIdent {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_receiver_is_total_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<Ident>;
}
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for MacroRulesNormalizedIdent {
#[inline]
fn eq(&self, other: &MacroRulesNormalizedIdent) -> bool {
self.0 == other.0
}
}PartialEq, #[automatically_derived]
impl ::core::hash::Hash for MacroRulesNormalizedIdent {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&self.0, state)
}
}Hash)]
2468pub struct MacroRulesNormalizedIdent(Ident);
2469
2470impl MacroRulesNormalizedIdent {
2471 #[inline]
2472 pub fn new(ident: Ident) -> Self {
2473 MacroRulesNormalizedIdent(ident.normalize_to_macro_rules())
2474 }
2475
2476 pub fn symbol(&self) -> Symbol {
2477 self.0.name
2478 }
2479
2480 pub fn ident(&self) -> Ident {
2481 self.0
2482 }
2483}
2484
2485impl fmt::Debug for MacroRulesNormalizedIdent {
2486 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2487 fmt::Debug::fmt(&self.0, f)
2488 }
2489}
2490
2491impl fmt::Display for MacroRulesNormalizedIdent {
2492 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2493 fmt::Display::fmt(&self.0, f)
2494 }
2495}
2496
2497#[derive(#[automatically_derived]
impl ::core::clone::Clone for Symbol {
#[inline]
fn clone(&self) -> Symbol {
let _: ::core::clone::AssertParamIsClone<SymbolIndex>;
*self
}
}Clone, #[automatically_derived]
impl ::core::marker::Copy for Symbol { }Copy, #[automatically_derived]
impl ::core::cmp::PartialEq for Symbol {
#[inline]
fn eq(&self, other: &Symbol) -> bool { self.0 == other.0 }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for Symbol {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_receiver_is_total_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<SymbolIndex>;
}
}Eq, #[automatically_derived]
impl ::core::cmp::PartialOrd for Symbol {
#[inline]
fn partial_cmp(&self, other: &Symbol)
-> ::core::option::Option<::core::cmp::Ordering> {
::core::cmp::PartialOrd::partial_cmp(&self.0, &other.0)
}
}PartialOrd, #[automatically_derived]
impl ::core::cmp::Ord for Symbol {
#[inline]
fn cmp(&self, other: &Symbol) -> ::core::cmp::Ordering {
::core::cmp::Ord::cmp(&self.0, &other.0)
}
}Ord, #[automatically_derived]
impl ::core::hash::Hash for Symbol {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&self.0, state)
}
}Hash)]
2507pub struct Symbol(SymbolIndex);
2508
2509impl ::std::fmt::Debug for SymbolIndex {
fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
fmt.write_fmt(format_args!("{0}", self.as_u32()))
}
}rustc_index::newtype_index! {
2511 #[orderable]
2512 struct SymbolIndex {}
2513}
2514
2515impl Symbol {
2516 pub const fn new(n: u32) -> Self {
2519 Symbol(SymbolIndex::from_u32(n))
2520 }
2521
2522 #[rustc_diagnostic_item = "SymbolIntern"]
2524 pub fn intern(str: &str) -> Self {
2525 with_session_globals(|session_globals| session_globals.symbol_interner.intern_str(str))
2526 }
2527
2528 pub fn as_str(&self) -> &str {
2537 with_session_globals(|session_globals| unsafe {
2538 std::mem::transmute::<&str, &str>(session_globals.symbol_interner.get_str(*self))
2539 })
2540 }
2541
2542 pub fn as_u32(self) -> u32 {
2543 self.0.as_u32()
2544 }
2545
2546 pub fn is_empty(self) -> bool {
2547 self == sym::empty
2548 }
2549
2550 pub fn to_ident_string(self) -> String {
2555 if self == sym::empty { String::new() } else { Ident::with_dummy_span(self).to_string() }
2557 }
2558
2559 pub fn find_similar(
2566 self,
2567 candidates: &[Symbol],
2568 ) -> Option<(Symbol, bool)> {
2569 let lowercase = self.as_str().to_lowercase();
2570 let lowercase_sym = Symbol::intern(&lowercase);
2571 if candidates.contains(&lowercase_sym) {
2572 Some((lowercase_sym, true))
2573 } else if let Some(similar_sym) = find_best_match_for_name(candidates, self, None) {
2574 Some((similar_sym, false))
2575 } else {
2576 None
2577 }
2578 }
2579}
2580
2581impl fmt::Debug for Symbol {
2582 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2583 fmt::Debug::fmt(self.as_str(), f)
2584 }
2585}
2586
2587impl fmt::Display for Symbol {
2588 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2589 fmt::Display::fmt(self.as_str(), f)
2590 }
2591}
2592
2593impl<CTX> HashStable<CTX> for Symbol {
2594 #[inline]
2595 fn hash_stable(&self, hcx: &mut CTX, hasher: &mut StableHasher) {
2596 self.as_str().hash_stable(hcx, hasher);
2597 }
2598}
2599
2600impl<CTX> ToStableHashKey<CTX> for Symbol {
2601 type KeyType = String;
2602 #[inline]
2603 fn to_stable_hash_key(&self, _: &CTX) -> String {
2604 self.as_str().to_string()
2605 }
2606}
2607
2608impl StableCompare for Symbol {
2609 const CAN_USE_UNSTABLE_SORT: bool = true;
2610
2611 fn stable_cmp(&self, other: &Self) -> std::cmp::Ordering {
2612 self.as_str().cmp(other.as_str())
2613 }
2614}
2615
2616#[derive(#[automatically_derived]
impl ::core::clone::Clone for ByteSymbol {
#[inline]
fn clone(&self) -> ByteSymbol {
let _: ::core::clone::AssertParamIsClone<SymbolIndex>;
*self
}
}Clone, #[automatically_derived]
impl ::core::marker::Copy for ByteSymbol { }Copy, #[automatically_derived]
impl ::core::cmp::PartialEq for ByteSymbol {
#[inline]
fn eq(&self, other: &ByteSymbol) -> bool { self.0 == other.0 }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for ByteSymbol {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_receiver_is_total_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<SymbolIndex>;
}
}Eq, #[automatically_derived]
impl ::core::cmp::PartialOrd for ByteSymbol {
#[inline]
fn partial_cmp(&self, other: &ByteSymbol)
-> ::core::option::Option<::core::cmp::Ordering> {
::core::cmp::PartialOrd::partial_cmp(&self.0, &other.0)
}
}PartialOrd, #[automatically_derived]
impl ::core::cmp::Ord for ByteSymbol {
#[inline]
fn cmp(&self, other: &ByteSymbol) -> ::core::cmp::Ordering {
::core::cmp::Ord::cmp(&self.0, &other.0)
}
}Ord, #[automatically_derived]
impl ::core::hash::Hash for ByteSymbol {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&self.0, state)
}
}Hash)]
2619pub struct ByteSymbol(SymbolIndex);
2620
2621impl ByteSymbol {
2622 pub const fn new(n: u32) -> Self {
2625 ByteSymbol(SymbolIndex::from_u32(n))
2626 }
2627
2628 pub fn intern(byte_str: &[u8]) -> Self {
2630 with_session_globals(|session_globals| {
2631 session_globals.symbol_interner.intern_byte_str(byte_str)
2632 })
2633 }
2634
2635 pub fn as_byte_str(&self) -> &[u8] {
2637 with_session_globals(|session_globals| unsafe {
2638 std::mem::transmute::<&[u8], &[u8]>(session_globals.symbol_interner.get_byte_str(*self))
2639 })
2640 }
2641
2642 pub fn as_u32(self) -> u32 {
2643 self.0.as_u32()
2644 }
2645}
2646
2647impl fmt::Debug for ByteSymbol {
2648 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2649 fmt::Debug::fmt(self.as_byte_str(), f)
2650 }
2651}
2652
2653impl<CTX> HashStable<CTX> for ByteSymbol {
2654 #[inline]
2655 fn hash_stable(&self, hcx: &mut CTX, hasher: &mut StableHasher) {
2656 self.as_byte_str().hash_stable(hcx, hasher);
2657 }
2658}
2659
2660pub(crate) struct Interner(Lock<InternerInner>);
2665
2666struct InternerInner {
2672 arena: DroplessArena,
2673 byte_strs: FxIndexSet<&'static [u8]>,
2674}
2675
2676impl Interner {
2677 fn prefill(init: &[&'static str], extra: &[&'static str]) -> Self {
2681 let byte_strs = FxIndexSet::from_iter(
2682 init.iter().copied().chain(extra.iter().copied()).map(|str| str.as_bytes()),
2683 );
2684
2685 #[expect(rustc::potential_query_instability)]
2687 if byte_strs.len() != init.len() + extra.len() {
2688 {
::core::panicking::panic_fmt(format_args!("duplicate symbols in the rustc symbol list and the extra symbols added by the driver: {0:?}",
FxHashSet::intersection(&init.iter().copied().collect(),
&extra.iter().copied().collect()).collect::<Vec<_>>()));
}panic!(
2689 "duplicate symbols in the rustc symbol list and the extra symbols added by the driver: {:?}",
2690 FxHashSet::intersection(
2691 &init.iter().copied().collect(),
2692 &extra.iter().copied().collect(),
2693 )
2694 .collect::<Vec<_>>()
2695 )
2696 }
2697
2698 Interner(Lock::new(InternerInner { arena: Default::default(), byte_strs }))
2699 }
2700
2701 fn intern_str(&self, str: &str) -> Symbol {
2702 Symbol::new(self.intern_inner(str.as_bytes()))
2703 }
2704
2705 fn intern_byte_str(&self, byte_str: &[u8]) -> ByteSymbol {
2706 ByteSymbol::new(self.intern_inner(byte_str))
2707 }
2708
2709 #[inline]
2710 fn intern_inner(&self, byte_str: &[u8]) -> u32 {
2711 let mut inner = self.0.lock();
2712 if let Some(idx) = inner.byte_strs.get_index_of(byte_str) {
2713 return idx as u32;
2714 }
2715
2716 let byte_str: &[u8] = inner.arena.alloc_slice(byte_str);
2717
2718 let byte_str: &'static [u8] = unsafe { &*(byte_str as *const [u8]) };
2721
2722 let (idx, is_new) = inner.byte_strs.insert_full(byte_str);
2726 if true {
if !is_new { ::core::panicking::panic("assertion failed: is_new") };
};debug_assert!(is_new); idx as u32
2729 }
2730
2731 fn get_str(&self, symbol: Symbol) -> &str {
2735 let byte_str = self.get_inner(symbol.0.as_usize());
2736 unsafe { str::from_utf8_unchecked(byte_str) }
2738 }
2739
2740 fn get_byte_str(&self, symbol: ByteSymbol) -> &[u8] {
2744 self.get_inner(symbol.0.as_usize())
2745 }
2746
2747 fn get_inner(&self, index: usize) -> &[u8] {
2748 self.0.lock().byte_strs.get_index(index).unwrap()
2749 }
2750}
2751
2752pub mod kw {
2758 pub use super::kw_generated::*;
2759}
2760
2761pub mod sym {
2767 use super::Symbol;
2769 pub use super::kw::MacroRules as macro_rules;
2770 #[doc(inline)]
2771 pub use super::sym_generated::*;
2772
2773 pub fn integer<N: TryInto<usize> + Copy + itoa::Integer>(n: N) -> Symbol {
2778 if let Result::Ok(idx) = n.try_into() {
2779 if idx < 10 {
2780 return Symbol::new(super::SYMBOL_DIGITS_BASE + idx as u32);
2781 }
2782 }
2783 let mut buffer = itoa::Buffer::new();
2784 let printed = buffer.format(n);
2785 Symbol::intern(printed)
2786 }
2787}
2788
2789impl Symbol {
2790 fn is_special(self) -> bool {
2791 self <= kw::Underscore
2792 }
2793
2794 fn is_used_keyword_always(self) -> bool {
2795 self >= kw::As && self <= kw::While
2796 }
2797
2798 fn is_unused_keyword_always(self) -> bool {
2799 self >= kw::Abstract && self <= kw::Yield
2800 }
2801
2802 fn is_used_keyword_conditional(self, edition: impl FnOnce() -> Edition) -> bool {
2803 (self >= kw::Async && self <= kw::Dyn) && edition() >= Edition::Edition2018
2804 }
2805
2806 fn is_unused_keyword_conditional(self, edition: impl Copy + FnOnce() -> Edition) -> bool {
2807 self == kw::Gen && edition().at_least_rust_2024()
2808 || self == kw::Try && edition().at_least_rust_2018()
2809 }
2810
2811 pub fn is_reserved(self, edition: impl Copy + FnOnce() -> Edition) -> bool {
2812 self.is_special()
2813 || self.is_used_keyword_always()
2814 || self.is_unused_keyword_always()
2815 || self.is_used_keyword_conditional(edition)
2816 || self.is_unused_keyword_conditional(edition)
2817 }
2818
2819 pub fn is_weak(self) -> bool {
2820 self >= kw::Auto && self <= kw::Yeet
2821 }
2822
2823 pub fn is_path_segment_keyword(self) -> bool {
2825 self == kw::Super
2826 || self == kw::SelfLower
2827 || self == kw::SelfUpper
2828 || self == kw::Crate
2829 || self == kw::PathRoot
2830 || self == kw::DollarCrate
2831 }
2832
2833 pub fn is_bool_lit(self) -> bool {
2835 self == kw::True || self == kw::False
2836 }
2837
2838 pub fn can_be_raw(self) -> bool {
2840 self != sym::empty && self != kw::Underscore && !self.is_path_segment_keyword()
2841 }
2842
2843 pub fn is_predefined(index: u32) -> bool {
2847 index < PREDEFINED_SYMBOLS_COUNT
2848 }
2849}
2850
2851impl Ident {
2852 pub fn is_special(self) -> bool {
2855 self.name.is_special()
2856 }
2857
2858 pub fn is_used_keyword(self) -> bool {
2860 self.name.is_used_keyword_always()
2862 || self.name.is_used_keyword_conditional(|| self.span.edition())
2863 }
2864
2865 pub fn is_unused_keyword(self) -> bool {
2867 self.name.is_unused_keyword_always()
2869 || self.name.is_unused_keyword_conditional(|| self.span.edition())
2870 }
2871
2872 pub fn is_reserved(self) -> bool {
2874 self.name.is_reserved(|| self.span.edition())
2876 }
2877
2878 pub fn is_path_segment_keyword(self) -> bool {
2880 self.name.is_path_segment_keyword()
2881 }
2882
2883 pub fn is_raw_guess(self) -> bool {
2886 self.name.can_be_raw() && self.is_reserved()
2887 }
2888
2889 pub fn is_reserved_lifetime(self) -> bool {
2892 self.is_reserved() && ![kw::Underscore, kw::Static].contains(&self.name)
2893 }
2894
2895 pub fn is_raw_lifetime_guess(self) -> bool {
2896 if self.name.as_str() == "'" {
2899 return false;
2900 }
2901 let ident_without_apostrophe = self.without_first_quote();
2902 ident_without_apostrophe.name != self.name
2903 && ident_without_apostrophe.name.can_be_raw()
2904 && ident_without_apostrophe.is_reserved_lifetime()
2905 }
2906
2907 pub fn guess_print_mode(self) -> IdentPrintMode {
2908 if self.is_raw_lifetime_guess() {
2909 IdentPrintMode::RawLifetime
2910 } else if self.is_raw_guess() {
2911 IdentPrintMode::RawIdent
2912 } else {
2913 IdentPrintMode::Normal
2914 }
2915 }
2916
2917 pub fn is_numeric(self) -> bool {
2920 self.as_str().bytes().all(|b| b.is_ascii_digit())
2921 }
2922}
2923
2924pub fn used_keywords(edition: impl Copy + FnOnce() -> Edition) -> Vec<Symbol> {
2929 (kw::DollarCrate.as_u32()..kw::Yeet.as_u32())
2930 .filter_map(|kw| {
2931 let kw = Symbol::new(kw);
2932 if kw.is_used_keyword_always() || kw.is_used_keyword_conditional(edition) {
2933 Some(kw)
2934 } else {
2935 None
2936 }
2937 })
2938 .collect()
2939}