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