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", "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_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 lateout,
1177 lazy_normalization_consts,
1178 lazy_type_alias,
1179 le,
1180 legacy_receiver,
1181 len,
1182 let_chains,
1183 let_else,
1184 lhs,
1185 lib,
1186 libc,
1187 lifetime,
1188 lifetime_capture_rules_2024,
1189 lifetimes,
1190 line,
1191 link,
1192 link_arg_attribute,
1193 link_args,
1194 link_cfg,
1195 link_dash_arg: "link-arg",
1196 link_llvm_intrinsics,
1197 link_name,
1198 link_ordinal,
1199 link_section,
1200 linkage,
1201 linker,
1202 linker_info,
1203 linker_messages,
1204 linkonce,
1205 linkonce_odr,
1206 lint_reasons,
1207 literal,
1208 little, big,
1209 load,
1210 loaded_from_disk,
1211 local,
1212 local_inner_macros,
1213 log2f16,
1214 log2f32,
1215 log2f64,
1216 log2f128,
1217 log10f16,
1218 log10f32,
1219 log10f64,
1220 log10f128,
1221 log_syntax,
1222 logf16,
1223 logf32,
1224 logf64,
1225 logf128,
1226 loongarch32,
1227 loongarch64,
1228 loongarch_target_feature,
1229 loop_break_value,
1230 loop_hints,
1231 loop_match,
1232 lr,
1233 lsx,
1234 lt,
1235 m68k,
1236 m68k_target_feature,
1237 mac16,
1238 macho: "mach-o",
1239 macro_at_most_once_rep,
1240 macro_attr,
1241 macro_attributes_in_derive_output,
1242 macro_derive,
1243 macro_escape,
1244 macro_export,
1245 macro_guard_matcher,
1246 macro_lifetime_matcher,
1247 macro_literal_matcher,
1248 macro_metavar_expr,
1249 macro_metavar_expr_concat,
1250 macro_reexport,
1251 macro_use,
1252 macro_vis_matcher,
1253 macros_in_extern,
1254 main,
1255 managed_boxes,
1256 manually_drop,
1257 map,
1258 map_err,
1259 marker,
1260 marker_trait_attr,
1261 masked,
1262 match_beginning_vert,
1263 match_default_bindings,
1264 maximum_number_nsz_f16,
1265 maximum_number_nsz_f32,
1266 maximum_number_nsz_f64,
1267 maximum_number_nsz_f128,
1268 maximumf16,
1269 maximumf32,
1270 maximumf64,
1271 maximumf128,
1272 may_dangle,
1273 may_unwind,
1274 maybe_dangling,
1275 maybe_uninit,
1276 maybe_uninit_uninit,
1277 maybe_uninit_zeroed,
1278 mem,
1279 mem_align_const,
1280 mem_discriminant,
1281 mem_drop,
1282 mem_forget,
1283 mem_size_const,
1284 mem_swap,
1285 mem_uninitialized,
1286 mem_variant_count,
1287 mem_zeroed,
1288 member_constraints,
1289 memcmp_fn,
1290 memcpy_fn,
1291 memmove_fn,
1292 memory,
1293 memset_fn,
1294 memtag,
1295 message,
1296 meta,
1297 meta_sized,
1298 metadata_type,
1299 mgca_type_const_syntax,
1300 min_adt_const_params,
1301 min_const_fn,
1302 min_const_generics,
1303 min_const_unsafe_fn,
1304 min_exhaustive_patterns,
1305 min_generic_const_args,
1306 min_specialization,
1307 min_type_alias_impl_trait,
1308 minimum_number_nsz_f16,
1309 minimum_number_nsz_f32,
1310 minimum_number_nsz_f64,
1311 minimum_number_nsz_f128,
1312 minimumf16,
1313 minimumf32,
1314 minimumf64,
1315 minimumf128,
1316 mips,
1317 mips32r6,
1318 mips64,
1319 mips64r6,
1320 mips_target_feature,
1321 mir_assume,
1322 mir_basic_block,
1323 mir_call,
1324 mir_cast_ptr_to_ptr,
1325 mir_cast_transmute,
1326 mir_cast_unsize,
1327 mir_checked,
1328 mir_debuginfo,
1329 mir_discriminant,
1330 mir_drop,
1331 mir_field,
1332 mir_goto,
1333 mir_make_place,
1334 mir_move,
1335 mir_offset,
1336 mir_ptr_metadata,
1337 mir_return,
1338 mir_return_to,
1339 mir_set_discriminant,
1340 mir_static,
1341 mir_static_mut,
1342 mir_storage_dead,
1343 mir_storage_live,
1344 mir_tail_call,
1345 mir_unreachable,
1346 mir_unwind_cleanup,
1347 mir_unwind_continue,
1348 mir_unwind_resume,
1349 mir_unwind_terminate,
1350 mir_unwind_terminate_reason,
1351 mir_unwind_unreachable,
1352 mir_variant,
1353 miri,
1354 misc,
1355 miscsr,
1356 mmx_reg,
1357 modifiers,
1358 module,
1359 module_path,
1360 more_maybe_bounds,
1361 more_qualified_paths,
1362 more_struct_aliases,
1363 movbe_target_feature,
1364 move_expr,
1365 move_ref_pattern,
1366 move_size_limit,
1367 movrs_target_feature,
1368 msp430,
1369 mul,
1370 mul_assign,
1371 mul_with_overflow,
1372 multiple_supertrait_upcastable,
1373 must_not_suspend,
1374 must_use,
1375 mut_preserve_binding_mode_2024,
1376 mut_ref,
1377 mut_restriction,
1378 mutable,
1379 naked,
1380 naked_asm,
1381 naked_functions,
1382 naked_functions_rustic_abi,
1383 naked_functions_target_feature,
1384 name,
1385 names,
1386 native_link_modifiers,
1387 native_link_modifiers_as_needed,
1388 native_link_modifiers_bundle,
1389 native_link_modifiers_verbatim,
1390 native_link_modifiers_whole_archive,
1391 natvis_file,
1392 ne,
1393 needs_allocator,
1394 needs_drop,
1395 needs_panic_runtime,
1396 neg,
1397 negate_unsigned,
1398 negative_bounds,
1399 negative_impls,
1400 neon,
1401 nested,
1402 never,
1403 never_patterns,
1404 never_type,
1405 never_type_fallback,
1406 new,
1407 new_binary,
1408 new_debug,
1409 new_debug_noop,
1410 new_display,
1411 new_lower_exp,
1412 new_lower_hex,
1413 new_octal,
1414 new_pointer,
1415 new_range,
1416 new_unchecked,
1417 new_upper_exp,
1418 new_upper_hex,
1419 next,
1420 niko,
1421 nll,
1422 no,
1423 no_builtins,
1424 no_core,
1425 no_coverage,
1426 no_crate_inject,
1427 no_debug,
1428 no_default_passes,
1429 no_implicit_prelude,
1430 no_inline,
1431 no_link,
1432 no_main,
1433 no_mangle,
1434 no_sanitize,
1435 no_stack_check,
1436 no_std,
1437 nomem,
1438 non_ascii_idents,
1439 non_exhaustive,
1440 non_exhaustive_omitted_patterns_lint,
1441 non_lifetime_binders,
1442 non_modrs_mods,
1443 nonblocking,
1444 none,
1445 nontemporal_store,
1446 noop_method_borrow,
1447 noop_method_clone,
1448 noop_method_deref,
1449 noprefix,
1450 noreturn,
1451 nostack,
1452 not,
1453 notable_trait,
1454 note,
1455 null,
1456 nvptx64,
1457 nvptx_target_feature,
1458 object_safe_for_dispatch,
1459 of,
1460 off,
1461 offload,
1462 offload_kernel,
1463 offset,
1464 offset_of,
1465 offset_of_enum,
1466 offset_of_nested,
1467 offset_of_slice,
1468 ok_or_else,
1469 old_name,
1470 omit_gdb_pretty_printer_section,
1471 on,
1472 on_const,
1473 on_move,
1474 on_type_error,
1475 on_unimplemented,
1476 on_unknown,
1477 on_unmatched_args,
1478 opaque,
1479 opaque_module_name_placeholder: "<opaque>",
1480 ops,
1481 opt_out_copy,
1482 optimize,
1483 optimize_attribute,
1484 optimized,
1485 optin_builtin_traits,
1486 option,
1487 option_env,
1488 options,
1489 or,
1490 or_patterns,
1491 ord_cmp_method,
1492 other,
1493 out,
1494 output,
1495 overflow_checks,
1496 overlapping_marker_traits,
1497 owned_box,
1498 packed,
1499 packed_bundled_libs,
1500 panic,
1501 panic_2015,
1502 panic_2021,
1503 panic_abort,
1504 panic_bounds_check,
1505 panic_cannot_unwind,
1506 panic_const_add_overflow,
1507 panic_const_async_fn_resumed,
1508 panic_const_async_fn_resumed_drop,
1509 panic_const_async_fn_resumed_panic,
1510 panic_const_async_gen_fn_resumed,
1511 panic_const_async_gen_fn_resumed_drop,
1512 panic_const_async_gen_fn_resumed_panic,
1513 panic_const_coroutine_resumed,
1514 panic_const_coroutine_resumed_drop,
1515 panic_const_coroutine_resumed_panic,
1516 panic_const_div_by_zero,
1517 panic_const_div_overflow,
1518 panic_const_gen_fn_none,
1519 panic_const_gen_fn_none_drop,
1520 panic_const_gen_fn_none_panic,
1521 panic_const_mul_overflow,
1522 panic_const_neg_overflow,
1523 panic_const_rem_by_zero,
1524 panic_const_rem_overflow,
1525 panic_const_shl_overflow,
1526 panic_const_shr_overflow,
1527 panic_const_sub_overflow,
1528 panic_display,
1529 panic_fmt,
1530 panic_handler,
1531 panic_impl,
1532 panic_implementation,
1533 panic_in_cleanup,
1534 panic_info,
1535 panic_invalid_enum_construction,
1536 panic_location,
1537 panic_misaligned_pointer_dereference,
1538 panic_nounwind,
1539 panic_null_pointer_dereference,
1540 panic_null_reference_constructed,
1541 panic_runtime,
1542 panic_str_2015,
1543 panic_unwind,
1544 panicking,
1545 param_attrs,
1546 parent_label,
1547 partial_cmp,
1548 partial_ord,
1549 passes,
1550 pat,
1551 pat_param,
1552 patchable_function_entry,
1553 path,
1554 pattern_complexity_limit,
1555 pattern_parentheses,
1556 pattern_type,
1557 pattern_type_range_trait,
1558 pattern_types,
1559 phantom_data,
1560 phase,
1561 pic,
1562 pie,
1563 pin,
1564 pin_drop,
1565 pin_ergonomics,
1566 pin_v2,
1567 platform_intrinsics,
1568 plugin,
1569 plugin_registrar,
1570 plugins,
1571 pointee,
1572 pointee_sized,
1573 pointee_trait,
1574 pointer,
1575 poll,
1576 post_cleanup: "post-cleanup",
1577 post_dash_lto: "post-lto",
1578 postfix_match,
1579 powerpc,
1580 powerpc64,
1581 powerpc_target_feature,
1582 powf16,
1583 powf32,
1584 powf64,
1585 powf128,
1586 powif16,
1587 powif32,
1588 powif64,
1589 powif128,
1590 pre_dash_lto: "pre-lto",
1591 precise_capturing,
1592 precise_capturing_in_traits,
1593 precise_pointer_size_matching,
1594 predicates,
1595 pref_align_of,
1596 prefetch_read_data,
1597 prefetch_read_instruction,
1598 prefetch_write_data,
1599 prefetch_write_instruction,
1600 prefix_nops,
1601 preg,
1602 prelude,
1603 prelude_import,
1604 preserves_flags,
1605 prfchw_target_feature,
1606 prid,
1607 primitive,
1608 proc_dash_macro: "proc-macro",
1609 proc_macro,
1610 proc_macro_attribute,
1611 proc_macro_derive,
1612 proc_macro_expr,
1613 proc_macro_gen,
1614 proc_macro_hygiene,
1615 proc_macro_internals,
1616 proc_macro_mod,
1617 proc_macro_non_items,
1618 proc_macro_path_invoc,
1619 profiler_runtime,
1620 ptr,
1621 ptr_cast,
1622 ptr_cast_const,
1623 ptr_cast_mut,
1624 ptr_const_is_null,
1625 ptr_copy,
1626 ptr_copy_nonoverlapping,
1627 ptr_from_ref,
1628 ptr_guaranteed_cmp,
1629 ptr_is_null,
1630 ptr_mask,
1631 ptr_metadata,
1632 ptr_null,
1633 ptr_null_mut,
1634 ptr_offset_from,
1635 ptr_offset_from_unsigned,
1636 ptr_read,
1637 ptr_read_unaligned,
1638 ptr_replace,
1639 ptr_swap,
1640 ptr_swap_nonoverlapping,
1641 ptr_write,
1642 ptr_write_bytes,
1643 ptr_write_unaligned,
1644 ptr_write_volatile,
1645 pub_macro_rules,
1646 pub_restricted,
1647 public,
1648 pure,
1649 pushpop_unsafe,
1650 qreg,
1651 qreg_low4,
1652 qreg_low8,
1653 quad_precision_float,
1654 question_mark,
1655 quote,
1656 range_inclusive_new,
1657 raw_dash_dylib: "raw-dylib",
1658 raw_dylib,
1659 raw_dylib_elf,
1660 raw_eq,
1661 raw_identifiers,
1662 raw_ref_op,
1663 re_rebalance_coherence,
1664 read_via_copy,
1665 readonly,
1666 realloc,
1667 realtime,
1668 reason,
1669 reborrow,
1670 receiver,
1671 receiver_target,
1672 recursion_limit,
1673 reexport_test_harness_main,
1674 ref_pat_eat_one_layer_2024,
1675 ref_pat_eat_one_layer_2024_structural,
1676 ref_pat_everywhere,
1677 ref_unwind_safe_trait,
1678 reference,
1679 reflect,
1680 reg,
1681 reg16,
1682 reg32,
1683 reg64,
1684 reg_abcd,
1685 reg_addr,
1686 reg_byte,
1687 reg_data,
1688 reg_iw,
1689 reg_nonzero,
1690 reg_pair,
1691 reg_ptr,
1692 reg_upper,
1693 register_attr,
1694 register_tool,
1695 relaxed_adts,
1696 relaxed_struct_unsize,
1697 relocation_model,
1698 rem,
1699 rem_assign,
1700 repr,
1701 repr128,
1702 repr_align,
1703 repr_align_enum,
1704 repr_packed,
1705 repr_simd,
1706 repr_transparent,
1707 require,
1708 reserve_x18: "reserve-x18",
1709 residual,
1710 result,
1711 result_ffi_guarantees,
1712 return_address,
1713 return_position_impl_trait_in_trait,
1714 return_type_notation,
1715 right_arrow: "->",
1716 riscv32,
1717 riscv64,
1718 riscv_target_feature,
1719 rlib,
1720 ropi,
1721 ropi_rwpi: "ropi-rwpi",
1722 rotate_left,
1723 rotate_right,
1724 round_ties_even_f16,
1725 round_ties_even_f32,
1726 round_ties_even_f64,
1727 round_ties_even_f128,
1728 roundf16,
1729 roundf32,
1730 roundf64,
1731 roundf128,
1732 rtm_target_feature,
1733 runtime,
1734 rust,
1735 rust_2015,
1736 rust_2018,
1737 rust_2018_preview,
1738 rust_2021,
1739 rust_2024,
1740 rust_analyzer,
1741 rust_begin_unwind,
1742 rust_cold_cc,
1743 rust_dash_call: "rust-call",
1744 rust_eh_personality,
1745 rust_future,
1746 rust_logo,
1747 rust_out,
1748 rust_preserve_none_cc,
1749 rust_tail_cc,
1750 rustc,
1751 rustc_abi,
1752 rustc_align,
1754 rustc_align_static,
1755 rustc_allocator,
1756 rustc_allocator_zeroed,
1757 rustc_allocator_zeroed_variant,
1758 rustc_allow_const_fn_unstable,
1759 rustc_allow_incoherent_impl,
1760 rustc_allowed_through_unstable_modules,
1761 rustc_as_ptr,
1762 rustc_attrs,
1763 rustc_autodiff,
1764 rustc_builtin_macro,
1765 rustc_capture_analysis,
1766 rustc_clean,
1767 rustc_coherence_is_core,
1768 rustc_coinductive,
1769 rustc_comptime,
1770 rustc_confusables,
1771 rustc_const_stable,
1772 rustc_const_stable_indirect,
1773 rustc_const_unstable,
1774 rustc_conversion_suggestion,
1775 rustc_deallocator,
1776 rustc_default_body_unstable,
1777 rustc_delayed_bug_from_inside_query,
1778 rustc_deny_explicit_impl,
1779 rustc_deprecated_safe_2024,
1780 rustc_diagnostic_item,
1781 rustc_diagnostic_macros,
1782 rustc_do_not_const_check,
1783 rustc_doc_primitive,
1784 rustc_driver,
1785 rustc_dummy,
1786 rustc_dump_def_parents,
1787 rustc_dump_def_path,
1788 rustc_dump_generics,
1789 rustc_dump_hidden_type_of_opaques,
1790 rustc_dump_inferred_outlives,
1791 rustc_dump_item_bounds,
1792 rustc_dump_layout,
1793 rustc_dump_object_lifetime_defaults,
1794 rustc_dump_predicates,
1795 rustc_dump_symbol_name,
1796 rustc_dump_user_args,
1797 rustc_dump_variances,
1798 rustc_dump_variances_of_opaques,
1799 rustc_dump_vtable,
1800 rustc_dyn_incompatible_trait,
1801 rustc_effective_visibility,
1802 rustc_eii_foreign_item,
1803 rustc_evaluate_where_clauses,
1804 rustc_expected_cgu_reuse,
1805 rustc_force_inline,
1806 rustc_has_incoherent_inherent_impls,
1807 rustc_if_this_changed,
1808 rustc_inherit_overflow_checks,
1809 rustc_insignificant_dtor,
1810 rustc_intrinsic,
1811 rustc_intrinsic_const_stable_indirect,
1812 rustc_legacy_const_generics,
1813 rustc_lint_opt_deny_field_access,
1814 rustc_lint_opt_ty,
1815 rustc_lint_query_instability,
1816 rustc_lint_untracked_query_information,
1817 rustc_macro_transparency,
1818 rustc_main,
1819 rustc_mir,
1820 rustc_must_implement_one_of,
1821 rustc_must_match_exhaustively,
1822 rustc_never_returns_null_ptr,
1823 rustc_never_type_options,
1824 rustc_no_implicit_autorefs,
1825 rustc_no_implicit_bounds,
1826 rustc_no_mir_inline,
1827 rustc_no_writable,
1828 rustc_non_const_trait_method,
1829 rustc_nonnull_optimization_guaranteed,
1830 rustc_nounwind,
1831 rustc_objc_class,
1832 rustc_objc_selector,
1833 rustc_offload_kernel,
1834 rustc_on_unimplemented,
1835 rustc_paren_sugar,
1836 rustc_partition_codegened,
1837 rustc_partition_reused,
1838 rustc_pass_by_value,
1839 rustc_pass_indirectly_in_non_rustic_abis,
1840 rustc_peek,
1841 rustc_peek_liveness,
1842 rustc_peek_maybe_init,
1843 rustc_peek_maybe_uninit,
1844 rustc_preserve_ub_checks,
1845 rustc_private,
1846 rustc_proc_macro_decls,
1847 rustc_promotable,
1848 rustc_pub_transparent,
1849 rustc_reallocator,
1850 rustc_regions,
1851 rustc_reservation_impl,
1852 rustc_scalable_vector,
1853 rustc_should_not_be_called_on_const_items,
1854 rustc_simd_monomorphize_lane_limit,
1855 rustc_skip_during_method_dispatch,
1856 rustc_specialization_trait,
1857 rustc_std_internal_symbol,
1858 rustc_strict_coherence,
1859 rustc_test_marker,
1860 rustc_then_this_would_need,
1861 rustc_trivial_field_reads,
1862 rustc_unsafe_specialization_marker,
1863 rustdoc,
1864 rustdoc_internals,
1865 rustdoc_missing_doc_code_examples,
1866 rustfmt,
1867 rvalue_static_promotion,
1868 rvector,
1869 rwpi,
1870 s32c1i,
1871 s390x,
1872 s390x_target_feature,
1873 s390x_target_feature_vector,
1874 safety,
1875 sanitize,
1876 sanitizer_cfi_generalize_pointers,
1877 sanitizer_cfi_normalize_integers,
1878 sanitizer_runtime,
1879 saturating_add,
1880 saturating_sub,
1881 sdylib,
1882 search_unbox,
1883 section,
1884 select_unpredictable,
1885 self_in_typedefs,
1886 self_struct_ctor,
1887 semiopaque,
1888 sgpr32,
1889 sgpr64,
1890 sgpr96,
1891 sgpr128,
1892 sgpr256,
1893 sgpr512,
1894 sha2,
1895 sha3,
1896 sha512_sm_x86,
1897 shadow_call_stack,
1898 shallow,
1899 shl,
1900 shl_assign,
1901 shorter_tail_lifetimes,
1902 should_panic,
1903 show,
1904 shr,
1905 shr_assign,
1906 signed,
1907 simd,
1908 simd_add,
1909 simd_and,
1910 simd_arith_offset,
1911 simd_as,
1912 simd_bitmask,
1913 simd_bitreverse,
1914 simd_bswap,
1915 simd_carryless_mul,
1916 simd_cast,
1917 simd_cast_ptr,
1918 simd_ceil,
1919 simd_ctlz,
1920 simd_ctpop,
1921 simd_cttz,
1922 simd_div,
1923 simd_eq,
1924 simd_expose_provenance,
1925 simd_extract,
1926 simd_extract_dyn,
1927 simd_fabs,
1928 simd_fcos,
1929 simd_fexp,
1930 simd_fexp2,
1931 simd_ffi,
1932 simd_flog,
1933 simd_flog2,
1934 simd_flog10,
1935 simd_floor,
1936 simd_fma,
1937 simd_fsin,
1938 simd_fsqrt,
1939 simd_funnel_shl,
1940 simd_funnel_shr,
1941 simd_gather,
1942 simd_ge,
1943 simd_gt,
1944 simd_insert,
1945 simd_insert_dyn,
1946 simd_le,
1947 simd_lt,
1948 simd_masked_load,
1949 simd_masked_store,
1950 simd_maximum_number_nsz,
1951 simd_minimum_number_nsz,
1952 simd_mul,
1953 simd_ne,
1954 simd_neg,
1955 simd_or,
1956 simd_reduce_add_ordered,
1957 simd_reduce_add_unordered,
1958 simd_reduce_all,
1959 simd_reduce_and,
1960 simd_reduce_any,
1961 simd_reduce_max,
1962 simd_reduce_min,
1963 simd_reduce_mul_ordered,
1964 simd_reduce_mul_unordered,
1965 simd_reduce_or,
1966 simd_reduce_xor,
1967 simd_relaxed_fma,
1968 simd_rem,
1969 simd_round,
1970 simd_round_ties_even,
1971 simd_saturating_add,
1972 simd_saturating_sub,
1973 simd_scatter,
1974 simd_select,
1975 simd_select_bitmask,
1976 simd_shl,
1977 simd_shr,
1978 simd_shuffle,
1979 simd_shuffle_const_generic,
1980 simd_splat,
1981 simd_sub,
1982 simd_trunc,
1983 simd_with_exposed_provenance,
1984 simd_xor,
1985 since,
1986 sinf16,
1987 sinf32,
1988 sinf64,
1989 sinf128,
1990 size,
1991 size_of,
1992 size_of_type_id,
1993 size_of_val,
1994 sized,
1995 sized_hierarchy,
1996 slice,
1997 slice_from_raw_parts,
1998 slice_from_raw_parts_mut,
1999 slice_get_unchecked,
2000 slice_len_fn,
2001 slice_patterns,
2002 slicing_syntax,
2003 soft_float: "soft-float",
2004 sparc,
2005 sparc64,
2006 sparc_target_feature,
2007 spe_acc,
2008 specialization,
2009 speed,
2010 spirv,
2011 splat,
2012 splatted_index,
2013 spotlight,
2014 sqrtf16,
2015 sqrtf32,
2016 sqrtf64,
2017 sqrtf128,
2018 sreg,
2019 sreg_low16,
2020 sse,
2021 sse2,
2022 sse4a_target_feature,
2023 stable,
2024 staged_api,
2025 start,
2026 state,
2027 static_align,
2028 static_in_const,
2029 static_nobundle,
2030 static_recursion,
2031 staticlib,
2032 std,
2033 std_lib_injection,
2034 std_panic,
2035 std_panic_2015_macro,
2036 std_panic_macro,
2037 stmt,
2038 stmt_expr_attributes,
2039 stop_after_dataflow,
2040 store,
2041 str,
2042 str_from_utf8,
2043 str_from_utf8_mut,
2044 str_from_utf8_unchecked,
2045 str_from_utf8_unchecked_mut,
2046 str_inherent_from_utf8,
2047 str_inherent_from_utf8_mut,
2048 str_inherent_from_utf8_unchecked,
2049 str_inherent_from_utf8_unchecked_mut,
2050 strict_provenance_lints,
2051 string_deref_patterns,
2052 stringify,
2053 strlen_fn,
2054 struct_field_attributes,
2055 struct_inherit,
2056 struct_variant,
2057 structural_match,
2058 structural_peq,
2059 sub,
2060 sub_assign,
2061 sub_with_overflow,
2062 suggestion,
2063 super_let,
2064 supertrait_item_shadowing,
2065 sve_cast,
2066 sve_tuple_create2,
2067 sve_tuple_create3,
2068 sve_tuple_create4,
2069 sve_tuple_get,
2070 sve_tuple_set,
2071 sym,
2072 sync,
2073 synthetic,
2074 t32,
2075 target,
2076 target_abi,
2077 target_arch,
2078 target_endian,
2079 target_env,
2080 target_family,
2081 target_feature,
2082 target_feature_11,
2083 target_feature_inline_always,
2084 target_has_atomic,
2085 target_has_atomic_load_store,
2086 target_has_atomic_primitive_alignment,
2087 target_has_reliable_f16,
2088 target_has_reliable_f16_math,
2089 target_has_reliable_f128,
2090 target_has_reliable_f128_math,
2091 target_has_threads,
2092 target_object_format,
2093 target_os,
2094 target_pointer_width,
2095 target_thread_local,
2096 target_vendor,
2097 tbm_target_feature,
2098 termination,
2099 termination_trait,
2100 termination_trait_test,
2101 test,
2102 test_2018_feature,
2103 test_accepted_feature,
2104 test_case,
2105 test_incomplete_feature,
2106 test_removed_feature,
2107 test_runner,
2108 test_unstable_lint,
2109 thread,
2110 thread_local,
2111 threadptr,
2112 three_way_compare,
2113 thumb2,
2114 thumb_mode: "thumb-mode",
2115 time,
2116 tmm_reg,
2117 to_owned_method,
2118 to_string,
2119 to_vec,
2120 tool_attributes,
2121 tool_lints,
2122 trace_macros,
2123 track_caller,
2124 trait_alias,
2125 trait_ty,
2126 trait_upcasting,
2127 transmute,
2128 transmute_generic_consts,
2129 transmute_opts,
2130 transmute_trait,
2131 transmute_unchecked,
2132 transparent,
2133 transparent_enums,
2134 transparent_unions,
2135 trivial_bounds,
2136 trivial_clone,
2137 truncf16,
2138 truncf32,
2139 truncf64,
2140 truncf128,
2141 try_blocks,
2142 try_blocks_heterogeneous,
2143 try_capture,
2144 try_from,
2145 try_into,
2146 try_trait_v2,
2147 try_trait_v2_residual,
2148 try_update,
2149 tt,
2150 tuple,
2151 tuple_indexing,
2152 tuple_trait,
2153 two_phase,
2154 ty,
2155 type_alias_enum_variants,
2156 type_alias_impl_trait,
2157 type_ascribe,
2158 type_ascription,
2159 type_changing_struct_update,
2160 type_id,
2161 type_id_eq,
2162 type_id_field_representing_type,
2163 type_id_fields,
2164 type_id_variants,
2165 type_id_vtable,
2166 type_info,
2167 type_ir,
2168 type_ir_infer_ctxt_like,
2169 type_ir_inherent,
2170 type_ir_interner,
2171 type_length_limit,
2172 type_macros,
2173 type_name,
2174 type_of,
2175 type_privacy_lints,
2176 typed_swap_nonoverlapping,
2177 u8,
2178 u8_legacy_const_max,
2179 u8_legacy_const_min,
2180 u8_legacy_fn_max_value,
2181 u8_legacy_fn_min_value,
2182 u8_legacy_mod,
2183 u16,
2184 u16_legacy_const_max,
2185 u16_legacy_const_min,
2186 u16_legacy_fn_max_value,
2187 u16_legacy_fn_min_value,
2188 u16_legacy_mod,
2189 u32,
2190 u32_legacy_const_max,
2191 u32_legacy_const_min,
2192 u32_legacy_fn_max_value,
2193 u32_legacy_fn_min_value,
2194 u32_legacy_mod,
2195 u64,
2196 u64_legacy_const_max,
2197 u64_legacy_const_min,
2198 u64_legacy_fn_max_value,
2199 u64_legacy_fn_min_value,
2200 u64_legacy_mod,
2201 u128,
2202 u128_legacy_const_max,
2203 u128_legacy_const_min,
2204 u128_legacy_fn_max_value,
2205 u128_legacy_fn_min_value,
2206 u128_legacy_mod,
2207 ub_checks,
2208 unaligned_volatile_load,
2209 unaligned_volatile_store,
2210 unboxed_closures,
2211 unchecked_add,
2212 unchecked_div,
2213 unchecked_funnel_shl,
2214 unchecked_funnel_shr,
2215 unchecked_mul,
2216 unchecked_rem,
2217 unchecked_shl,
2218 unchecked_shr,
2219 unchecked_sub,
2220 undecorated,
2221 underscore_const_names,
2222 underscore_imports,
2223 underscore_lifetimes,
2224 uniform_paths,
2225 unimplemented,
2226 unit,
2227 universal_impl_trait,
2228 unix,
2229 unlikely,
2230 unmarked_api,
2231 unnamed_enum_variants,
2232 unnamed_fields,
2233 unpin,
2234 unqualified_local_imports,
2235 unreachable,
2236 unreachable_2015,
2237 unreachable_2015_macro,
2238 unreachable_2021,
2239 unreachable_code,
2240 unreachable_display,
2241 unreachable_macro,
2242 unrestricted_attribute_tokens,
2243 unroll,
2244 unsafe_attributes,
2245 unsafe_binders,
2246 unsafe_block_in_unsafe_fn,
2247 unsafe_cell,
2248 unsafe_cell_raw_get,
2249 unsafe_eii,
2250 unsafe_extern_blocks,
2251 unsafe_fields,
2252 unsafe_no_drop_flag,
2253 unsafe_pinned,
2254 unsafe_unpin,
2255 unsafety,
2256 unsize,
2257 unsized_const_param_ty,
2258 unsized_const_params,
2259 unsized_fn_params,
2260 unsized_locals,
2261 unsized_tuple_coercion,
2262 unstable,
2263 unstable_feature_bound,
2264 unstable_location_reason_default: "this crate is being loaded from the sysroot, an \
2265 unstable location; did you mean to load this crate \
2266 from crates.io via `Cargo.toml` instead?",
2267 unstable_removed,
2268 untagged_unions,
2269 unused_imports,
2270 unwind,
2271 unwind_attributes,
2272 unwind_safe_trait,
2273 unwrap,
2274 unwrap_binder,
2275 unwrap_or,
2276 update,
2277 use_cloned,
2278 use_extern_macros,
2279 use_nested_groups,
2280 used,
2281 used_with_arg,
2282 using,
2283 usize,
2284 usize_legacy_const_max,
2285 usize_legacy_const_min,
2286 usize_legacy_fn_max_value,
2287 usize_legacy_fn_min_value,
2288 usize_legacy_mod,
2289 v1,
2290 v8plus,
2291 va_arg,
2292 va_arg_safe,
2293 va_copy,
2294 va_end,
2295 va_list,
2296 va_start,
2297 val,
2298 validity,
2299 value,
2300 values,
2301 var,
2302 variadic,
2303 variant_count,
2304 variants,
2305 vec,
2306 vector,
2307 verbatim,
2308 version,
2309 vfp2,
2310 vgpr16,
2311 vgpr32,
2312 vgpr64,
2313 vgpr96,
2314 vgpr128,
2315 vgpr160,
2316 vgpr192,
2317 vgpr224,
2318 vgpr256,
2319 vgpr288,
2320 vgpr320,
2321 vgpr352,
2322 vgpr384,
2323 vgpr512,
2324 vgpr1024,
2325 view_type,
2326 view_types,
2327 vis,
2328 visible_private_types,
2329 volatile,
2330 volatile_copy_memory,
2331 volatile_copy_nonoverlapping_memory,
2332 volatile_load,
2333 volatile_set_memory,
2334 volatile_store,
2335 vreg,
2336 vreg_low16,
2337 vreg_pair,
2338 vsreg,
2339 vsx,
2340 vtable_align,
2341 vtable_size,
2342 warn,
2343 wasip2,
2344 wasm,
2345 wasm32,
2346 wasm64,
2347 wasm_abi,
2348 wasm_import_module,
2349 wasm_target_feature,
2350 weak,
2351 weak_odr,
2352 where_clause_attrs,
2353 while_let,
2354 whole_dash_archive: "whole-archive",
2355 width,
2356 windowed,
2357 windows,
2358 windows_subsystem,
2359 with_negative_coherence,
2360 wrap_binder,
2361 wrapping_add,
2362 wrapping_div,
2363 wrapping_mul,
2364 wrapping_rem,
2365 wrapping_rem_euclid,
2366 wrapping_sub,
2367 wreg,
2368 write_box_via_move,
2369 write_bytes,
2370 write_fmt,
2371 write_macro,
2372 write_str,
2373 write_via_move,
2374 writeln_macro,
2375 x86,
2376 x86_64,
2377 x86_amx_intrinsics,
2378 x87_reg,
2379 x87_target_feature,
2380 xcoff,
2381 xer,
2382 xloop,
2383 xmm_reg,
2384 xop_target_feature,
2385 xreg,
2386 xtensa,
2387 xtensa_target_feature,
2388 yeet_desugar_details,
2389 yeet_expr,
2390 yes,
2391 yield_expr,
2392 ymm_reg,
2393 yreg,
2394 zca,
2395 zfh,
2396 zfhmin,
2397 zmm_reg,
2398 ztso,
2399 }
2401}
2402
2403pub const STDLIB_STABLE_CRATES: &[Symbol] = &[sym::std, sym::core, sym::alloc, sym::proc_macro];
2406
2407#[derive(#[automatically_derived]
impl ::core::marker::Copy for Ident { }Copy, #[automatically_derived]
impl ::core::clone::Clone for Ident {
#[inline]
fn clone(&self) -> Ident {
let _: ::core::clone::AssertParamIsClone<Symbol>;
let _: ::core::clone::AssertParamIsClone<Span>;
*self
}
}Clone, #[automatically_derived]
impl ::core::cmp::Eq for Ident {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<Symbol>;
let _: ::core::cmp::AssertParamIsEq<Span>;
}
}Eq, const _: () =
{
impl ::rustc_data_structures::stable_hash::StableHash for Ident {
#[inline]
fn stable_hash<__Hcx: ::rustc_data_structures::stable_hash::StableHashCtxt>(&self,
__hcx: &mut __Hcx,
__hasher:
&mut ::rustc_data_structures::stable_hash::StableHasher) {
match *self {
Ident { name: ref __binding_0, span: ref __binding_1 } => {
{ __binding_0.stable_hash(__hcx, __hasher); }
{ __binding_1.stable_hash(__hcx, __hasher); }
}
}
}
}
};StableHash, const _: () =
{
impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
for Ident {
fn encode(&self, __encoder: &mut __E) {
match *self {
Ident { name: ref __binding_0, span: ref __binding_1 } => {
::rustc_serialize::Encodable::<__E>::encode(__binding_0,
__encoder);
::rustc_serialize::Encodable::<__E>::encode(__binding_1,
__encoder);
}
}
}
}
};Encodable, const _: () =
{
impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
for Ident {
fn decode(__decoder: &mut __D) -> Self {
Ident {
name: ::rustc_serialize::Decodable::decode(__decoder),
span: ::rustc_serialize::Decodable::decode(__decoder),
}
}
}
};Decodable)]
2408pub struct Ident {
2409 pub name: Symbol,
2414 pub span: Span,
2415}
2416
2417impl Ident {
2418 #[inline]
2419 pub fn new(name: Symbol, span: Span) -> Ident {
2421 if true {
{
match (&name, &sym::empty) {
(left_val, right_val) => {
if *left_val == *right_val {
let kind = ::core::panicking::AssertKind::Ne;
::core::panicking::assert_failed(kind, &*left_val,
&*right_val, ::core::option::Option::None);
}
}
}
};
};debug_assert_ne!(name, sym::empty);
2422 Ident { name, span }
2423 }
2424
2425 #[inline]
2427 pub fn with_dummy_span(name: Symbol) -> Ident {
2428 Ident::new(name, DUMMY_SP)
2429 }
2430
2431 #[inline]
2436 pub fn dummy() -> Ident {
2437 Ident::with_dummy_span(sym::dummy)
2438 }
2439
2440 pub fn from_str(string: &str) -> Ident {
2442 Ident::with_dummy_span(Symbol::intern(string))
2443 }
2444
2445 pub fn from_str_and_span(string: &str, span: Span) -> Ident {
2447 Ident::new(Symbol::intern(string), span)
2448 }
2449
2450 pub fn with_span_pos(self, span: Span) -> Ident {
2452 Ident::new(self.name, span.with_ctxt(self.span.ctxt()))
2453 }
2454
2455 pub fn without_first_quote(self) -> Ident {
2458 self.as_str()
2459 .strip_prefix('\'')
2460 .map_or(self, |name| Ident::new(Symbol::intern(name), self.span))
2461 }
2462
2463 pub fn normalize_to_macros_2_0(self) -> Ident {
2469 Ident::new(self.name, self.span.normalize_to_macros_2_0())
2470 }
2471
2472 #[inline]
2478 pub fn normalize_to_macro_rules(self) -> Ident {
2479 Ident::new(self.name, self.span.normalize_to_macro_rules())
2480 }
2481
2482 pub fn as_str(&self) -> &str {
2488 self.name.as_str()
2489 }
2490}
2491
2492impl PartialEq for Ident {
2493 #[inline]
2494 fn eq(&self, rhs: &Self) -> bool {
2495 self.name == rhs.name && self.span.eq_ctxt(rhs.span)
2496 }
2497}
2498
2499impl Hash for Ident {
2500 fn hash<H: Hasher>(&self, state: &mut H) {
2501 self.name.hash(state);
2502 self.span.ctxt().hash(state);
2503 }
2504}
2505
2506impl fmt::Debug for Ident {
2507 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2508 fmt::Display::fmt(self, f)?;
2509 fmt::Debug::fmt(&self.span.ctxt(), f)
2510 }
2511}
2512
2513impl fmt::Display for Ident {
2517 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2518 fmt::Display::fmt(&IdentPrinter::new(self.name, self.guess_print_mode(), None), f)
2519 }
2520}
2521
2522pub enum IdentPrintMode {
2523 Normal,
2524 RawIdent,
2525 RawLifetime,
2526}
2527
2528pub struct IdentPrinter {
2542 symbol: Symbol,
2543 mode: IdentPrintMode,
2544 convert_dollar_crate: Option<Span>,
2547}
2548
2549impl IdentPrinter {
2550 pub fn new(
2552 symbol: Symbol,
2553 mode: IdentPrintMode,
2554 convert_dollar_crate: Option<Span>,
2555 ) -> IdentPrinter {
2556 IdentPrinter { symbol, mode, convert_dollar_crate }
2557 }
2558
2559 pub fn for_ast_ident(ident: Ident, mode: IdentPrintMode) -> IdentPrinter {
2563 IdentPrinter::new(ident.name, mode, Some(ident.span))
2564 }
2565}
2566
2567impl fmt::Display for IdentPrinter {
2568 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2569 let s = match self.mode {
2570 IdentPrintMode::Normal
2571 if self.symbol == kw::DollarCrate
2572 && let Some(span) = self.convert_dollar_crate =>
2573 {
2574 let converted = span.ctxt().dollar_crate_name();
2575 if !converted.is_path_segment_keyword() {
2576 f.write_str("::")?;
2577 }
2578 converted
2579 }
2580 IdentPrintMode::Normal => self.symbol,
2581 IdentPrintMode::RawIdent => {
2582 f.write_str("r#")?;
2583 self.symbol
2584 }
2585 IdentPrintMode::RawLifetime => {
2586 f.write_str("'r#")?;
2587 let s = self
2588 .symbol
2589 .as_str()
2590 .strip_prefix("'")
2591 .expect("only lifetime idents should be passed with RawLifetime mode");
2592 Symbol::intern(s)
2593 }
2594 };
2595 s.fmt(f)
2596 }
2597}
2598
2599#[derive(#[automatically_derived]
impl ::core::marker::Copy for MacroRulesNormalizedIdent { }Copy, #[automatically_derived]
impl ::core::clone::Clone for MacroRulesNormalizedIdent {
#[inline]
fn clone(&self) -> MacroRulesNormalizedIdent {
let _: ::core::clone::AssertParamIsClone<Ident>;
*self
}
}Clone, #[automatically_derived]
impl ::core::cmp::Eq for MacroRulesNormalizedIdent {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<Ident>;
}
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for MacroRulesNormalizedIdent {
#[inline]
fn eq(&self, other: &MacroRulesNormalizedIdent) -> bool {
self.0 == other.0
}
}PartialEq, #[automatically_derived]
impl ::core::hash::Hash for MacroRulesNormalizedIdent {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&self.0, state)
}
}Hash)]
2605pub struct MacroRulesNormalizedIdent(Ident);
2606
2607impl MacroRulesNormalizedIdent {
2608 #[inline]
2609 pub fn new(ident: Ident) -> Self {
2610 MacroRulesNormalizedIdent(ident.normalize_to_macro_rules())
2611 }
2612
2613 pub fn symbol(&self) -> Symbol {
2614 self.0.name
2615 }
2616
2617 pub fn ident(&self) -> Ident {
2618 self.0
2619 }
2620}
2621
2622impl fmt::Debug for MacroRulesNormalizedIdent {
2623 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2624 fmt::Debug::fmt(&self.0, f)
2625 }
2626}
2627
2628impl fmt::Display for MacroRulesNormalizedIdent {
2629 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2630 fmt::Display::fmt(&self.0, f)
2631 }
2632}
2633
2634#[derive(#[automatically_derived]
impl ::core::clone::Clone for Symbol {
#[inline]
fn clone(&self) -> Symbol {
let _: ::core::clone::AssertParamIsClone<SymbolIndex>;
*self
}
}Clone, #[automatically_derived]
impl ::core::marker::Copy for Symbol { }Copy, #[automatically_derived]
impl ::core::cmp::PartialEq for Symbol {
#[inline]
fn eq(&self, other: &Symbol) -> bool { self.0 == other.0 }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for Symbol {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<SymbolIndex>;
}
}Eq, #[automatically_derived]
impl ::core::cmp::PartialOrd for Symbol {
#[inline]
fn partial_cmp(&self, other: &Symbol)
-> ::core::option::Option<::core::cmp::Ordering> {
::core::option::Option::Some(::core::cmp::Ord::cmp(self, other))
}
}PartialOrd, #[automatically_derived]
impl ::core::cmp::Ord for Symbol {
#[inline]
fn cmp(&self, other: &Symbol) -> ::core::cmp::Ordering {
::core::cmp::Ord::cmp(&self.0, &other.0)
}
}Ord, #[automatically_derived]
impl ::core::hash::Hash for Symbol {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&self.0, state)
}
}Hash)]
2644pub struct Symbol(SymbolIndex);
2645
2646impl ::std::fmt::Debug for SymbolIndex {
fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
fmt.write_fmt(format_args!("{0}", self.as_u32()))
}
}rustc_index::newtype_index! {
2648 #[orderable]
2649 struct SymbolIndex {}
2650}
2651
2652impl Symbol {
2653 pub const fn new(n: u32) -> Self {
2656 Symbol(SymbolIndex::from_u32(n))
2657 }
2658
2659 #[rustc_diagnostic_item = "SymbolIntern"]
2661 #[inline]
2662 pub fn intern(str: &str) -> Self {
2663 with_session_globals(|session_globals| session_globals.symbol_interner.intern_str(str))
2664 }
2665
2666 #[inline]
2675 pub fn as_str(&self) -> &str {
2676 with_session_globals(|session_globals| unsafe {
2677 std::mem::transmute::<&str, &str>(session_globals.symbol_interner.get_str(*self))
2678 })
2679 }
2680
2681 pub fn as_u32(self) -> u32 {
2682 self.0.as_u32()
2683 }
2684
2685 pub fn is_empty(self) -> bool {
2686 self == sym::empty
2687 }
2688
2689 pub fn to_ident_string(self) -> String {
2694 if self == sym::empty { String::new() } else { Ident::with_dummy_span(self).to_string() }
2696 }
2697
2698 pub fn find_similar(
2705 self,
2706 candidates: &[Symbol],
2707 ) -> Option<(Symbol, bool)> {
2708 let lowercase = self.as_str().to_lowercase();
2709 let lowercase_sym = Symbol::intern(&lowercase);
2710 if candidates.contains(&lowercase_sym) {
2711 Some((lowercase_sym, true))
2712 } else if let Some(similar_sym) = find_best_match_for_name(candidates, self, None) {
2713 Some((similar_sym, false))
2714 } else {
2715 None
2716 }
2717 }
2718}
2719
2720impl fmt::Debug for Symbol {
2721 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2722 fmt::Debug::fmt(self.as_str(), f)
2723 }
2724}
2725
2726impl fmt::Display for Symbol {
2727 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2728 fmt::Display::fmt(self.as_str(), f)
2729 }
2730}
2731
2732impl StableHash for Symbol {
2733 #[inline]
2734 fn stable_hash<Hcx: StableHashCtxt>(&self, hcx: &mut Hcx, hasher: &mut StableHasher) {
2735 self.as_str().stable_hash(hcx, hasher);
2736 }
2737}
2738
2739impl StableCompare for Symbol {
2740 const CAN_USE_UNSTABLE_SORT: bool = true;
2741
2742 fn stable_cmp(&self, other: &Self) -> std::cmp::Ordering {
2743 self.as_str().cmp(other.as_str())
2744 }
2745}
2746
2747#[derive(#[automatically_derived]
impl ::core::clone::Clone for ByteSymbol {
#[inline]
fn clone(&self) -> ByteSymbol {
let _: ::core::clone::AssertParamIsClone<SymbolIndex>;
*self
}
}Clone, #[automatically_derived]
impl ::core::marker::Copy for ByteSymbol { }Copy, #[automatically_derived]
impl ::core::cmp::PartialEq for ByteSymbol {
#[inline]
fn eq(&self, other: &ByteSymbol) -> bool { self.0 == other.0 }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for ByteSymbol {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<SymbolIndex>;
}
}Eq, #[automatically_derived]
impl ::core::cmp::PartialOrd for ByteSymbol {
#[inline]
fn partial_cmp(&self, other: &ByteSymbol)
-> ::core::option::Option<::core::cmp::Ordering> {
::core::option::Option::Some(::core::cmp::Ord::cmp(self, other))
}
}PartialOrd, #[automatically_derived]
impl ::core::cmp::Ord for ByteSymbol {
#[inline]
fn cmp(&self, other: &ByteSymbol) -> ::core::cmp::Ordering {
::core::cmp::Ord::cmp(&self.0, &other.0)
}
}Ord, #[automatically_derived]
impl ::core::hash::Hash for ByteSymbol {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&self.0, state)
}
}Hash)]
2750pub struct ByteSymbol(SymbolIndex);
2751
2752impl ByteSymbol {
2753 pub const fn new(n: u32) -> Self {
2756 ByteSymbol(SymbolIndex::from_u32(n))
2757 }
2758
2759 pub fn intern(byte_str: &[u8]) -> Self {
2761 with_session_globals(|session_globals| {
2762 session_globals.symbol_interner.intern_byte_str(byte_str)
2763 })
2764 }
2765
2766 pub fn as_byte_str(&self) -> &[u8] {
2768 with_session_globals(|session_globals| unsafe {
2769 std::mem::transmute::<&[u8], &[u8]>(session_globals.symbol_interner.get_byte_str(*self))
2770 })
2771 }
2772
2773 pub fn as_u32(self) -> u32 {
2774 self.0.as_u32()
2775 }
2776}
2777
2778impl fmt::Debug for ByteSymbol {
2779 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2780 fmt::Debug::fmt(self.as_byte_str(), f)
2781 }
2782}
2783
2784impl StableHash for ByteSymbol {
2785 #[inline]
2786 fn stable_hash<Hcx: StableHashCtxt>(&self, hcx: &mut Hcx, hasher: &mut StableHasher) {
2787 self.as_byte_str().stable_hash(hcx, hasher);
2788 }
2789}
2790
2791pub(crate) struct Interner(Lock<InternerInner>);
2796
2797struct InternerInner {
2803 arena: DroplessArena,
2804 indices: HashTable<(&'static [u8], u32)>,
2805 byte_strs: Vec<&'static [u8]>,
2806}
2807
2808impl Interner {
2809 fn prefill(init: &[&'static str], extra: &[&'static str]) -> Self {
2813 let values = init.iter().copied().chain(extra.iter().copied()).map(|str| str.as_bytes());
2814 let (size_hint, _) = values.size_hint();
2815 let mut conflicting_values: Vec<&[u8]> = Vec::new();
2816
2817 let mut indices: HashTable<(&'static [u8], u32)> = HashTable::with_capacity(size_hint);
2818 let hasher = FxBuildHasher::default();
2819
2820 let mut byte_strs: Vec<&'static [u8]> = Vec::with_capacity(size_hint);
2821
2822 for v in values {
2823 match indices.entry(hasher.hash_one(&v), |&(s, _)| s == v, |&(s, _)| hasher.hash_one(s))
2824 {
2825 Entry::Occupied(v) => conflicting_values.push(v.get().0),
2826 Entry::Vacant(view) => {
2827 view.insert((v, byte_strs.len() as u32));
2828 byte_strs.push(v);
2829 }
2830 }
2831 }
2832
2833 if conflicting_values.len() != 0 {
2834 {
::core::panicking::panic_fmt(format_args!("duplicate symbols in the rustc symbol list and the extra symbols added by the driver: {0:?}",
conflicting_values));
}panic!(
2835 "duplicate symbols in the rustc symbol list and the extra symbols added by the driver: {:?}",
2836 conflicting_values
2837 )
2838 }
2839
2840 Interner(Lock::new(InternerInner { arena: Default::default(), indices, byte_strs }))
2841 }
2842
2843 fn intern_str(&self, str: &str) -> Symbol {
2844 Symbol::new(self.intern_inner(str.as_bytes()))
2845 }
2846
2847 fn intern_byte_str(&self, byte_str: &[u8]) -> ByteSymbol {
2848 ByteSymbol::new(self.intern_inner(byte_str))
2849 }
2850
2851 #[inline]
2852 fn intern_inner(&self, byte_str: &[u8]) -> u32 {
2853 let hasher = FxBuildHasher::default();
2854 let hash_of_byte_str = hasher.hash_one(byte_str);
2855
2856 self.0.with_lock(|inner| {
2857 match inner.indices.entry(
2858 hash_of_byte_str,
2859 |&(s, _)| s == byte_str,
2860 |&(s, _)| hasher.hash_one(s),
2861 ) {
2862 Entry::Occupied(v) => v.get().1,
2863 Entry::Vacant(view) => {
2864 let byte_str: &[u8] = inner.arena.alloc_slice(byte_str);
2865
2866 let byte_str: &'static [u8] = unsafe { &*(byte_str as *const [u8]) };
2869 let idx = inner.byte_strs.len() as u32;
2870 view.insert((byte_str, idx));
2871 inner.byte_strs.push(byte_str);
2872 idx
2873 }
2874 }
2875 })
2876 }
2877
2878 fn get_str(&self, symbol: Symbol) -> &str {
2882 let byte_str = self.get_inner(symbol.0.as_usize());
2883 unsafe { str::from_utf8_unchecked(byte_str) }
2885 }
2886
2887 fn get_byte_str(&self, symbol: ByteSymbol) -> &[u8] {
2891 self.get_inner(symbol.0.as_usize())
2892 }
2893
2894 fn get_inner(&self, index: usize) -> &[u8] {
2895 self.0.with_lock(|inner| inner.byte_strs[index])
2896 }
2897}
2898
2899pub mod kw {
2905 pub use super::kw_generated::*;
2906}
2907
2908pub mod sym {
2914 use super::Symbol;
2916 pub use super::kw::MacroRules as macro_rules;
2917 #[doc(inline)]
2918 pub use super::sym_generated::*;
2919
2920 pub const C: Symbol = ascii_letter_digit('C').unwrap();
2922
2923 #[expect(non_upper_case_globals)]
2925 pub const f: Symbol = ascii_letter_digit('f').unwrap();
2926 #[expect(non_upper_case_globals)]
2927 pub const d: Symbol = ascii_letter_digit('d').unwrap();
2928
2929 pub fn integer<N: TryInto<usize> + Copy + itoa::Integer>(n: N) -> Symbol {
2934 if let Result::Ok(idx) = n.try_into() {
2935 if idx < 10 {
2936 return Symbol::new(super::SYMBOL_DIGITS_BASE + idx as u32);
2937 }
2938 }
2939 let mut buffer = itoa::Buffer::new();
2940 let printed = buffer.format(n);
2941 Symbol::intern(printed)
2942 }
2943
2944 pub const fn ascii_letter_digit(c: char) -> Option<Symbol> {
2945 let i = c as u32;
2946 Option::Some(Symbol::new(match c {
2947 '0'..='9' => super::SYMBOL_DIGITS_BASE + (i - '0' as u32),
2948 'A'..='Z' => super::SYMBOL_UPPERCASE_LETTERS_BASE + (i - 'A' as u32),
2949 'a'..='z' => super::SYMBOL_LOWERCASE_LETTERS_BASE + (i - 'a' as u32),
2950 _ => return Option::None,
2951 }))
2952 }
2953
2954 pub fn character(c: char) -> Symbol {
2955 ascii_letter_digit(c).unwrap_or_else(|| {
2956 let mut buf: [u8; char::MAX_LEN_UTF8] = Default::default();
2957 Symbol::intern(c.encode_utf8(&mut buf))
2958 })
2959 }
2960}
2961
2962impl Symbol {
2963 fn is_special(self) -> bool {
2964 self <= kw::Underscore
2965 }
2966
2967 fn is_used_keyword_always(self) -> bool {
2968 self >= kw::As && self <= kw::While
2969 }
2970
2971 fn is_unused_keyword_always(self) -> bool {
2972 self >= kw::Abstract && self <= kw::Yield
2973 }
2974
2975 fn is_used_keyword_conditional(self, edition: impl FnOnce() -> Edition) -> bool {
2976 (self >= kw::Async && self <= kw::Dyn) && edition() >= Edition::Edition2018
2977 }
2978
2979 fn is_unused_keyword_conditional(self, edition: impl Copy + FnOnce() -> Edition) -> bool {
2980 self == kw::Gen && edition().at_least_rust_2024()
2981 || self == kw::Try && edition().at_least_rust_2018()
2982 }
2983
2984 pub fn is_reserved(self, edition: impl Copy + FnOnce() -> Edition) -> bool {
2985 self.is_special()
2986 || self.is_used_keyword_always()
2987 || self.is_unused_keyword_always()
2988 || self.is_used_keyword_conditional(edition)
2989 || self.is_unused_keyword_conditional(edition)
2990 }
2991
2992 pub fn is_weak(self) -> bool {
2993 self >= kw::Auto && self <= kw::Yeet
2994 }
2995
2996 pub fn is_path_segment_keyword(self) -> bool {
2998 self == kw::Super
2999 || self == kw::SelfLower
3000 || self == kw::SelfUpper
3001 || self == kw::Crate
3002 || self == kw::PathRoot
3003 || self == kw::DollarCrate
3004 }
3005
3006 pub fn is_bool_lit(self) -> bool {
3008 self == kw::True || self == kw::False
3009 }
3010
3011 pub fn can_be_raw(self) -> bool {
3013 self != sym::empty && self != kw::Underscore && !self.is_path_segment_keyword()
3014 }
3015
3016 pub fn is_predefined(index: u32) -> bool {
3020 index < PREDEFINED_SYMBOLS_COUNT
3021 }
3022}
3023
3024impl Ident {
3025 pub fn is_special(self) -> bool {
3028 self.name.is_special()
3029 }
3030
3031 pub fn is_used_keyword(self) -> bool {
3033 self.name.is_used_keyword_always()
3035 || self.name.is_used_keyword_conditional(|| self.span.edition())
3036 }
3037
3038 pub fn is_unused_keyword(self) -> bool {
3040 self.name.is_unused_keyword_always()
3042 || self.name.is_unused_keyword_conditional(|| self.span.edition())
3043 }
3044
3045 pub fn is_reserved(self) -> bool {
3047 self.name.is_reserved(|| self.span.edition())
3049 }
3050
3051 pub fn is_path_segment_keyword(self) -> bool {
3053 self.name.is_path_segment_keyword()
3054 }
3055
3056 pub fn is_raw_guess(self) -> bool {
3059 self.name.can_be_raw() && self.is_reserved()
3060 }
3061
3062 pub fn is_reserved_lifetime(self) -> bool {
3065 self.is_reserved() && ![kw::Underscore, kw::Static].contains(&self.name)
3066 }
3067
3068 pub fn is_raw_lifetime_guess(self) -> bool {
3069 if self.name.as_str() == "'" {
3072 return false;
3073 }
3074 let ident_without_apostrophe = self.without_first_quote();
3075 ident_without_apostrophe.name != self.name
3076 && ident_without_apostrophe.name.can_be_raw()
3077 && ident_without_apostrophe.is_reserved_lifetime()
3078 }
3079
3080 pub fn guess_print_mode(self) -> IdentPrintMode {
3081 if self.is_raw_lifetime_guess() {
3082 IdentPrintMode::RawLifetime
3083 } else if self.is_raw_guess() {
3084 IdentPrintMode::RawIdent
3085 } else {
3086 IdentPrintMode::Normal
3087 }
3088 }
3089
3090 pub fn is_numeric(self) -> bool {
3093 self.as_str().bytes().all(|b| b.is_ascii_digit())
3094 }
3095}
3096
3097pub fn used_keywords(edition: impl Copy + FnOnce() -> Edition) -> Vec<Symbol> {
3102 (kw::DollarCrate.as_u32()..kw::Yeet.as_u32())
3103 .filter_map(|kw| {
3104 let kw = Symbol::new(kw);
3105 if kw.is_used_keyword_always() || kw.is_used_keyword_conditional(edition) {
3106 Some(kw)
3107 } else {
3108 None
3109 }
3110 })
3111 .collect()
3112}