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