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