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