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