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