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