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