1use std::hash::{BuildHasher, Hash, Hasher};
6use std::{fmt, str};
7
8use rustc_arena::DroplessArena;
9use rustc_data_structures::fx::FxBuildHasher;
10use rustc_data_structures::hash_table::{Entry, HashTable};
11use rustc_data_structures::stable_hash::{StableCompare, StableHash, StableHashCtxt, StableHasher};
12use rustc_data_structures::sync::Lock;
13use rustc_macros::{Decodable, Encodable, StableHash, symbols};
14
15use crate::edit_distance::find_best_match_for_name;
16use crate::{DUMMY_SP, Edition, Span, with_session_globals};
17
18#[cfg(test)]
19mod tests;
20
21impl Interner {
#[doc =
r" Creates an `Interner` with the predefined symbols from the `symbols!` macro and"]
#[doc = r" any extra symbols provided by external drivers such as Clippy"]
pub(crate) fn with_extra_symbols(extra_symbols: &[&'static str]) -> Self {
Interner::prefill(&["$crate", "{{root}}", "_", "as", "break", "const",
"continue", "crate", "else", "enum", "extern", "false",
"fn", "for", "if", "impl", "in", "let", "loop", "match",
"mod", "move", "mut", "pub", "ref", "return", "self",
"Self", "static", "struct", "super", "trait", "true",
"type", "unsafe", "use", "where", "while", "abstract",
"become", "box", "do", "final", "macro", "override", "priv",
"typeof", "unsized", "virtual", "yield", "async", "await",
"dyn", "gen", "try", "'static", "'_", "auto", "builtin",
"catch", "contract_ensures", "contract_requires", "default",
"macro_rules", "raw", "reuse", "safe", "union", "yeet",
"Abi", "AcqRel", "Acquire", "Active", "ActiveOnly",
"Alignment", "Arc", "ArcWeak", "Array", "AsMut", "AsRef",
"AssertParamIsClone", "AssertParamIsCopy",
"AssertParamIsEq", "AsyncGenFinished", "AsyncGenPending",
"AsyncGenReady", "Atomic", "BTreeMap", "Bool", "Borrow",
"BorrowMut", "Break", "BuildHasher", "CStr",
"CallOnceFuture", "CallRefFuture", "Capture", "Cell",
"Char", "Cleanup", "Client", "Clone", "CoercePointee",
"CoercePointeeValidated", "CoerceUnsized", "Const",
"ConstParamTy", "ConstParamTy_", "Context", "Continue",
"ControlFlow", "Copy", "Cow", "Debug", "Default", "Deref",
"DispatchFromDyn", "Display", "Dual", "DualOnly", "Dualv",
"DualvOnly", "Duplicated", "DuplicatedOnly", "DynTrait",
"Enum", "Eq", "Equal", "Err", "Expected", "ExternC",
"ExternRust", "Float", "FmtArgumentsNew", "Fn", "FnMut",
"FnOnce", "FnPtr", "Formatter", "Forward", "Found", "From",
"FromIterator", "FromResidual", "GlobalAlloc", "Hash",
"HashMap", "HashSet", "Hasher", "InCleanup", "IndexOutput",
"Input", "Int", "Into", "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", "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", "🦀", "ferrocene", "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",
"prevalidated", "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_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.99.0-nightly"], extra_symbols)
}
}symbols! {
23 Keywords {
32 DollarCrate: "$crate",
38 PathRoot: "{{root}}",
39 Underscore: "_",
40 As: "as",
46 Break: "break",
47 Const: "const",
48 Continue: "continue",
49 Crate: "crate",
50 Else: "else",
51 Enum: "enum",
52 Extern: "extern",
53 False: "false",
54 Fn: "fn",
55 For: "for",
56 If: "if",
57 Impl: "impl",
58 In: "in",
59 Let: "let",
60 Loop: "loop",
61 Match: "match",
62 Mod: "mod",
63 Move: "move",
64 Mut: "mut",
65 Pub: "pub",
66 Ref: "ref",
67 Return: "return",
68 SelfLower: "self",
69 SelfUpper: "Self",
70 Static: "static",
71 Struct: "struct",
72 Super: "super",
73 Trait: "trait",
74 True: "true",
75 Type: "type",
76 Unsafe: "unsafe",
77 Use: "use",
78 Where: "where",
79 While: "while",
80 Abstract: "abstract",
86 Become: "become",
87 Box: "box",
88 Do: "do",
89 Final: "final",
90 Macro: "macro",
91 Override: "override",
92 Priv: "priv",
93 Typeof: "typeof",
94 Unsized: "unsized",
95 Virtual: "virtual",
96 Yield: "yield",
97 Async: "async", Await: "await", Dyn: "dyn", Gen: "gen", Try: "try", StaticLifetime: "'static",
120 UnderscoreLifetime: "'_",
121 Auto: "auto",
127 Builtin: "builtin",
128 Catch: "catch",
129 ContractEnsures: "contract_ensures",
130 ContractRequires: "contract_requires",
131 Default: "default",
132 MacroRules: "macro_rules",
133 Raw: "raw",
134 Reuse: "reuse",
135 Safe: "safe",
136 Union: "union",
137 Yeet: "yeet",
138 }
140
141 Symbols {
155 Abi,
157 AcqRel,
158 Acquire,
159 Active,
160 ActiveOnly,
161 Alignment,
162 Arc,
163 ArcWeak,
164 Array,
165 AsMut,
166 AsRef,
167 AssertParamIsClone,
168 AssertParamIsCopy,
169 AssertParamIsEq,
170 AsyncGenFinished,
171 AsyncGenPending,
172 AsyncGenReady,
173 Atomic,
174 BTreeMap,
175 Bool,
176 Borrow,
177 BorrowMut,
178 Break,
179 BuildHasher,
180 CStr,
181 CallOnceFuture,
182 CallRefFuture,
183 Capture,
184 Cell,
185 Char,
186 Cleanup,
187 Client,
188 Clone,
189 CoercePointee,
190 CoercePointeeValidated,
191 CoerceUnsized,
192 Const,
193 ConstParamTy,
194 ConstParamTy_,
195 Context,
196 Continue,
197 ControlFlow,
198 Copy,
199 Cow,
200 Debug,
201 Default,
202 Deref,
203 DispatchFromDyn,
204 Display,
205 Dual,
206 DualOnly,
207 Dualv,
208 DualvOnly,
209 Duplicated,
210 DuplicatedOnly,
211 DynTrait,
212 Enum,
213 Eq,
214 Equal,
215 Err,
216 Expected,
217 ExternC,
218 ExternRust,
219 Float,
220 FmtArgumentsNew,
221 Fn,
222 FnMut,
223 FnOnce,
224 FnPtr,
225 Formatter,
226 Forward,
227 Found,
228 From,
229 FromIterator,
230 FromResidual,
231 GlobalAlloc,
232 Hash,
233 HashMap,
234 HashSet,
235 Hasher,
236 InCleanup,
237 IndexOutput,
238 Input,
239 Int,
240 Into,
241 IntoAsyncIterator,
242 IntoFuture,
243 IntoIterator,
244 IntoIteratorItem,
245 IoBufReader,
246 IrTyKind,
247 Item,
248 ItemContext,
249 Iterator,
250 IteratorItem,
251 IteratorMap,
252 Layout,
253 Lifetime,
254 LintPass,
255 LocalKey,
256 Mutex,
257 MutexGuard,
258 Named,
259 NonNull,
260 NonZero,
261 None,
262 Normal,
263 Ok,
264 Option,
265 Ord,
266 Ordering,
267 Other,
268 Output,
269 ParamSet,
270 PartialEq,
271 PartialOrd,
272 Pending,
273 PinDerefMutHelper,
274 PinMacroHelper,
275 Pointer,
276 Poll,
277 Range,
278 RangeCopy,
279 RangeFrom,
280 RangeFromCopy,
281 RangeFull,
282 RangeInclusive,
283 RangeInclusiveCopy,
284 RangeMax,
285 RangeMin,
286 RangeSub,
287 RangeTo,
288 RangeToInclusive,
289 RangeToInclusiveCopy,
290 Rc,
291 RcWeak,
292 Ready,
293 Reborrow,
294 RefCell,
295 Reference,
296 Relaxed,
297 Release,
298 Result,
299 ResumeTy,
300 Reverse,
301 Rust,
302 RustEmbed,
304 RustaceansAreAwesome,
305 RwLock,
306 RwLockReadGuard,
307 RwLockWriteGuard,
308 SelfTy,
309 Send,
310 SeqCst,
311 Sized,
312 Slice,
313 SliceIndex,
314 Some,
315 Source,
316 SpanCtxt,
317 StdinLock,
318 Str,
319 String,
320 Struct,
321 StructuralPartialEq,
322 SymbolIntern,
323 Sync,
324 SyncUnsafeCell,
325 Target,
326 This,
327 TokenStream,
328 TrivialClone,
329 Try,
330 TryCaptureGeneric,
331 TryCapturePrintable,
332 TryFrom,
333 TryInto,
334 Tuple,
335 Ty,
336 TyCtxt,
337 TyKind,
338 Type,
339 Union,
340 Unresolved,
341 Unsize,
342 Vec,
343 Wrapper,
344 _DECLS,
345 __H,
346 __S,
347 __awaitee,
348 __try_var,
349 _t,
350 _task_context,
351 a32,
352 aarch64,
353 aarch64_target_feature,
354 aarch64_unstable_target_feature,
355 aarch64_ver_target_feature,
356 abi,
357 abi_amdgpu_kernel,
358 abi_avr_interrupt,
359 abi_c_cmse_nonsecure_call,
360 abi_cmse_nonsecure_call,
361 abi_custom,
362 abi_efiapi,
363 abi_gpu_kernel,
364 abi_msp430_interrupt,
365 abi_ptx,
366 abi_riscv_interrupt,
367 abi_swift,
368 abi_sysv64,
369 abi_thiscall,
370 abi_unadjusted,
371 abi_vectorcall,
372 abi_x86_interrupt,
373 abort,
374 add,
375 add_assign,
376 add_with_overflow,
377 address,
378 adt_const_params,
379 advanced_slice_patterns,
380 adx_target_feature,
381 aes,
382 aggregate_raw_ptr,
383 alias,
384 align,
385 align_of,
386 align_of_val,
387 alignment,
388 all,
389 alloc,
390 alloc_error_handler,
391 alloc_layout,
392 alloc_zeroed,
393 allocator,
394 allocator_api,
395 allocator_internals,
396 allow,
397 allow_fail,
398 allow_internal_unsafe,
399 allow_internal_unstable,
400 altivec,
401 alu32,
402 always,
403 amdgpu,
404 amdgpu_dispatch_ptr,
405 analysis,
406 and,
407 and_then,
408 anon,
409 anon_assoc,
410 anonymous_lifetime_in_impl_trait,
411 any,
412 apx_target_feature,
413 arbitrary_enum_discriminant,
414 arbitrary_self_types,
415 arbitrary_self_types_pointers,
416 areg,
417 args,
418 arith_offset,
419 arm,
420 arm64ec,
421 arm_a32: "arm::a32",
422 arm_t32: "arm::t32",
423 arm_target_feature,
424 array,
425 as_dash_needed: "as-needed",
426 as_ref,
427 asm,
428 asm_cfg,
429 asm_const,
430 asm_const_ptr,
431 asm_experimental_arch,
432 asm_experimental_reg,
433 asm_goto,
434 asm_goto_with_outputs,
435 asm_sym,
436 asm_unwind,
437 assert,
438 assert_eq,
439 assert_eq_macro,
440 assert_fields_are_eq,
441 assert_inhabited,
442 assert_macro,
443 assert_mem_uninitialized_valid,
444 assert_ne_macro,
445 assert_receiver_is_total_eq,
446 assert_zero_valid,
447 asserting,
448 associated_const_equality,
449 associated_consts,
450 associated_type_bounds,
451 associated_type_defaults,
452 associated_types,
453 assume,
454 assume_init,
455 asterisk: "*",
456 async_await,
457 async_call,
458 async_call_mut,
459 async_call_once,
460 async_closure,
461 async_drop,
462 async_drop_in_place,
463 async_fn,
464 async_fn_in_dyn_trait,
465 async_fn_in_trait,
466 async_fn_kind_helper,
467 async_fn_kind_upvars,
468 async_fn_mut,
469 async_fn_once,
470 async_fn_once_output,
471 async_fn_track_caller,
472 async_fn_traits,
473 async_for_loop,
474 async_gen_internals,
475 async_iterator,
476 async_iterator_poll_next,
477 async_trait_bounds,
478 atomic,
479 atomic_and,
480 atomic_cxchg,
481 atomic_cxchgweak,
482 atomic_fence,
483 atomic_load,
484 atomic_max,
485 atomic_min,
486 atomic_nand,
487 atomic_or,
488 atomic_singlethreadfence,
489 atomic_store,
490 atomic_umax,
491 atomic_umin,
492 atomic_xadd,
493 atomic_xchg,
494 atomic_xor,
495 atomic_xsub,
496 atomics,
497 att_syntax,
498 attr,
499 attr_literals,
500 attribute,
501 attributes,
502 audit_that,
503 augmented_assignments,
504 auto_cfg,
505 auto_traits,
506 autodiff,
507 autodiff_forward,
508 autodiff_reverse,
509 automatically_derived,
510 available_externally,
511 avr,
512 avr_target_feature,
513 avx,
514 avx10_target_feature,
515 avx512_target_feature,
516 avx512bw,
517 avx512f,
518 await_macro,
519 backchain,
520 backend_repr,
521 begin_panic,
522 bench,
523 bevy_ecs,
524 bikeshed,
525 bikeshed_guaranteed_no_drop,
526 bin,
527 bind_by_move_pattern_guards,
528 bindings_after_at,
529 bitand,
530 bitand_assign,
531 bitor,
532 bitor_assign,
533 bitreverse,
534 bits,
535 bitxor,
536 bitxor_assign,
537 black_box,
538 block,
539 blocking,
540 bool,
541 borrowck_graphviz_format,
542 borrowck_graphviz_postflow,
543 box_new,
544 box_patterns,
545 box_syntax,
546 boxed_slice,
547 bpf,
548 bpf_target_feature,
549 braced_empty_structs,
550 branch,
551 breakpoint,
552 breg,
553 bridge,
554 bswap,
555 built,
556 builtin_syntax,
557 bundle,
558 c_dash_variadic,
559 c_str_literals,
560 c_unwind,
561 c_variadic,
562 c_variadic_experimental_arch,
563 c_variadic_naked_functions,
564 c_void,
565 call,
566 call_mut,
567 call_once,
568 call_once_future,
569 call_ref_future,
570 caller,
571 caller_location,
572 capture_disjoint_fields,
573 carrying_mul_add,
574 carryless_mul,
575 catch_unwind,
576 cause,
577 cdylib,
578 ceilf16,
579 ceilf32,
580 ceilf64,
581 ceilf128,
582 cfg,
583 cfg_accessible,
584 cfg_attr,
585 cfg_attr_multi,
586 cfg_boolean_literals,
587 cfg_contract_checks,
588 cfg_doctest,
589 cfg_eval,
590 cfg_overflow_checks,
591 cfg_panic,
592 cfg_relocation_model,
593 cfg_sanitize,
594 cfg_sanitizer_cfi,
595 cfg_select,
596 cfg_target_abi,
597 cfg_target_compact,
598 cfg_target_feature,
599 cfg_target_has_atomic,
600 cfg_target_has_atomic_equal_alignment,
601 cfg_target_has_reliable_f16_f128,
602 cfg_target_has_threads,
603 cfg_target_object_format,
604 cfg_target_thread_local,
605 cfg_target_vendor,
606 cfg_ub_checks,
607 cfg_version,
608 cfi,
609 cfi_encoding,
610 char,
611 checked_type_aliases,
612 clflushopt_target_feature,
613 client,
614 clippy,
615 clobber_abi,
616 clone,
617 clone_closures,
618 clone_fn,
619 clone_from,
620 close_fn,
621 closure,
622 closure_lifetime_binder,
623 closure_to_fn_coercion,
624 closure_track_caller,
625 cmp,
626 cmp_ord_max,
627 cmp_ord_min,
628 cmp_partialeq_eq,
629 cmp_partialeq_ne,
630 cmp_partialord_cmp,
631 cmp_partialord_ge,
632 cmp_partialord_gt,
633 cmp_partialord_le,
634 cmp_partialord_lt,
635 cmpxchg16b_target_feature,
636 cmse_nonsecure_entry,
637 coerce_pointee_validated,
638 coerce_shared,
639 coerce_shared_target,
640 coerce_unsized,
641 coff,
642 cold,
643 cold_path,
644 collapse_debuginfo,
645 column,
646 common,
647 compare_bytes,
648 compare_exchange,
649 compare_exchange_weak,
650 compile_error,
651 compiler,
652 compiler_builtins,
653 compiler_copy,
654 compiler_fence,
655 compiler_move,
656 concat,
657 concat_bytes,
658 conservative_impl_trait,
659 console,
660 const_allocate,
661 const_async_blocks,
662 const_block_items,
663 const_c_variadic,
664 const_closures,
665 const_compare_raw_pointers,
666 const_constructor,
667 const_continue,
668 const_deallocate,
669 const_destruct,
670 const_eval_limit,
671 const_eval_select,
672 const_evaluatable_checked,
673 const_extern_fn,
674 const_fn,
675 const_fn_floating_point_arithmetic,
676 const_fn_fn_ptr_basics,
677 const_fn_trait_bound,
678 const_fn_transmute,
679 const_fn_union,
680 const_fn_unsize,
681 const_for,
682 const_format_args,
683 const_generics,
684 const_generics_defaults,
685 const_if_match,
686 const_impl_trait,
687 const_in_array_repeat_expressions,
688 const_indexing,
689 const_let,
690 const_loop,
691 const_make_global,
692 const_mut_refs,
693 const_panic,
694 const_panic_fmt,
695 const_param_ty,
696 const_param_ty_unchecked,
697 const_precise_live_drops,
698 const_ptr_cast,
699 const_raw_ptr_deref,
700 const_raw_ptr_to_usize_cast,
701 const_refs_to_cell,
702 const_refs_to_static,
703 const_trait_bound_opt_out,
704 const_trait_impl,
705 const_try,
706 const_ty_placeholder: "<const_ty>",
707 constant,
708 constructor,
709 contract_build_check_ensures,
710 contract_check_ensures,
711 contract_check_requires,
712 contract_checks,
713 contracts,
714 contracts_ensures,
715 contracts_internals,
716 contracts_requires,
717 convert,
718 coprocessor,
719 copy,
720 copy_closures,
721 copy_nonoverlapping,
722 copysignf16,
723 copysignf32,
724 copysignf64,
725 copysignf128,
726 core,
727 core_panic,
728 core_panic_2015_macro,
729 core_panic_macro,
730 coroutine,
731 coroutine_clone,
732 coroutine_resume,
733 coroutine_return,
734 coroutine_state,
735 coroutine_yield,
736 coroutines,
737 cosf16,
738 cosf32,
739 cosf64,
740 cosf128,
741 count,
742 covariant_unsafe_cell,
743 coverage,
744 coverage_attribute,
745 cr,
746 crate_in_paths,
747 crate_local,
748 crate_name,
749 crate_type,
750 crate_visibility_modifier,
751 crt_dash_static: "crt-static",
752 csky,
753 csky_target_feature,
754 cstr_type,
755 cstring_type,
756 ctlz,
757 ctlz_nonzero,
758 ctpop,
759 ctr,
760 cttz,
761 cttz_nonzero,
762 custom_attribute,
763 custom_code_classes_in_docs,
764 custom_derive,
765 custom_inner_attributes,
766 custom_mir,
767 custom_test_frameworks,
768 d32,
769 dead_code,
770 dead_code_pub_in_binary,
771 dealloc,
772 debug,
773 debug_assert_eq_macro,
774 debug_assert_macro,
775 debug_assert_ne_macro,
776 debug_assertions,
777 debug_c_like_enum_write_str,
778 debug_struct_fields_finish,
779 debug_tuple_fields_finish,
780 debugger_visualizer,
781 decl_macro,
782 declare_lint_pass,
783 decorated,
784 default_alloc_error_handler,
785 default_field_values,
786 default_fn,
787 default_lib_allocator,
788 default_method_body_is_const,
789 default_trait1,
794 default_trait2,
795 default_trait3,
796 default_trait4,
797 default_type_parameter_fallback,
799 default_type_params,
800 define_opaque,
801 deny,
802 deprecated,
803 deprecated_safe,
804 deprecated_suggestion,
805 deref,
806 deref_method,
807 deref_mut,
808 deref_patterns,
809 deref_pure,
810 deref_target,
811 derive,
812 derive_const,
813 derive_const_issue: "118304",
814 derive_default_enum,
815 derive_from,
816 derive_smart_pointer,
817 destruct,
818 destructuring_assignment,
819 diagnostic,
820 diagnostic_namespace,
821 diagnostic_on_const,
822 diagnostic_on_move,
823 diagnostic_on_type_error,
824 diagnostic_on_unknown,
825 diagnostic_on_unmatch_args,
826 diagnostic_on_unmatched_args,
827 diagnostic_opaque,
828 dialect,
829 direct,
830 direct_const_arg,
831 discriminant_kind,
832 discriminant_type,
833 discriminant_value,
834 disjoint_bitor,
835 dispatch_from_dyn,
836 div,
837 div_assign,
838 diverging_block_default,
839 dl,
840 do_not_recommend,
841 doc,
842 doc_alias,
843 doc_auto_cfg,
844 doc_cfg,
845 doc_cfg_hide,
846 doc_keyword,
847 doc_masked,
848 doc_notable_trait,
849 doc_primitive,
850 doc_spotlight,
851 doctest,
852 dotdot_in_tuple_patterns,
853 dotdoteq_in_patterns,
854 dreg,
855 dreg_low8,
856 dreg_low16,
857 drop,
858 drop_glue,
859 drop_in_place,
860 drop_types_in_const,
861 dropck_eyepatch,
862 dropck_parametricity,
863 dummy: "<!dummy!>", dummy_cgu_name,
865 dylib,
866 dyn_compatible_for_dispatch,
867 dyn_metadata,
868 dyn_star,
869 dyn_trait,
870 dynamic_no_pic: "dynamic-no-pic",
871 edition_panic,
872 effective_target_features,
873 effects,
874 eh_personality,
875 eii,
876 eii_declaration,
877 eii_internals,
878 eii_shared_macro,
879 element_ty,
880 elf,
881 empty: "",
889 empty_braces: "{}",
890 empty_brackets: "[]",
891 empty_parens: "()",
892 enable,
893 end,
894 entry_nops,
895 env,
896 env_CFG_RELEASE: env!("CFG_RELEASE"),
897 eq,
898 ergonomic_clones,
899 ermsb_target_feature,
900 exact_div,
901 except,
902 exception,
903 exception_handling: "exception-handling",
904 exclusive_range_pattern,
905 exhaustive_integer_patterns,
906 exhaustive_patterns,
907 existential_type,
908 exp2f16,
909 exp2f32,
910 exp2f64,
911 exp2f128,
912 expand1,
913 expand2,
914 expect,
915 expected,
916 expf16,
917 expf32,
918 expf64,
919 expf128,
920 explicit_extern_abis,
921 explicit_generic_args_with_impl_trait,
922 explicit_tail_calls,
923 export_name,
924 export_stable,
925 export_symbols: "export-symbols",
926 expr,
927 expr_2021,
928 expr_fragment_specifier_2024,
929 extended_key_value_attributes,
930 extended_varargs_abi_support,
931 extendedl32r,
932 extern_absolute_paths,
933 extern_crate_item_prelude,
934 extern_crate_self,
935 extern_in_paths,
936 extern_item_impls,
937 extern_prelude,
938 extern_system_varargs,
939 extern_types,
940 extern_weak,
941 external,
942 external_doc,
943 f16,
944 f16_nan,
945 f16c_target_feature,
946 f32,
947 f32_nan,
948 f64,
949 f64_nan,
950 f128,
951 f128_nan,
952 fabs,
953 fadd_algebraic,
954 fadd_fast,
955 fake_variadic,
956 fallback,
957 fdiv_algebraic,
958 fdiv_fast,
959 feature,
960 fence,
961 ferris: "🦀",
962 ferrocene,
963 fetch_update,
964 ffi_const,
965 ffi_pure,
966 ffi_returns_twice,
967 field,
968 field_base,
969 field_init_shorthand,
970 field_of,
971 field_offset,
972 field_projections,
973 field_representing_type,
974 field_representing_type_actual_type_id,
975 field_representing_type_name,
976 field_representing_type_offset,
977 field_representing_type_raw,
978 field_type,
979 fields,
980 file,
981 final_associated_functions,
982 float_to_int_unchecked,
983 floorf16,
984 floorf32,
985 floorf64,
986 floorf128,
987 fma4_target_feature,
988 fmaf16,
989 fmaf32,
990 fmaf64,
991 fmaf128,
992 fmt,
993 fmt_debug,
994 fmul_algebraic,
995 fmul_fast,
996 fmuladdf16,
997 fmuladdf32,
998 fmuladdf64,
999 fmuladdf128,
1000 fn_align,
1001 fn_body,
1002 fn_delegation,
1003 fn_must_use,
1004 fn_mut,
1005 fn_once,
1006 fn_once_output,
1007 fn_ptr_addr,
1008 fn_ptr_trait,
1009 forbid,
1010 force_target_feature,
1011 forget,
1012 format_args,
1013 format_args_capture,
1014 format_args_nl,
1015 format_argument,
1016 format_arguments,
1017 format_macro,
1018 format_placeholder,
1019 format_unsafe_arg,
1020 fp,
1021 framework,
1022 freeze,
1023 freeze_impls,
1024 freg,
1025 frem_algebraic,
1026 frem_fast,
1027 from,
1028 from_desugaring,
1029 from_iter,
1030 from_output,
1031 from_residual,
1032 from_size_align_unchecked,
1033 from_size_alignment_unchecked,
1034 from_str,
1035 from_str_nonconst,
1036 from_usize,
1037 from_yeet,
1038 frontmatter,
1039 fsub_algebraic,
1040 fsub_fast,
1041 full,
1042 fundamental,
1043 fused_iterator,
1044 future_output,
1045 future_trait,
1046 fxsr,
1047 gdb_script_file,
1048 ge,
1049 gen_blocks,
1050 gen_future,
1051 generator_clone,
1052 generators,
1053 generic_arg_infer,
1054 generic_assert,
1055 generic_associated_types,
1056 generic_associated_types_extended,
1057 generic_const_args,
1058 generic_const_exprs,
1059 generic_const_items,
1060 generic_const_parameter_types,
1061 generic_param_attrs,
1062 generic_pattern_types,
1063 generics,
1064 get_context,
1065 global_alloc_ty,
1066 global_allocator,
1067 global_asm,
1068 global_registration,
1069 globs,
1070 gpu_kernel: "gpu-kernel",
1071 gpu_launch_sized_workgroup_mem,
1072 gt,
1073 guard,
1074 guard_patterns,
1075 half_open_range_patterns,
1076 half_open_range_patterns_in_slices,
1077 hash,
1078 hexagon,
1079 hexagon_target_feature,
1080 hidden,
1081 hide,
1082 highpriinterrupts,
1083 hint,
1084 homogeneous_aggregate,
1085 html_favicon_url,
1086 html_logo_url,
1087 html_no_source,
1088 html_playground_url,
1089 html_root_url,
1090 hvx,
1091 hvx_length64b: "hvx-length64b",
1092 hvx_length128b: "hvx-length128b",
1093 hwaddress,
1094 i8,
1095 i16,
1096 i32,
1097 i64,
1098 i128,
1099 i128_type,
1100 ident,
1101 if_let,
1102 if_let_guard,
1103 if_let_rescope,
1104 if_while_or_patterns,
1105 ignore,
1106 immediate_abort: "immediate-abort",
1107 impl_header_lifetime_elision,
1108 impl_lint_pass,
1109 impl_restriction,
1110 impl_trait_in_assoc_type,
1111 impl_trait_in_bindings,
1112 impl_trait_in_fn_trait_return,
1113 impl_trait_projections,
1114 implied_by,
1115 import,
1116 import_name_type,
1117 import_shadowing,
1118 import_trait_associated_functions,
1119 imported_main,
1120 in_band_lifetimes,
1121 include,
1122 include_bytes,
1123 include_str,
1124 inclusive_range_syntax,
1125 incomplete_features,
1126 index,
1127 index_mut,
1128 infer_outlives_requirements,
1129 infer_static_outlives_requirements,
1130 inherent_associated_types,
1131 initial,
1132 inlateout,
1133 inline,
1134 inline_const,
1135 inline_const_pat,
1136 inout,
1137 inputs,
1138 instruction_set,
1139 instrument_fn,
1140 integer_: "integer", integral,
1142 internal,
1143 internal_eq_trait_method_impls,
1144 internal_features,
1145 interrupt,
1146 into_async_iter_into_iter,
1147 into_future,
1148 into_iter,
1149 into_try_type,
1150 intra_doc_pointers,
1151 intrinsics,
1152 irrefutable_let_patterns,
1153 is,
1154 is_auto,
1155 is_splatted,
1156 is_val_statically_known,
1157 isa_attribute,
1158 isize,
1159 issue,
1160 issue_5723_bootstrap,
1161 issue_tracker_base_url,
1162 item,
1163 item_like_imports,
1164 iter,
1165 iter_mut,
1166 iterator,
1167 iterator_collect_fn,
1168 kcfi,
1169 kernel_address,
1170 kernel_hwaddress,
1171 keylocker_x86,
1172 keyword,
1173 kind,
1174 kreg,
1175 kreg0,
1176 label,
1177 label_break_value,
1178 lahfsahf_target_feature,
1179 lang,
1180 lang_items,
1181 large_assignments,
1182 largest_niche,
1183 last,
1184 lasx,
1185 late_bound_turbofishing,
1186 lateout,
1187 lazy_normalization_consts,
1188 lazy_type_alias,
1189 le,
1190 legacy_receiver,
1191 len,
1192 let_chains,
1193 let_else,
1194 lhs,
1195 lib,
1196 libc,
1197 lifetime,
1198 lifetime_capture_rules_2024,
1199 lifetimes,
1200 line,
1201 link,
1202 link_arg_attribute,
1203 link_args,
1204 link_cfg,
1205 link_dash_arg: "link-arg",
1206 link_llvm_intrinsics,
1207 link_name,
1208 link_ordinal,
1209 link_section,
1210 linkage,
1211 linker,
1212 linker_info,
1213 linker_messages,
1214 linkonce,
1215 linkonce_odr,
1216 lint_reasons,
1217 literal,
1218 little, big,
1219 load,
1220 loaded_from_disk,
1221 local,
1222 local_inner_macros,
1223 log2f16,
1224 log2f32,
1225 log2f64,
1226 log2f128,
1227 log10f16,
1228 log10f32,
1229 log10f64,
1230 log10f128,
1231 log_syntax,
1232 logf16,
1233 logf32,
1234 logf64,
1235 logf128,
1236 loongarch32,
1237 loongarch64,
1238 loongarch_target_feature,
1239 loop_break_value,
1240 loop_hints,
1241 loop_match,
1242 lr,
1243 lsx,
1244 lt,
1245 m68k,
1246 m68k_target_feature,
1247 mac16,
1248 macho: "mach-o",
1249 macro_at_most_once_rep,
1250 macro_attr,
1251 macro_attributes_in_derive_output,
1252 macro_derive,
1253 macro_escape,
1254 macro_export,
1255 macro_guard_matcher,
1256 macro_lifetime_matcher,
1257 macro_literal_matcher,
1258 macro_metavar_expr,
1259 macro_metavar_expr_concat,
1260 macro_reexport,
1261 macro_use,
1262 macro_vis_matcher,
1263 macroless_generic_const_args,
1264 macros_in_extern,
1265 main,
1266 managed_boxes,
1267 manually_drop,
1268 map,
1269 map_err,
1270 marker,
1271 marker_trait_attr,
1272 masked,
1273 match_beginning_vert,
1274 match_default_bindings,
1275 maximum_number_nsz_f16,
1276 maximum_number_nsz_f32,
1277 maximum_number_nsz_f64,
1278 maximum_number_nsz_f128,
1279 maximumf16,
1280 maximumf32,
1281 maximumf64,
1282 maximumf128,
1283 may_dangle,
1284 may_unwind,
1285 maybe_dangling,
1286 maybe_uninit,
1287 maybe_uninit_uninit,
1288 maybe_uninit_zeroed,
1289 mem,
1290 mem_align_const,
1291 mem_discriminant,
1292 mem_drop,
1293 mem_forget,
1294 mem_size_const,
1295 mem_swap,
1296 mem_uninitialized,
1297 mem_variant_count,
1298 mem_zeroed,
1299 member_constraints,
1300 memory,
1301 memtag,
1302 message,
1303 meta,
1304 meta_sized,
1305 metadata_type,
1306 mgca_type_const_syntax,
1307 min_adt_const_params,
1308 min_const_fn,
1309 min_const_generics,
1310 min_const_unsafe_fn,
1311 min_exhaustive_patterns,
1312 min_generic_const_args,
1313 min_specialization,
1314 min_type_alias_impl_trait,
1315 minimum_number_nsz_f16,
1316 minimum_number_nsz_f32,
1317 minimum_number_nsz_f64,
1318 minimum_number_nsz_f128,
1319 minimumf16,
1320 minimumf32,
1321 minimumf64,
1322 minimumf128,
1323 mips,
1324 mips32r6,
1325 mips64,
1326 mips64r6,
1327 mips_target_feature,
1328 mir_assume,
1329 mir_basic_block,
1330 mir_call,
1331 mir_cast_ptr_to_ptr,
1332 mir_cast_transmute,
1333 mir_cast_unsize,
1334 mir_checked,
1335 mir_debuginfo,
1336 mir_discriminant,
1337 mir_drop,
1338 mir_field,
1339 mir_goto,
1340 mir_make_place,
1341 mir_move,
1342 mir_offset,
1343 mir_ptr_metadata,
1344 mir_return,
1345 mir_return_to,
1346 mir_set_discriminant,
1347 mir_static,
1348 mir_static_mut,
1349 mir_storage_dead,
1350 mir_storage_live,
1351 mir_tail_call,
1352 mir_unreachable,
1353 mir_unwind_cleanup,
1354 mir_unwind_continue,
1355 mir_unwind_resume,
1356 mir_unwind_terminate,
1357 mir_unwind_terminate_reason,
1358 mir_unwind_unreachable,
1359 mir_variant,
1360 miri,
1361 misc,
1362 miscsr,
1363 mmx_reg,
1364 modifiers,
1365 module,
1366 module_path,
1367 more_maybe_bounds,
1368 more_qualified_paths,
1369 more_struct_aliases,
1370 movbe_target_feature,
1371 move_expr,
1372 move_ref_pattern,
1373 move_size_limit,
1374 movrs_target_feature,
1375 msp430,
1376 mul,
1377 mul_assign,
1378 mul_with_overflow,
1379 multiple_supertrait_upcastable,
1380 must_not_suspend,
1381 must_use,
1382 mut_preserve_binding_mode_2024,
1383 mut_ref,
1384 mut_restriction,
1385 mutable,
1386 naked,
1387 naked_asm,
1388 naked_functions,
1389 naked_functions_rustic_abi,
1390 naked_functions_target_feature,
1391 name,
1392 named_fn_trait_parameters,
1393 names,
1394 native_link_modifiers,
1395 native_link_modifiers_as_needed,
1396 native_link_modifiers_bundle,
1397 native_link_modifiers_verbatim,
1398 native_link_modifiers_whole_archive,
1399 natvis_file,
1400 ne,
1401 needs_allocator,
1402 needs_drop,
1403 needs_panic_runtime,
1404 neg,
1405 negate_unsigned,
1406 negative_bounds,
1407 negative_impls,
1408 neon,
1409 nested,
1410 never,
1411 never_patterns,
1412 never_type,
1413 never_type_fallback,
1414 new,
1415 new_binary,
1416 new_debug,
1417 new_debug_noop,
1418 new_display,
1419 new_lower_exp,
1420 new_lower_hex,
1421 new_octal,
1422 new_pointer,
1423 new_range,
1424 new_unchecked,
1425 new_upper_exp,
1426 new_upper_hex,
1427 next,
1428 niko,
1429 nll,
1430 no,
1431 no_builtins,
1432 no_core,
1433 no_coverage,
1434 no_crate_inject,
1435 no_debug,
1436 no_default_passes,
1437 no_implicit_prelude,
1438 no_inline,
1439 no_link,
1440 no_main,
1441 no_mangle,
1442 no_sanitize,
1443 no_stack_check,
1444 no_std,
1445 nomem,
1446 non_ascii_idents,
1447 non_exhaustive,
1448 non_exhaustive_omitted_patterns_lint,
1449 non_lifetime_binders,
1450 non_modrs_mods,
1451 nonblocking,
1452 none,
1453 nontemporal_store,
1454 noop_method_borrow,
1455 noop_method_clone,
1456 noop_method_deref,
1457 noprefix,
1458 noreturn,
1459 nostack,
1460 not,
1461 notable_trait,
1462 note,
1463 null,
1464 nvptx64,
1465 nvptx_target_feature,
1466 object_safe_for_dispatch,
1467 of,
1468 off,
1469 offload,
1470 offload_kernel,
1471 offset,
1472 offset_of,
1473 offset_of_enum,
1474 offset_of_nested,
1475 offset_of_slice,
1476 ok_or_else,
1477 old_name,
1478 omit_gdb_pretty_printer_section,
1479 on,
1480 on_const,
1481 on_move,
1482 on_type_error,
1483 on_unimplemented,
1484 on_unknown,
1485 on_unmatched_args,
1486 opaque,
1487 opaque_module_name_placeholder: "<opaque>",
1488 ops,
1489 opt_out_copy,
1490 optimize,
1491 optimize_attribute,
1492 optimized,
1493 optin_builtin_traits,
1494 option,
1495 option_env,
1496 options,
1497 or,
1498 or_patterns,
1499 ord_cmp_method,
1500 other,
1501 out,
1502 output,
1503 overflow_checks,
1504 overlapping_marker_traits,
1505 owned_box,
1506 packed,
1507 packed_bundled_libs,
1508 panic,
1509 panic_2015,
1510 panic_2021,
1511 panic_abort,
1512 panic_bounds_check,
1513 panic_cannot_unwind,
1514 panic_const_add_overflow,
1515 panic_const_async_fn_resumed,
1516 panic_const_async_fn_resumed_drop,
1517 panic_const_async_fn_resumed_panic,
1518 panic_const_async_gen_fn_resumed,
1519 panic_const_async_gen_fn_resumed_drop,
1520 panic_const_async_gen_fn_resumed_panic,
1521 panic_const_coroutine_resumed,
1522 panic_const_coroutine_resumed_drop,
1523 panic_const_coroutine_resumed_panic,
1524 panic_const_div_by_zero,
1525 panic_const_div_overflow,
1526 panic_const_gen_fn_none,
1527 panic_const_gen_fn_none_drop,
1528 panic_const_gen_fn_none_panic,
1529 panic_const_mul_overflow,
1530 panic_const_neg_overflow,
1531 panic_const_rem_by_zero,
1532 panic_const_rem_overflow,
1533 panic_const_shl_overflow,
1534 panic_const_shr_overflow,
1535 panic_const_sub_overflow,
1536 panic_display,
1537 panic_fmt,
1538 panic_handler,
1539 panic_impl,
1540 panic_implementation,
1541 panic_in_cleanup,
1542 panic_info,
1543 panic_invalid_enum_construction,
1544 panic_location,
1545 panic_misaligned_pointer_dereference,
1546 panic_nounwind,
1547 panic_null_pointer_dereference,
1548 panic_null_reference_constructed,
1549 panic_runtime,
1550 panic_str_2015,
1551 panic_unwind,
1552 panicking,
1553 param_attrs,
1554 parent_label,
1555 partial_cmp,
1556 partial_ord,
1557 passes,
1558 pat,
1559 pat_param,
1560 patchable_function_entry,
1561 path,
1562 pattern_complexity_limit,
1563 pattern_parentheses,
1564 pattern_type,
1565 pattern_type_range_trait,
1566 pattern_types,
1567 phantom_data,
1568 phase,
1569 pic,
1570 pie,
1571 pin,
1572 pin_drop,
1573 pin_ergonomics,
1574 pin_v2,
1575 platform_intrinsics,
1576 plugin,
1577 plugin_registrar,
1578 plugins,
1579 pointee,
1580 pointee_sized,
1581 pointee_trait,
1582 pointer,
1583 poll,
1584 post_cleanup: "post-cleanup",
1585 post_dash_lto: "post-lto",
1586 postfix_match,
1587 powerpc,
1588 powerpc64,
1589 powerpc_target_feature,
1590 powf16,
1591 powf32,
1592 powf64,
1593 powf128,
1594 powif16,
1595 powif32,
1596 powif64,
1597 powif128,
1598 pre_dash_lto: "pre-lto",
1599 precise_capturing,
1600 precise_capturing_in_traits,
1601 precise_pointer_size_matching,
1602 predicates,
1603 pref_align_of,
1604 prefetch_read_data,
1605 prefetch_read_instruction,
1606 prefetch_write_data,
1607 prefetch_write_instruction,
1608 prefix_nops,
1609 preg,
1610 prelude,
1611 prelude_import,
1612 preserves_flags,
1613 prevalidated,
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_variants,
2184 type_id_vtable,
2185 type_info,
2186 type_info_generic,
2187 type_ir,
2188 type_ir_infer_ctxt_like,
2189 type_ir_inherent,
2190 type_ir_interner,
2191 type_length_limit,
2192 type_macros,
2193 type_name,
2194 type_of,
2195 type_privacy_lints,
2196 typed_swap_nonoverlapping,
2197 u8,
2198 u8_legacy_const_max,
2199 u8_legacy_const_min,
2200 u8_legacy_fn_max_value,
2201 u8_legacy_fn_min_value,
2202 u8_legacy_mod,
2203 u16,
2204 u16_legacy_const_max,
2205 u16_legacy_const_min,
2206 u16_legacy_fn_max_value,
2207 u16_legacy_fn_min_value,
2208 u16_legacy_mod,
2209 u32,
2210 u32_legacy_const_max,
2211 u32_legacy_const_min,
2212 u32_legacy_fn_max_value,
2213 u32_legacy_fn_min_value,
2214 u32_legacy_mod,
2215 u64,
2216 u64_legacy_const_max,
2217 u64_legacy_const_min,
2218 u64_legacy_fn_max_value,
2219 u64_legacy_fn_min_value,
2220 u64_legacy_mod,
2221 u128,
2222 u128_legacy_const_max,
2223 u128_legacy_const_min,
2224 u128_legacy_fn_max_value,
2225 u128_legacy_fn_min_value,
2226 u128_legacy_mod,
2227 ub_checks,
2228 unaligned_volatile_load,
2229 unaligned_volatile_store,
2230 unboxed_closures,
2231 unchecked_add,
2232 unchecked_div,
2233 unchecked_funnel_shl,
2234 unchecked_funnel_shr,
2235 unchecked_mul,
2236 unchecked_rem,
2237 unchecked_shl,
2238 unchecked_shr,
2239 unchecked_sub,
2240 undecorated,
2241 underscore_const_names,
2242 underscore_imports,
2243 underscore_lifetimes,
2244 uniform_paths,
2245 unimplemented,
2246 unit,
2247 universal_impl_trait,
2248 unix,
2249 unlikely,
2250 unmarked_api,
2251 unnamed_enum_variants,
2252 unnamed_fields,
2253 unpin,
2254 unqualified_local_imports,
2255 unreachable,
2256 unreachable_2015,
2257 unreachable_2015_macro,
2258 unreachable_2021,
2259 unreachable_code,
2260 unreachable_display,
2261 unreachable_macro,
2262 unrestricted_attribute_tokens,
2263 unsafe_attributes,
2264 unsafe_binders,
2265 unsafe_block_in_unsafe_fn,
2266 unsafe_cell,
2267 unsafe_cell_raw_get,
2268 unsafe_eii,
2269 unsafe_extern_blocks,
2270 unsafe_fields,
2271 unsafe_no_drop_flag,
2272 unsafe_pinned,
2273 unsafe_unpin,
2274 unsafety,
2275 unsize,
2276 unsized_const_param_ty,
2277 unsized_const_params,
2278 unsized_fn_params,
2279 unsized_locals,
2280 unsized_tuple_coercion,
2281 unstable,
2282 unstable_feature_bound,
2283 unstable_location_reason_default: "this crate is being loaded from the sysroot, an \
2284 unstable location; did you mean to load this crate \
2285 from crates.io via `Cargo.toml` instead?",
2286 unstable_removed,
2287 untagged_unions,
2288 unused_imports,
2289 unwind,
2290 unwind_attributes,
2291 unwind_safe_trait,
2292 unwrap,
2293 unwrap_binder,
2294 unwrap_or,
2295 update,
2296 use_cloned,
2297 use_extern_macros,
2298 use_nested_groups,
2299 used,
2300 used_with_arg,
2301 using,
2302 usize,
2303 usize_legacy_const_max,
2304 usize_legacy_const_min,
2305 usize_legacy_fn_max_value,
2306 usize_legacy_fn_min_value,
2307 usize_legacy_mod,
2308 v1,
2309 v8plus,
2310 va_arg,
2311 va_arg_safe,
2312 va_copy,
2313 va_end,
2314 va_list,
2315 val,
2316 validity,
2317 value,
2318 values,
2319 var,
2320 variadic,
2321 variant_count,
2322 variants,
2323 vec,
2324 vector,
2325 verbatim,
2326 version,
2327 vfp2,
2328 vgpr16,
2329 vgpr32,
2330 vgpr64,
2331 vgpr96,
2332 vgpr128,
2333 vgpr160,
2334 vgpr192,
2335 vgpr224,
2336 vgpr256,
2337 vgpr288,
2338 vgpr320,
2339 vgpr352,
2340 vgpr384,
2341 vgpr512,
2342 vgpr1024,
2343 view_type,
2344 view_types,
2345 vis,
2346 visible_private_types,
2347 volatile,
2348 volatile_copy_memory,
2349 volatile_copy_nonoverlapping_memory,
2350 volatile_load,
2351 volatile_set_memory,
2352 volatile_store,
2353 vreg,
2354 vreg_low16,
2355 vreg_pair,
2356 vsreg,
2357 vsx,
2358 vtable_align,
2359 vtable_size,
2360 warn,
2361 wasip2,
2362 wasm,
2363 wasm32,
2364 wasm64,
2365 wasm_abi,
2366 wasm_import_module,
2367 wasm_target_feature,
2368 weak,
2369 weak_odr,
2370 where_clause_attrs,
2371 while_let,
2372 whole_dash_archive: "whole-archive",
2373 width,
2374 windowed,
2375 windows,
2376 windows_subsystem,
2377 with_negative_coherence,
2378 wrap_binder,
2379 wrapping_add,
2380 wrapping_div,
2381 wrapping_mul,
2382 wrapping_rem,
2383 wrapping_rem_euclid,
2384 wrapping_sub,
2385 wreg,
2386 write_box_via_move,
2387 write_bytes,
2388 write_fmt,
2389 write_macro,
2390 write_str,
2391 write_via_move,
2392 writeln_macro,
2393 x86,
2394 x86_64,
2395 x86_amx_intrinsics,
2396 x87_reg,
2397 x87_target_feature,
2398 xcoff,
2399 xer,
2400 xloop,
2401 xmm_reg,
2402 xop_target_feature,
2403 xreg,
2404 xtensa,
2405 xtensa_target_feature,
2406 yeet_desugar_details,
2407 yeet_expr,
2408 yes,
2409 yield_expr,
2410 ymm_reg,
2411 yreg,
2412 zca,
2413 zfh,
2414 zfhmin,
2415 zmm_reg,
2416 ztso,
2417 }
2419}
2420
2421pub const STDLIB_STABLE_CRATES: &[Symbol] = &[sym::std, sym::core, sym::alloc, sym::proc_macro];
2424
2425#[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)]
2426pub struct Ident {
2427 pub name: Symbol,
2432 pub span: Span,
2433}
2434
2435impl Ident {
2436 #[inline]
2437 pub fn new(name: Symbol, span: Span) -> Ident {
2439 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);
2440 Ident { name, span }
2441 }
2442
2443 #[inline]
2445 pub fn with_dummy_span(name: Symbol) -> Ident {
2446 Ident::new(name, DUMMY_SP)
2447 }
2448
2449 #[inline]
2454 pub fn dummy() -> Ident {
2455 Ident::with_dummy_span(sym::dummy)
2456 }
2457
2458 pub fn from_str(string: &str) -> Ident {
2460 Ident::with_dummy_span(Symbol::intern(string))
2461 }
2462
2463 pub fn from_str_and_span(string: &str, span: Span) -> Ident {
2465 Ident::new(Symbol::intern(string), span)
2466 }
2467
2468 pub fn with_span_pos(self, span: Span) -> Ident {
2470 Ident::new(self.name, span.with_ctxt(self.span.ctxt()))
2471 }
2472
2473 pub fn without_first_quote(self) -> Ident {
2476 self.as_str()
2477 .strip_prefix('\'')
2478 .map_or(self, |name| Ident::new(Symbol::intern(name), self.span))
2479 }
2480
2481 pub fn normalize_to_macros_2_0(self) -> Ident {
2487 Ident::new(self.name, self.span.normalize_to_macros_2_0())
2488 }
2489
2490 #[inline]
2496 pub fn normalize_to_macro_rules(self) -> Ident {
2497 Ident::new(self.name, self.span.normalize_to_macro_rules())
2498 }
2499
2500 pub fn as_str(&self) -> &str {
2506 self.name.as_str()
2507 }
2508}
2509
2510impl PartialEq for Ident {
2511 #[inline]
2512 fn eq(&self, rhs: &Self) -> bool {
2513 self.name == rhs.name && self.span.eq_ctxt(rhs.span)
2514 }
2515}
2516
2517impl Hash for Ident {
2518 fn hash<H: Hasher>(&self, state: &mut H) {
2519 self.name.hash(state);
2520 self.span.ctxt().hash(state);
2521 }
2522}
2523
2524impl fmt::Debug for Ident {
2525 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2526 fmt::Display::fmt(self, f)?;
2527 fmt::Debug::fmt(&self.span.ctxt(), f)
2528 }
2529}
2530
2531impl fmt::Display for Ident {
2535 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2536 fmt::Display::fmt(&IdentPrinter::new(self.name, self.guess_print_mode(), None), f)
2537 }
2538}
2539
2540pub enum IdentPrintMode {
2541 Normal,
2542 RawIdent,
2543 RawLifetime,
2544}
2545
2546pub struct IdentPrinter {
2560 symbol: Symbol,
2561 mode: IdentPrintMode,
2562 convert_dollar_crate: Option<Span>,
2565}
2566
2567impl IdentPrinter {
2568 pub fn new(
2570 symbol: Symbol,
2571 mode: IdentPrintMode,
2572 convert_dollar_crate: Option<Span>,
2573 ) -> IdentPrinter {
2574 IdentPrinter { symbol, mode, convert_dollar_crate }
2575 }
2576
2577 pub fn for_ast_ident(ident: Ident, mode: IdentPrintMode) -> IdentPrinter {
2581 IdentPrinter::new(ident.name, mode, Some(ident.span))
2582 }
2583}
2584
2585impl fmt::Display for IdentPrinter {
2586 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2587 let s = match self.mode {
2588 IdentPrintMode::Normal
2589 if self.symbol == kw::DollarCrate
2590 && let Some(span) = self.convert_dollar_crate =>
2591 {
2592 let converted = span.ctxt().dollar_crate_name();
2593 if !converted.is_path_segment_keyword() {
2594 f.write_str("::")?;
2595 }
2596 converted
2597 }
2598 IdentPrintMode::Normal => self.symbol,
2599 IdentPrintMode::RawIdent => {
2600 f.write_str("r#")?;
2601 self.symbol
2602 }
2603 IdentPrintMode::RawLifetime => {
2604 f.write_str("'r#")?;
2605 let s = self
2606 .symbol
2607 .as_str()
2608 .strip_prefix("'")
2609 .expect("only lifetime idents should be passed with RawLifetime mode");
2610 Symbol::intern(s)
2611 }
2612 };
2613 s.fmt(f)
2614 }
2615}
2616
2617#[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)]
2623pub struct MacroRulesNormalizedIdent(Ident);
2624
2625impl MacroRulesNormalizedIdent {
2626 #[inline]
2627 pub fn new(ident: Ident) -> Self {
2628 MacroRulesNormalizedIdent(ident.normalize_to_macro_rules())
2629 }
2630
2631 pub fn symbol(&self) -> Symbol {
2632 self.0.name
2633 }
2634
2635 pub fn ident(&self) -> Ident {
2636 self.0
2637 }
2638}
2639
2640impl fmt::Debug for MacroRulesNormalizedIdent {
2641 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2642 fmt::Debug::fmt(&self.0, f)
2643 }
2644}
2645
2646impl fmt::Display for MacroRulesNormalizedIdent {
2647 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2648 fmt::Display::fmt(&self.0, f)
2649 }
2650}
2651
2652#[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)]
2662pub struct Symbol(SymbolIndex);
2663
2664impl ::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! {
2666 #[orderable]
2667 struct SymbolIndex {}
2668}
2669
2670impl Symbol {
2671 pub const fn new(n: u32) -> Self {
2674 Symbol(SymbolIndex::from_u32(n))
2675 }
2676
2677 #[rustc_diagnostic_item = "SymbolIntern"]
2679 #[inline]
2680 pub fn intern(str: &str) -> Self {
2681 with_session_globals(|session_globals| session_globals.symbol_interner.intern_str(str))
2682 }
2683
2684 #[inline]
2693 pub fn as_str(&self) -> &str {
2694 with_session_globals(|session_globals| unsafe {
2695 std::mem::transmute::<&str, &str>(session_globals.symbol_interner.get_str(*self))
2696 })
2697 }
2698
2699 pub fn as_u32(self) -> u32 {
2700 self.0.as_u32()
2701 }
2702
2703 pub fn is_empty(self) -> bool {
2704 self == sym::empty
2705 }
2706
2707 pub fn to_ident_string(self) -> String {
2712 if self == sym::empty { String::new() } else { Ident::with_dummy_span(self).to_string() }
2714 }
2715
2716 pub fn find_similar(
2723 self,
2724 candidates: &[Symbol],
2725 ) -> Option<(Symbol, bool)> {
2726 let lowercase = self.as_str().to_lowercase();
2727 let lowercase_sym = Symbol::intern(&lowercase);
2728 if candidates.contains(&lowercase_sym) {
2729 Some((lowercase_sym, true))
2730 } else if let Some(similar_sym) = find_best_match_for_name(candidates, self, None) {
2731 Some((similar_sym, false))
2732 } else {
2733 None
2734 }
2735 }
2736}
2737
2738impl fmt::Debug for Symbol {
2739 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2740 fmt::Debug::fmt(self.as_str(), f)
2741 }
2742}
2743
2744impl fmt::Display for Symbol {
2745 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2746 fmt::Display::fmt(self.as_str(), f)
2747 }
2748}
2749
2750impl StableHash for Symbol {
2751 #[inline]
2752 fn stable_hash<Hcx: StableHashCtxt>(&self, hcx: &mut Hcx, hasher: &mut StableHasher) {
2753 self.as_str().stable_hash(hcx, hasher);
2754 }
2755}
2756
2757impl StableCompare for Symbol {
2758 const CAN_USE_UNSTABLE_SORT: bool = true;
2759
2760 fn stable_cmp(&self, other: &Self) -> std::cmp::Ordering {
2761 self.as_str().cmp(other.as_str())
2762 }
2763}
2764
2765#[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)]
2768pub struct ByteSymbol(SymbolIndex);
2769
2770impl ByteSymbol {
2771 pub const fn new(n: u32) -> Self {
2774 ByteSymbol(SymbolIndex::from_u32(n))
2775 }
2776
2777 pub fn intern(byte_str: &[u8]) -> Self {
2779 with_session_globals(|session_globals| {
2780 session_globals.symbol_interner.intern_byte_str(byte_str)
2781 })
2782 }
2783
2784 pub fn as_byte_str(&self) -> &[u8] {
2786 with_session_globals(|session_globals| unsafe {
2787 std::mem::transmute::<&[u8], &[u8]>(session_globals.symbol_interner.get_byte_str(*self))
2788 })
2789 }
2790
2791 pub fn as_u32(self) -> u32 {
2792 self.0.as_u32()
2793 }
2794}
2795
2796impl fmt::Debug for ByteSymbol {
2797 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
2798 fmt::Debug::fmt(self.as_byte_str(), f)
2799 }
2800}
2801
2802impl StableHash for ByteSymbol {
2803 #[inline]
2804 fn stable_hash<Hcx: StableHashCtxt>(&self, hcx: &mut Hcx, hasher: &mut StableHasher) {
2805 self.as_byte_str().stable_hash(hcx, hasher);
2806 }
2807}
2808
2809pub(crate) struct Interner(Lock<InternerInner>);
2814
2815struct InternerInner {
2821 arena: DroplessArena,
2822 indices: HashTable<(&'static [u8], u32)>,
2823 byte_strs: Vec<&'static [u8]>,
2824}
2825
2826impl Interner {
2827 fn prefill(init: &[&'static str], extra: &[&'static str]) -> Self {
2831 let values = init.iter().copied().chain(extra.iter().copied()).map(|str| str.as_bytes());
2832 let (size_hint, _) = values.size_hint();
2833 let mut conflicting_values: Vec<&[u8]> = Vec::new();
2834
2835 let mut indices: HashTable<(&'static [u8], u32)> = HashTable::with_capacity(size_hint);
2836 let hasher = FxBuildHasher::default();
2837
2838 let mut byte_strs: Vec<&'static [u8]> = Vec::with_capacity(size_hint);
2839
2840 for v in values {
2841 match indices.entry(hasher.hash_one(&v), |&(s, _)| s == v, |&(s, _)| hasher.hash_one(s))
2842 {
2843 Entry::Occupied(v) => conflicting_values.push(v.get().0),
2844 Entry::Vacant(view) => {
2845 view.insert((v, byte_strs.len() as u32));
2846 byte_strs.push(v);
2847 }
2848 }
2849 }
2850
2851 if conflicting_values.len() != 0 {
2852 {
::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!(
2853 "duplicate symbols in the rustc symbol list and the extra symbols added by the driver: {:?}",
2854 conflicting_values
2855 )
2856 }
2857
2858 Interner(Lock::new(InternerInner { arena: Default::default(), indices, byte_strs }))
2859 }
2860
2861 fn intern_str(&self, str: &str) -> Symbol {
2862 Symbol::new(self.intern_inner(str.as_bytes()))
2863 }
2864
2865 fn intern_byte_str(&self, byte_str: &[u8]) -> ByteSymbol {
2866 ByteSymbol::new(self.intern_inner(byte_str))
2867 }
2868
2869 #[inline]
2870 fn intern_inner(&self, byte_str: &[u8]) -> u32 {
2871 let hasher = FxBuildHasher::default();
2872 let hash_of_byte_str = hasher.hash_one(byte_str);
2873
2874 self.0.with_lock(|inner| {
2875 match inner.indices.entry(
2876 hash_of_byte_str,
2877 |&(s, _)| s == byte_str,
2878 |&(s, _)| hasher.hash_one(s),
2879 ) {
2880 Entry::Occupied(v) => v.get().1,
2881 Entry::Vacant(view) => {
2882 let byte_str: &[u8] = inner.arena.alloc_slice(byte_str);
2883
2884 let byte_str: &'static [u8] = unsafe { &*(byte_str as *const [u8]) };
2887 let idx = inner.byte_strs.len() as u32;
2888 view.insert((byte_str, idx));
2889 inner.byte_strs.push(byte_str);
2890 idx
2891 }
2892 }
2893 })
2894 }
2895
2896 fn get_str(&self, symbol: Symbol) -> &str {
2900 let byte_str = self.get_inner(symbol.0.as_usize());
2901 unsafe { str::from_utf8_unchecked(byte_str) }
2903 }
2904
2905 fn get_byte_str(&self, symbol: ByteSymbol) -> &[u8] {
2909 self.get_inner(symbol.0.as_usize())
2910 }
2911
2912 fn get_inner(&self, index: usize) -> &[u8] {
2913 self.0.with_lock(|inner| inner.byte_strs[index])
2914 }
2915}
2916
2917pub mod kw {
2923 pub use super::kw_generated::*;
2924}
2925
2926pub mod sym {
2932 use super::Symbol;
2934 pub use super::kw::MacroRules as macro_rules;
2935 #[doc(inline)]
2936 pub use super::sym_generated::*;
2937
2938 pub const C: Symbol = ascii_letter_digit('C').unwrap();
2940
2941 #[expect(non_upper_case_globals)]
2943 pub const f: Symbol = ascii_letter_digit('f').unwrap();
2944 #[expect(non_upper_case_globals)]
2945 pub const d: Symbol = ascii_letter_digit('d').unwrap();
2946
2947 pub fn integer<N: TryInto<usize> + Copy + itoa::Integer>(n: N) -> Symbol {
2952 if let Result::Ok(idx) = n.try_into() {
2953 if idx < 10 {
2954 return Symbol::new(super::SYMBOL_DIGITS_BASE + idx as u32);
2955 }
2956 }
2957 let mut buffer = itoa::Buffer::new();
2958 let printed = buffer.format(n);
2959 Symbol::intern(printed)
2960 }
2961
2962 pub const fn ascii_letter_digit(c: char) -> Option<Symbol> {
2963 let i = c as u32;
2964 Option::Some(Symbol::new(match c {
2965 '0'..='9' => super::SYMBOL_DIGITS_BASE + (i - '0' as u32),
2966 'A'..='Z' => super::SYMBOL_UPPERCASE_LETTERS_BASE + (i - 'A' as u32),
2967 'a'..='z' => super::SYMBOL_LOWERCASE_LETTERS_BASE + (i - 'a' as u32),
2968 _ => return Option::None,
2969 }))
2970 }
2971
2972 pub fn character(c: char) -> Symbol {
2973 ascii_letter_digit(c).unwrap_or_else(|| {
2974 let mut buf: [u8; char::MAX_LEN_UTF8] = Default::default();
2975 Symbol::intern(c.encode_utf8(&mut buf))
2976 })
2977 }
2978}
2979
2980impl Symbol {
2981 fn is_special(self) -> bool {
2982 self <= kw::Underscore
2983 }
2984
2985 fn is_used_keyword_always(self) -> bool {
2986 self >= kw::As && self <= kw::While
2987 }
2988
2989 fn is_unused_keyword_always(self) -> bool {
2990 self >= kw::Abstract && self <= kw::Yield
2991 }
2992
2993 fn is_used_keyword_conditional(self, edition: impl FnOnce() -> Edition) -> bool {
2994 (self >= kw::Async && self <= kw::Dyn) && edition() >= Edition::Edition2018
2995 }
2996
2997 fn is_unused_keyword_conditional(self, edition: impl Copy + FnOnce() -> Edition) -> bool {
2998 self == kw::Gen && edition().at_least_rust_2024()
2999 || self == kw::Try && edition().at_least_rust_2018()
3000 }
3001
3002 pub fn is_reserved(self, edition: impl Copy + FnOnce() -> Edition) -> bool {
3003 self.is_special()
3004 || self.is_used_keyword_always()
3005 || self.is_unused_keyword_always()
3006 || self.is_used_keyword_conditional(edition)
3007 || self.is_unused_keyword_conditional(edition)
3008 }
3009
3010 pub fn is_weak(self) -> bool {
3011 self >= kw::Auto && self <= kw::Yeet
3012 }
3013
3014 pub fn is_path_segment_keyword(self) -> bool {
3016 self == kw::Super
3017 || self == kw::SelfLower
3018 || self == kw::SelfUpper
3019 || self == kw::Crate
3020 || self == kw::PathRoot
3021 || self == kw::DollarCrate
3022 }
3023
3024 pub fn is_bool_lit(self) -> bool {
3026 self == kw::True || self == kw::False
3027 }
3028
3029 pub fn can_be_raw(self) -> bool {
3031 self != sym::empty && self != kw::Underscore && !self.is_path_segment_keyword()
3032 }
3033
3034 pub fn is_predefined(index: u32) -> bool {
3038 index < PREDEFINED_SYMBOLS_COUNT
3039 }
3040}
3041
3042impl Ident {
3043 pub fn is_special(self) -> bool {
3046 self.name.is_special()
3047 }
3048
3049 pub fn is_used_keyword(self) -> bool {
3051 self.name.is_used_keyword_always()
3053 || self.name.is_used_keyword_conditional(|| self.span.edition())
3054 }
3055
3056 pub fn is_unused_keyword(self) -> bool {
3058 self.name.is_unused_keyword_always()
3060 || self.name.is_unused_keyword_conditional(|| self.span.edition())
3061 }
3062
3063 pub fn is_reserved(self) -> bool {
3065 self.name.is_reserved(|| self.span.edition())
3067 }
3068
3069 pub fn is_path_segment_keyword(self) -> bool {
3071 self.name.is_path_segment_keyword()
3072 }
3073
3074 pub fn is_raw_guess(self) -> bool {
3077 self.name.can_be_raw() && self.is_reserved()
3078 }
3079
3080 pub fn is_reserved_lifetime(self) -> bool {
3083 self.is_reserved() && ![kw::Underscore, kw::Static].contains(&self.name)
3084 }
3085
3086 pub fn is_raw_lifetime_guess(self) -> bool {
3087 if self.name.as_str() == "'" {
3090 return false;
3091 }
3092 let ident_without_apostrophe = self.without_first_quote();
3093 ident_without_apostrophe.name != self.name
3094 && ident_without_apostrophe.name.can_be_raw()
3095 && ident_without_apostrophe.is_reserved_lifetime()
3096 }
3097
3098 pub fn guess_print_mode(self) -> IdentPrintMode {
3099 if self.is_raw_lifetime_guess() {
3100 IdentPrintMode::RawLifetime
3101 } else if self.is_raw_guess() {
3102 IdentPrintMode::RawIdent
3103 } else {
3104 IdentPrintMode::Normal
3105 }
3106 }
3107
3108 pub fn is_numeric(self) -> bool {
3111 self.as_str().bytes().all(|b| b.is_ascii_digit())
3112 }
3113}
3114
3115pub fn used_keywords(edition: impl Copy + FnOnce() -> Edition) -> Vec<Symbol> {
3120 (kw::DollarCrate.as_u32()..kw::Yeet.as_u32())
3121 .filter_map(|kw| {
3122 let kw = Symbol::new(kw);
3123 if kw.is_used_keyword_always() || kw.is_used_keyword_conditional(edition) {
3124 Some(kw)
3125 } else {
3126 None
3127 }
3128 })
3129 .collect()
3130}