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