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