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