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