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