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