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