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