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