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