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