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