expand: Micro-optimize prelude injection

Use `splice` to avoid shifting the other items twice.
Put `extern crate std;` first so it's already resolved when we resolve `::std::prelude::rust_20XX`.
This commit is contained in:
Vadim Petrochenkov 2025-07-28 17:24:28 +03:00
parent 65b6cdb6a6
commit c56f49dc34
53 changed files with 105 additions and 107 deletions

View file

@ -47,8 +47,6 @@ pub fn inject(
ast::ItemKind::ExternCrate(None, Ident::new(name, ident_span)),
);
krate.items.insert(0, item);
let root = (edition == Edition2015).then_some(kw::PathRoot);
let import_path = root
@ -75,6 +73,6 @@ pub fn inject(
}),
);
krate.items.insert(0, use_item);
krate.items.splice(0..0, [item, use_item]);
krate.items.len() - orig_num_items
}

View file

@ -1,9 +1,9 @@
#![feature(prelude_import)]
#![no_std]
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[macro_use]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
//@ pretty-mode:expanded
//@ pp-exact:asm.pp
//@ only-x86_64

View file

@ -1,9 +1,9 @@
#![feature(prelude_import)]
#![no_std]
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[macro_use]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
//@ pretty-compare-only
//@ pretty-mode:expanded
//@ pp-exact:cast-lt.pp

View file

@ -1,9 +1,9 @@
#![feature(prelude_import)]
#![no_std]
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[macro_use]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
//@ pretty-compare-only
//@ pretty-mode:expanded
//@ pp-exact:dollar-crate.pp

View file

@ -1,9 +1,9 @@
#![feature(prelude_import)]
#![no_std]
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[macro_use]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
// Test for issue 80832
//
//@ pretty-mode:expanded

View file

@ -1,9 +1,9 @@
#![feature(prelude_import)]
#![no_std]
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[macro_use]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
//@ pretty-compare-only
//@ pretty-mode:expanded
//@ pp-exact:format-args-str-escape.pp

View file

@ -4,10 +4,10 @@
#![allow(incomplete_features)]
#![feature(fn_delegation)]
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[attr = MacroUse {arguments: UseAll}]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
fn b<C>(e: C) { }

View file

@ -1,7 +1,7 @@
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[attr = MacroUse {arguments: UseAll}]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
//@ pretty-compare-only
//@ pretty-mode:hir
//@ pp-exact:hir-fn-params.pp

View file

@ -3,10 +3,10 @@
//@ pp-exact:hir-fn-variadic.pp
#![feature(c_variadic)]
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[attr = MacroUse {arguments: UseAll}]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
extern "C" {
unsafe fn foo(x: i32, va1: ...);

View file

@ -1,7 +1,7 @@
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[attr = MacroUse {arguments: UseAll}]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
//@ pretty-compare-only
//@ pretty-mode:hir
//@ pp-exact:hir-if-else.pp

View file

@ -5,10 +5,10 @@
// This tests the pretty-printing of lifetimes in lots of ways.
#![allow(unused)]
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[attr = MacroUse {arguments: UseAll}]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
struct Foo<'a> {
x: &'a u32,

View file

@ -1,7 +1,7 @@
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[attr = MacroUse {arguments: UseAll}]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
//@ pretty-compare-only
//@ pretty-mode:hir
//@ pp-exact:hir-pretty-attr.pp

View file

@ -1,7 +1,7 @@
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[attr = MacroUse {arguments: UseAll}]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
//@ pretty-compare-only
//@ pretty-mode:hir
//@ pp-exact:hir-pretty-loop.pp

View file

@ -1,7 +1,7 @@
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[attr = MacroUse {arguments: UseAll}]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
//@ pretty-compare-only
//@ pretty-mode:hir
//@ pp-exact:hir-struct-expr.pp

View file

@ -1,9 +1,9 @@
#![feature(prelude_import)]
#![no_std]
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[macro_use]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
//@ pretty-compare-only
//@ pretty-mode:expanded
//@ pp-exact:if-else.pp

View file

@ -1,9 +1,9 @@
#![feature(prelude_import)]
#![no_std]
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[macro_use]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
//@ pretty-compare-only
//@ pretty-mode:expanded
//@ pp-exact:issue-12590-c.pp

View file

@ -1,7 +1,7 @@
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[attr = MacroUse {arguments: UseAll}]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
//@ pretty-compare-only
//@ pretty-mode:hir,typed
//@ pp-exact:issue-4264.pp

View file

@ -1,7 +1,7 @@
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[attr = MacroUse {arguments: UseAll}]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
// Test to print lifetimes on HIR pretty-printing.
//@ pretty-compare-only

View file

@ -7,10 +7,10 @@
#![allow(incomplete_features)]
#![feature(never_patterns)]
#![feature(never_type)]
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[macro_use]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
fn f(x: Result<u32, !>) { _ = match x { Ok(x) => x, Err(!) , }; }

View file

@ -4,10 +4,10 @@
#![feature(pin_ergonomics)]
#![allow(dead_code, incomplete_features)]
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[attr = MacroUse {arguments: UseAll}]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
use std::pin::Pin;

View file

@ -1,10 +1,10 @@
#![feature(prelude_import)]
#![no_std]
#![feature(postfix_match)]
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[macro_use]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
use std::ops::Add;

View file

@ -1,10 +1,10 @@
#!/usr/bin/env rust
#![feature(prelude_import)]
#![no_std]
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[macro_use]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
//@ pretty-mode:expanded
//@ pp-exact:shebang-at-top.pp
//@ pretty-compare-only

View file

@ -1,9 +1,9 @@
#![feature(prelude_import)]
#![no_std]
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[macro_use]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
//@ compile-flags: --crate-type=lib --test --remap-path-prefix={{src-base}}/=/the/src/ --remap-path-prefix={{src-base}}\=/the/src/
//@ pretty-compare-only
//@ pretty-mode:expanded

View file

@ -1,9 +1,9 @@
#![feature(prelude_import)]
#![no_std]
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[macro_use]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
//@ needs-asm-support
//@ check-pass
//@ compile-flags: -Zunpretty=expanded

View file

@ -1,8 +1,8 @@
#![feature(prelude_import)]
#[prelude_import]
use std::prelude::rust_2021::*;
#[macro_use]
extern crate std;
#[prelude_import]
use std::prelude::rust_2021::*;
//@ edition: 2021
//@ compile-flags: -Zunpretty=expanded
//@ check-pass

View file

@ -1,9 +1,9 @@
#![feature(prelude_import)]
#![no_std]
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[macro_use]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
//@ revisions: normal expanded
//@[expanded] check-pass
//@[expanded]compile-flags: -Zunpretty=expanded

View file

@ -6,10 +6,10 @@
//@ edition: 2015
#![crate_type = "lib"]
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[macro_use]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
trait Foo<const KIND : bool = true> {}

View file

@ -6,10 +6,10 @@
//@ edition:2015
#![feature(derive_coerce_pointee)]
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[macro_use]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[macro_use]
extern crate another_proc_macro;

View file

@ -17,10 +17,10 @@
#![crate_type = "lib"]
#![allow(dead_code)]
#![allow(deprecated)]
#[prelude_import]
use std::prelude::rust_2021::*;
#[macro_use]
extern crate std;
#[prelude_import]
use std::prelude::rust_2021::*;
// Empty struct.
struct Empty;

View file

@ -4,10 +4,10 @@
//@ compile-flags: -Zunpretty=expanded
//@ edition: 2015
#![feature(derive_coerce_pointee)]
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[macro_use]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
use std::marker::CoercePointee;
pub trait MyTrait<T: ?Sized> {}

View file

@ -12,10 +12,10 @@
//@ edition: 2015
#![feature(derive_coerce_pointee)]
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[macro_use]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[macro_use]
extern crate another_proc_macro;

View file

@ -1,9 +1,9 @@
#![feature(prelude_import)]
#![no_std]
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[macro_use]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
// This ensures that ICEs like rust#94953 don't happen
//@ check-pass
//@ compile-flags: -Z unpretty=expanded

View file

@ -1,7 +1,7 @@
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[attr = MacroUse {arguments: UseAll}]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
//@ compile-flags: -Zunpretty=hir
//@ edition: 2015

View file

@ -5,10 +5,10 @@
//@ edition: 2015
#![feature(core_intrinsics, generic_assert)]
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[macro_use]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
fn arbitrary_consuming_method_for_demonstration_purposes() {
let elem = 1i32;

View file

@ -1,7 +1,7 @@
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[attr = MacroUse {arguments: UseAll}]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
// https://github.com/rust-lang/rust/issues/82329
//@ compile-flags: -Zunpretty=hir,typed
//@ check-pass

View file

@ -16,10 +16,10 @@ Respanned: TokenStream [Ident { ident: "$crate", span: $DIR/auxiliary/make-macro
// in the stdout
#![no_std /* 0#0 */]
#[prelude_import /* 0#1 */]
use core /* 0#1 */::prelude /* 0#1 */::rust_2018 /* 0#1 */::*;
#[macro_use /* 0#1 */]
extern crate core /* 0#1 */;
#[prelude_import /* 0#1 */]
use core /* 0#1 */::prelude /* 0#1 */::rust_2018 /* 0#1 */::*;
// Don't load unnecessary hygiene information from std
extern crate std /* 0#0 */;

View file

@ -36,10 +36,10 @@ PRINT-BANG INPUT (DEBUG): TokenStream [
#![feature /* 0#0 */(decl_macro)]
#![no_std /* 0#0 */]
#[prelude_import /* 0#1 */]
use ::core /* 0#1 */::prelude /* 0#1 */::rust_2015 /* 0#1 */::*;
#[macro_use /* 0#1 */]
extern crate core /* 0#2 */;
#[prelude_import /* 0#1 */]
use ::core /* 0#1 */::prelude /* 0#1 */::rust_2015 /* 0#1 */::*;
// Don't load unnecessary hygiene information from std
extern crate std /* 0#0 */;

View file

@ -12,10 +12,10 @@
#![feature(proc_macro_quote)]
#![crate_type = "proc-macro"]
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[macro_use]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
extern crate proc_macro;

View file

@ -1,9 +1,9 @@
#![feature(prelude_import)]
#![no_std]
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[macro_use]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
//@ check-pass
//@ compile-flags: -Z unpretty=expanded
//@ edition: 2015

View file

@ -3,10 +3,10 @@
//@ edition: 2015
#![feature(type_alias_impl_trait)]
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[attr = MacroUse {arguments: UseAll}]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
trait Animal { }

View file

@ -1,7 +1,7 @@
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[attr = MacroUse {arguments: UseAll}]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
//@ compile-flags: -Zunpretty=hir
//@ check-fail
//@ edition: 2015

View file

@ -1,7 +1,7 @@
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[attr = MacroUse {arguments: UseAll}]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
//@ compile-flags: -Zunpretty=hir
//@ check-pass
//@ edition: 2015

View file

@ -1,7 +1,7 @@
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[attr = MacroUse {arguments: UseAll}]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
//@ compile-flags: -Zunpretty=hir
//@ check-pass
//@ edition: 2015

View file

@ -1,7 +1,7 @@
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[attr = MacroUse {arguments: UseAll}]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
//@ compile-flags: -Zunpretty=hir
//@ check-pass
//@ edition: 2015

View file

@ -1,8 +1,8 @@
#![feature(prelude_import)]
#[prelude_import]
use std::prelude::rust_2024::*;
#[macro_use]
extern crate std;
#[prelude_import]
use std::prelude::rust_2024::*;
//@ revisions: expanded hir
//@[expanded]compile-flags: -Zunpretty=expanded
//@[expanded]check-pass

View file

@ -1,7 +1,7 @@
#[prelude_import]
use std::prelude::rust_2024::*;
#[attr = MacroUse {arguments: UseAll}]
extern crate std;
#[prelude_import]
use std::prelude::rust_2024::*;
//@ revisions: expanded hir
//@[expanded]compile-flags: -Zunpretty=expanded
//@[expanded]check-pass

View file

@ -29,10 +29,10 @@
#![feature(try_blocks)]
#![feature(yeet_expr)]
#![allow(incomplete_features)]
#[prelude_import]
use std::prelude::rust_2024::*;
#[macro_use]
extern crate std;
#[prelude_import]
use std::prelude::rust_2024::*;
#[prelude_import]
use self::prelude::*;

View file

@ -28,10 +28,10 @@
#![feature(try_blocks)]
#![feature(yeet_expr)]
#![allow(incomplete_features)]
#[prelude_import]
use std::prelude::rust_2024::*;
#[attr = MacroUse {arguments: UseAll}]
extern crate std;
#[prelude_import]
use std::prelude::rust_2024::*;
#[prelude_import]
use self::prelude::*;

View file

@ -1,7 +1,7 @@
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[attr = MacroUse {arguments: UseAll}]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
//@ compile-flags: -Zunpretty=hir -Zflatten-format-args=yes
//@ check-pass
//@ edition: 2015

View file

@ -10,10 +10,10 @@
// synthesizing parentheses indiscriminately; only where necessary.
#![feature(if_let_guard)]
#[prelude_import]
use std::prelude::rust_2024::*;
#[macro_use]
extern crate std;
#[prelude_import]
use std::prelude::rust_2024::*;
macro_rules! expr { ($expr:expr) => { $expr }; }

View file

@ -1,7 +1,7 @@
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[attr = MacroUse {arguments: UseAll}]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
//@ compile-flags: -Zunpretty=hir
//@ check-pass
//@ edition: 2015

View file

@ -1,7 +1,7 @@
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[attr = MacroUse {arguments: UseAll}]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
//@ compile-flags: -Zunpretty=hir
//@ check-pass
//@ edition: 2015

View file

@ -8,10 +8,10 @@
//@ compile-flags: -Zunpretty=hir,typed
//@ edition: 2015
#![allow(dead_code)]
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[attr = MacroUse {arguments: UseAll}]
extern crate std;
#[prelude_import]
use ::std::prelude::rust_2015::*;
fn main() ({ } as ())