Skip to content

Switch to in-tree rustc dependencies with a cfg flag #15616

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Sep 19, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 16 additions & 6 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

18 changes: 7 additions & 11 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ toolchain = { path = "./crates/toolchain", version = "0.0.0" }
tt = { path = "./crates/tt", version = "0.0.0" }
vfs-notify = { path = "./crates/vfs-notify", version = "0.0.0" }
vfs = { path = "./crates/vfs", version = "0.0.0" }
rustc-dependencies = { path = "./crates/rustc-dependencies", version = "0.0.0" }

# local crates that aren't published to crates.io. These should not have versions.
proc-macro-test = { path = "./crates/proc-macro-test" }
Expand All @@ -90,9 +91,9 @@ lsp-server = { version = "0.7.4" }

# non-local crates
smallvec = { version = "1.10.0", features = [
"const_new",
"union",
"const_generics",
"const_new",
"union",
"const_generics",
] }
smol_str = "0.2.0"
nohash-hasher = "0.2.0"
Expand All @@ -101,11 +102,6 @@ serde = { version = "1.0.156", features = ["derive"] }
serde_json = "1.0.96"
triomphe = { version = "0.1.8", default-features = false, features = ["std"] }
# can't upgrade due to dashmap depending on 0.12.3 currently
hashbrown = { version = "0.12.3", features = ["inline-more"], default-features = false }

rustc_lexer = { version = "0.10.0", package = "ra-ap-rustc_lexer" }
rustc_parse_format = { version = "0.10.0", package = "ra-ap-rustc_parse_format", default-features = false }

# Upstream broke this for us so we can't update it
rustc_abi = { version = "0.0.20221221", package = "hkalbasi-rustc-ap-rustc_abi", default-features = false }
rustc_index = { version = "0.0.20221221", package = "hkalbasi-rustc-ap-rustc_index", default-features = false }
hashbrown = { version = "0.12.3", features = [
"inline-more",
], default-features = false }
8 changes: 4 additions & 4 deletions crates/hir-def/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,7 @@ smallvec.workspace = true
hashbrown.workspace = true
triomphe.workspace = true

rustc_abi.workspace = true
rustc_index.workspace = true
rustc_parse_format.workspace = true

rustc-dependencies.workspace = true

# local deps
stdx.workspace = true
Expand All @@ -53,3 +50,6 @@ expect-test = "1.4.0"

# local deps
test-utils.workspace = true

[features]
in-rust-tree = ["rustc-dependencies/in-rust-tree"]
2 changes: 1 addition & 1 deletion crates/hir-def/src/data/adt.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ use hir_expand::{
};
use intern::Interned;
use la_arena::{Arena, ArenaMap};
use rustc_abi::{Align, Integer, IntegerType, ReprFlags, ReprOptions};
use rustc_dependencies::abi::{Align, Integer, IntegerType, ReprFlags, ReprOptions};
use syntax::ast::{self, HasName, HasVisibility};
use triomphe::Arc;

Expand Down
2 changes: 1 addition & 1 deletion crates/hir-def/src/hir/format_args.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
use std::mem;

use hir_expand::name::Name;
use rustc_parse_format as parse;
use rustc_dependencies::parse_format as parse;
use syntax::{
ast::{self, IsString},
AstToken, SmolStr, TextRange,
Expand Down
3 changes: 2 additions & 1 deletion crates/hir-def/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
//! actually true.

#![warn(rust_2018_idioms, unused_lifetimes, semicolon_in_expressions_from_macros)]
#![cfg_attr(feature = "in-rust-tree", feature(rustc_private))]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this needed?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This feature is needed even if you import the rustc private crates indirectly, which I think is unnecessarily too aggressive. Is there any way to depend on the crates in the rustc workspace without this feature? Clippy and Miri use this, but they are fine with nightly and feature flags.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah right, since we might mention the items from those crates now. Well that's unfortunate but not much we can do in that case. Would be nice to add a comment regarding that then.


#[allow(unused)]
macro_rules! eprintln {
Expand Down Expand Up @@ -48,7 +49,7 @@ pub mod visibility;
pub mod find_path;
pub mod import_map;

pub use rustc_abi as layout;
pub use rustc_dependencies::abi as layout;
use triomphe::Arc;

#[cfg(test)]
Expand Down
5 changes: 4 additions & 1 deletion crates/hir-ty/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ triomphe.workspace = true
nohash-hasher.workspace = true
typed-arena = "2.0.1"

rustc_index.workspace = true
rustc-dependencies.workspace = true

# local deps
stdx.workspace = true
Expand All @@ -56,3 +56,6 @@ project-model = { path = "../project-model" }

# local deps
test-utils.workspace = true

[features]
in-rust-tree = ["rustc-dependencies/in-rust-tree"]
2 changes: 1 addition & 1 deletion crates/hir-ty/src/layout.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ mod target;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct RustcEnumVariantIdx(pub LocalEnumVariantId);

impl rustc_index::vec::Idx for RustcEnumVariantIdx {
impl rustc_dependencies::index::vec::Idx for RustcEnumVariantIdx {
fn new(idx: usize) -> Self {
RustcEnumVariantIdx(Idx::from_raw(RawIdx::from(idx as u32)))
}
Expand Down
5 changes: 4 additions & 1 deletion crates/parser/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ doctest = false

[dependencies]
drop_bomb = "0.1.5"
rustc_lexer.workspace = true
rustc-dependencies.workspace = true

limit.workspace = true

Expand All @@ -22,3 +22,6 @@ expect-test = "1.4.0"

stdx.workspace = true
sourcegen.workspace = true

[features]
in-rust-tree = ["rustc-dependencies/in-rust-tree"]
1 change: 1 addition & 0 deletions crates/parser/src/lexed_str.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
//! Note that these tokens, unlike the tokens we feed into the parser, do
//! include info about comments and whitespace.

use rustc_dependencies::lexer as rustc_lexer;
use std::ops;

use crate::{
Expand Down
1 change: 1 addition & 0 deletions crates/parser/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

#![warn(rust_2018_idioms, unused_lifetimes, semicolon_in_expressions_from_macros)]
#![allow(rustdoc::private_intra_doc_links)]
#![cfg_attr(feature = "in-rust-tree", feature(rustc_private))]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why is this required?


mod lexed_str;
mod token_set;
Expand Down
12 changes: 11 additions & 1 deletion crates/rust-analyzer/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ flycheck.workspace = true
hir-def.workspace = true
hir-ty.workspace = true
hir.workspace = true
rustc-dependencies.workspace = true
ide-db.workspace = true
# This should only be used in CLI
ide-ssr.workspace = true
Expand All @@ -67,6 +68,7 @@ profile.workspace = true
project-model.workspace = true
stdx.workspace = true
syntax.workspace = true
parser.workspace = true
toolchain.workspace = true
vfs-notify.workspace = true
vfs.workspace = true
Expand All @@ -89,4 +91,12 @@ mbe.workspace = true
jemalloc = ["jemallocator", "profile/jemalloc"]
force-always-assert = ["always-assert/force"]
sysroot-abi = []
in-rust-tree = ["sysroot-abi", "ide/in-rust-tree", "syntax/in-rust-tree"]
in-rust-tree = [
"sysroot-abi",
"ide/in-rust-tree",
"syntax/in-rust-tree",
"parser/in-rust-tree",
"rustc-dependencies/in-rust-tree",
"hir-def/in-rust-tree",
"hir-ty/in-rust-tree",
]
Comment on lines +94 to +102
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not a fan of this either, this will ultimately end up with mentioning almost all of our crates at some point

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Me too, maybe a non cargo cfg is a better fit here?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, I think it'd be better if we could make it so that this doesn't thread through all the cargo files if possible

20 changes: 20 additions & 0 deletions crates/rustc-dependencies/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
[package]
name = "rustc-dependencies"
version = "0.0.0"
rust-version.workspace = true
edition.workspace = true
license.workspace = true
authors.workspace = true

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
ra-ap-rustc_lexer = { version = "0.10.0" }
ra-ap-rustc_parse_format = { version = "0.10.0", default-features = false }

# Upstream broke this for us so we can't update it
hkalbasi-rustc-ap-rustc_abi = { version = "0.0.20221221", default-features = false }
hkalbasi-rustc-ap-rustc_index = { version = "0.0.20221221", default-features = false }

[features]
in-rust-tree = []
39 changes: 39 additions & 0 deletions crates/rustc-dependencies/src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
//! A wrapper around rustc internal crates, which enables switching between compiler provided
//! ones and stable ones published in crates.io

#![cfg_attr(feature = "in-rust-tree", feature(rustc_private))]

#[cfg(feature = "in-rust-tree")]
extern crate rustc_lexer;

#[cfg(feature = "in-rust-tree")]
pub mod lexer {
pub use ::rustc_lexer::*;
}

#[cfg(not(feature = "in-rust-tree"))]
pub mod lexer {
pub use ::ra_ap_rustc_lexer::*;
}

#[cfg(feature = "in-rust-tree")]
extern crate rustc_parse_format;

#[cfg(feature = "in-rust-tree")]
pub mod parse_format {
pub use ::rustc_parse_format::*;
}

#[cfg(not(feature = "in-rust-tree"))]
pub mod parse_format {
pub use ::ra_ap_rustc_parse_format::*;
}

// Upstream broke this for us so we can't update it
pub mod abi {
pub use ::hkalbasi_rustc_ap_rustc_abi::*;
}

pub mod index {
pub use ::hkalbasi_rustc_ap_rustc_index::*;
}
4 changes: 2 additions & 2 deletions crates/syntax/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ indexmap = "2.0.0"
smol_str.workspace = true
triomphe.workspace = true

rustc_lexer.workspace = true
rustc-dependencies.workspace = true

parser.workspace = true
profile.workspace = true
Expand All @@ -41,4 +41,4 @@ test-utils.workspace = true
sourcegen.workspace = true

[features]
in-rust-tree = []
in-rust-tree = ["rustc-dependencies/in-rust-tree"]
2 changes: 2 additions & 0 deletions crates/syntax/src/ast/token_ext.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

use std::borrow::Cow;

use rustc_dependencies::lexer as rustc_lexer;

use rustc_lexer::unescape::{
unescape_byte, unescape_c_string, unescape_char, unescape_literal, CStrUnit, Mode,
};
Expand Down
1 change: 1 addition & 0 deletions crates/syntax/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
//! [RFC]: <https://github.com/rust-lang/rfcs/pull/2256>
//! [Swift]: <https://github.com/apple/swift/blob/13d593df6f359d0cb2fc81cfaac273297c539455/lib/Syntax/README.md>

#![cfg_attr(feature = "in-rust-tree", feature(rustc_private))]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same here

#![warn(rust_2018_idioms, unused_lifetimes, semicolon_in_expressions_from_macros)]

#[allow(unused)]
Expand Down
2 changes: 1 addition & 1 deletion crates/syntax/src/validation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
mod block;

use rowan::Direction;
use rustc_lexer::unescape::{self, unescape_literal, Mode};
use rustc_dependencies::lexer::unescape::{self, unescape_literal, Mode};

use crate::{
algo,
Expand Down