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