mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-28 12:54:58 +00:00
Auto merge of #18085 - ChayimFriedman2:gate-test, r=Veykril
feat: Provide an config option to not set `cfg(test)` Fixes #17957.
This commit is contained in:
commit
ceee056af6
18 changed files with 109 additions and 18 deletions
|
@ -49,6 +49,10 @@ impl CfgOptions {
|
||||||
cfg.fold(&|atom| self.enabled.contains(atom))
|
cfg.fold(&|atom| self.enabled.contains(atom))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn check_atom(&self, cfg: &CfgAtom) -> bool {
|
||||||
|
self.enabled.contains(cfg)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn insert_atom(&mut self, key: Symbol) {
|
pub fn insert_atom(&mut self, key: Symbol) {
|
||||||
self.enabled.insert(CfgAtom::Flag(key));
|
self.enabled.insert(CfgAtom::Flag(key));
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
use std::{cmp::Ordering, iter, mem, ops::Not};
|
use std::{cmp::Ordering, iter, mem, ops::Not};
|
||||||
|
|
||||||
use base_db::{CrateId, CrateOrigin, Dependency, LangCrateOrigin};
|
use base_db::{CrateId, CrateOrigin, Dependency, LangCrateOrigin};
|
||||||
use cfg::{CfgExpr, CfgOptions};
|
use cfg::{CfgAtom, CfgExpr, CfgOptions};
|
||||||
use either::Either;
|
use either::Either;
|
||||||
use hir_expand::{
|
use hir_expand::{
|
||||||
attrs::{Attr, AttrId},
|
attrs::{Attr, AttrId},
|
||||||
|
@ -1324,13 +1324,21 @@ impl DefCollector<'_> {
|
||||||
};
|
};
|
||||||
|
|
||||||
// Skip #[test]/#[bench] expansion, which would merely result in more memory usage
|
// Skip #[test]/#[bench] expansion, which would merely result in more memory usage
|
||||||
// due to duplicating functions into macro expansions
|
// due to duplicating functions into macro expansions, but only if `cfg(test)` is active,
|
||||||
|
// otherwise they are expanded to nothing and this can impact e.g. diagnostics (due to things
|
||||||
|
// being cfg'ed out).
|
||||||
|
// Ideally we will just expand them to nothing here. But we are only collecting macro calls,
|
||||||
|
// not expanding them, so we have no way to do that.
|
||||||
if matches!(
|
if matches!(
|
||||||
def.kind,
|
def.kind,
|
||||||
MacroDefKind::BuiltInAttr(_, expander)
|
MacroDefKind::BuiltInAttr(_, expander)
|
||||||
if expander.is_test() || expander.is_bench()
|
if expander.is_test() || expander.is_bench()
|
||||||
) {
|
) {
|
||||||
return recollect_without(self);
|
let test_is_active =
|
||||||
|
self.cfg_options.check_atom(&CfgAtom::Flag(sym::test.clone()));
|
||||||
|
if test_is_active {
|
||||||
|
return recollect_without(self);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let call_id = || {
|
let call_id = || {
|
||||||
|
|
|
@ -4,6 +4,8 @@ use span::{MacroCallId, Span};
|
||||||
|
|
||||||
use crate::{db::ExpandDatabase, name, tt, ExpandResult, MacroCallKind};
|
use crate::{db::ExpandDatabase, name, tt, ExpandResult, MacroCallKind};
|
||||||
|
|
||||||
|
use super::quote;
|
||||||
|
|
||||||
macro_rules! register_builtin {
|
macro_rules! register_builtin {
|
||||||
($(($name:ident, $variant:ident) => $expand:ident),* ) => {
|
($(($name:ident, $variant:ident) => $expand:ident),* ) => {
|
||||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||||
|
@ -52,15 +54,15 @@ impl BuiltinAttrExpander {
|
||||||
}
|
}
|
||||||
|
|
||||||
register_builtin! {
|
register_builtin! {
|
||||||
(bench, Bench) => dummy_attr_expand,
|
(bench, Bench) => dummy_gate_test_expand,
|
||||||
(cfg_accessible, CfgAccessible) => dummy_attr_expand,
|
(cfg_accessible, CfgAccessible) => dummy_attr_expand,
|
||||||
(cfg_eval, CfgEval) => dummy_attr_expand,
|
(cfg_eval, CfgEval) => dummy_attr_expand,
|
||||||
(derive, Derive) => derive_expand,
|
(derive, Derive) => derive_expand,
|
||||||
// derive const is equivalent to derive for our proposes.
|
// derive const is equivalent to derive for our proposes.
|
||||||
(derive_const, DeriveConst) => derive_expand,
|
(derive_const, DeriveConst) => derive_expand,
|
||||||
(global_allocator, GlobalAllocator) => dummy_attr_expand,
|
(global_allocator, GlobalAllocator) => dummy_attr_expand,
|
||||||
(test, Test) => dummy_attr_expand,
|
(test, Test) => dummy_gate_test_expand,
|
||||||
(test_case, TestCase) => dummy_attr_expand
|
(test_case, TestCase) => dummy_gate_test_expand
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn find_builtin_attr(ident: &name::Name) -> Option<BuiltinAttrExpander> {
|
pub fn find_builtin_attr(ident: &name::Name) -> Option<BuiltinAttrExpander> {
|
||||||
|
@ -76,6 +78,19 @@ fn dummy_attr_expand(
|
||||||
ExpandResult::ok(tt.clone())
|
ExpandResult::ok(tt.clone())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn dummy_gate_test_expand(
|
||||||
|
_db: &dyn ExpandDatabase,
|
||||||
|
_id: MacroCallId,
|
||||||
|
tt: &tt::Subtree,
|
||||||
|
span: Span,
|
||||||
|
) -> ExpandResult<tt::Subtree> {
|
||||||
|
let result = quote::quote! { span=>
|
||||||
|
#[cfg(test)]
|
||||||
|
#tt
|
||||||
|
};
|
||||||
|
ExpandResult::ok(result)
|
||||||
|
}
|
||||||
|
|
||||||
/// We generate a very specific expansion here, as we do not actually expand the `#[derive]` attribute
|
/// We generate a very specific expansion here, as we do not actually expand the `#[derive]` attribute
|
||||||
/// itself in name res, but we do want to expand it to something for the IDE layer, so that the input
|
/// itself in name res, but we do want to expand it to something for the IDE layer, so that the input
|
||||||
/// derive attributes can be downmapped, and resolved as proper paths.
|
/// derive attributes can be downmapped, and resolved as proper paths.
|
||||||
|
|
|
@ -526,7 +526,7 @@ mod tests {
|
||||||
#[test]
|
#[test]
|
||||||
fn test_loading_rust_analyzer() {
|
fn test_loading_rust_analyzer() {
|
||||||
let path = Path::new(env!("CARGO_MANIFEST_DIR")).parent().unwrap().parent().unwrap();
|
let path = Path::new(env!("CARGO_MANIFEST_DIR")).parent().unwrap().parent().unwrap();
|
||||||
let cargo_config = CargoConfig::default();
|
let cargo_config = CargoConfig { set_test: true, ..CargoConfig::default() };
|
||||||
let load_cargo_config = LoadCargoConfig {
|
let load_cargo_config = LoadCargoConfig {
|
||||||
load_out_dirs_from_check: false,
|
load_out_dirs_from_check: false,
|
||||||
with_proc_macro_server: ProcMacroServerChoice::None,
|
with_proc_macro_server: ProcMacroServerChoice::None,
|
||||||
|
|
|
@ -100,6 +100,7 @@ pub struct CargoConfig {
|
||||||
pub invocation_strategy: InvocationStrategy,
|
pub invocation_strategy: InvocationStrategy,
|
||||||
/// Optional path to use instead of `target` when building
|
/// Optional path to use instead of `target` when building
|
||||||
pub target_dir: Option<Utf8PathBuf>,
|
pub target_dir: Option<Utf8PathBuf>,
|
||||||
|
pub set_test: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub type Package = Idx<PackageData>;
|
pub type Package = Idx<PackageData>;
|
||||||
|
|
|
@ -35,6 +35,7 @@ fn load_cargo_with_overrides(
|
||||||
rustc: Err(None),
|
rustc: Err(None),
|
||||||
cargo_config_extra_env: Default::default(),
|
cargo_config_extra_env: Default::default(),
|
||||||
error: None,
|
error: None,
|
||||||
|
set_test: true,
|
||||||
},
|
},
|
||||||
cfg_overrides,
|
cfg_overrides,
|
||||||
sysroot: Sysroot::empty(),
|
sysroot: Sysroot::empty(),
|
||||||
|
@ -242,6 +243,7 @@ fn smoke_test_real_sysroot_cargo() {
|
||||||
rustc: Err(None),
|
rustc: Err(None),
|
||||||
cargo_config_extra_env: Default::default(),
|
cargo_config_extra_env: Default::default(),
|
||||||
error: None,
|
error: None,
|
||||||
|
set_test: true,
|
||||||
},
|
},
|
||||||
sysroot,
|
sysroot,
|
||||||
rustc_cfg: Vec::new(),
|
rustc_cfg: Vec::new(),
|
||||||
|
|
|
@ -78,6 +78,7 @@ pub enum ProjectWorkspaceKind {
|
||||||
rustc: Result<Box<(CargoWorkspace, WorkspaceBuildScripts)>, Option<String>>,
|
rustc: Result<Box<(CargoWorkspace, WorkspaceBuildScripts)>, Option<String>>,
|
||||||
/// Environment variables set in the `.cargo/config` file.
|
/// Environment variables set in the `.cargo/config` file.
|
||||||
cargo_config_extra_env: FxHashMap<String, String>,
|
cargo_config_extra_env: FxHashMap<String, String>,
|
||||||
|
set_test: bool,
|
||||||
},
|
},
|
||||||
/// Project workspace was specified using a `rust-project.json` file.
|
/// Project workspace was specified using a `rust-project.json` file.
|
||||||
Json(ProjectJson),
|
Json(ProjectJson),
|
||||||
|
@ -98,6 +99,7 @@ pub enum ProjectWorkspaceKind {
|
||||||
cargo: Option<(CargoWorkspace, WorkspaceBuildScripts, Option<Arc<anyhow::Error>>)>,
|
cargo: Option<(CargoWorkspace, WorkspaceBuildScripts, Option<Arc<anyhow::Error>>)>,
|
||||||
/// Environment variables set in the `.cargo/config` file.
|
/// Environment variables set in the `.cargo/config` file.
|
||||||
cargo_config_extra_env: FxHashMap<String, String>,
|
cargo_config_extra_env: FxHashMap<String, String>,
|
||||||
|
set_test: bool,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,6 +114,7 @@ impl fmt::Debug for ProjectWorkspace {
|
||||||
build_scripts,
|
build_scripts,
|
||||||
rustc,
|
rustc,
|
||||||
cargo_config_extra_env,
|
cargo_config_extra_env,
|
||||||
|
set_test,
|
||||||
} => f
|
} => f
|
||||||
.debug_struct("Cargo")
|
.debug_struct("Cargo")
|
||||||
.field("root", &cargo.workspace_root().file_name())
|
.field("root", &cargo.workspace_root().file_name())
|
||||||
|
@ -126,6 +129,7 @@ impl fmt::Debug for ProjectWorkspace {
|
||||||
.field("toolchain", &toolchain)
|
.field("toolchain", &toolchain)
|
||||||
.field("data_layout", &target_layout)
|
.field("data_layout", &target_layout)
|
||||||
.field("cargo_config_extra_env", &cargo_config_extra_env)
|
.field("cargo_config_extra_env", &cargo_config_extra_env)
|
||||||
|
.field("set_test", set_test)
|
||||||
.field("build_scripts", &build_scripts.error().unwrap_or("ok"))
|
.field("build_scripts", &build_scripts.error().unwrap_or("ok"))
|
||||||
.finish(),
|
.finish(),
|
||||||
ProjectWorkspaceKind::Json(project) => {
|
ProjectWorkspaceKind::Json(project) => {
|
||||||
|
@ -137,12 +141,14 @@ impl fmt::Debug for ProjectWorkspace {
|
||||||
.field("toolchain", &toolchain)
|
.field("toolchain", &toolchain)
|
||||||
.field("data_layout", &target_layout)
|
.field("data_layout", &target_layout)
|
||||||
.field("n_cfg_overrides", &cfg_overrides.len());
|
.field("n_cfg_overrides", &cfg_overrides.len());
|
||||||
|
|
||||||
debug_struct.finish()
|
debug_struct.finish()
|
||||||
}
|
}
|
||||||
ProjectWorkspaceKind::DetachedFile {
|
ProjectWorkspaceKind::DetachedFile {
|
||||||
file,
|
file,
|
||||||
cargo: cargo_script,
|
cargo: cargo_script,
|
||||||
cargo_config_extra_env,
|
cargo_config_extra_env,
|
||||||
|
set_test,
|
||||||
} => f
|
} => f
|
||||||
.debug_struct("DetachedFiles")
|
.debug_struct("DetachedFiles")
|
||||||
.field("file", &file)
|
.field("file", &file)
|
||||||
|
@ -154,6 +160,7 @@ impl fmt::Debug for ProjectWorkspace {
|
||||||
.field("data_layout", &target_layout)
|
.field("data_layout", &target_layout)
|
||||||
.field("n_cfg_overrides", &cfg_overrides.len())
|
.field("n_cfg_overrides", &cfg_overrides.len())
|
||||||
.field("cargo_config_extra_env", &cargo_config_extra_env)
|
.field("cargo_config_extra_env", &cargo_config_extra_env)
|
||||||
|
.field("set_test", set_test)
|
||||||
.finish(),
|
.finish(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -329,6 +336,7 @@ impl ProjectWorkspace {
|
||||||
rustc,
|
rustc,
|
||||||
cargo_config_extra_env,
|
cargo_config_extra_env,
|
||||||
error: error.map(Arc::new),
|
error: error.map(Arc::new),
|
||||||
|
set_test: config.set_test,
|
||||||
},
|
},
|
||||||
sysroot,
|
sysroot,
|
||||||
rustc_cfg,
|
rustc_cfg,
|
||||||
|
@ -423,6 +431,7 @@ impl ProjectWorkspace {
|
||||||
file: detached_file.to_owned(),
|
file: detached_file.to_owned(),
|
||||||
cargo: cargo_script,
|
cargo: cargo_script,
|
||||||
cargo_config_extra_env,
|
cargo_config_extra_env,
|
||||||
|
set_test: config.set_test,
|
||||||
},
|
},
|
||||||
sysroot,
|
sysroot,
|
||||||
rustc_cfg,
|
rustc_cfg,
|
||||||
|
@ -609,6 +618,7 @@ impl ProjectWorkspace {
|
||||||
build_scripts,
|
build_scripts,
|
||||||
cargo_config_extra_env: _,
|
cargo_config_extra_env: _,
|
||||||
error: _,
|
error: _,
|
||||||
|
set_test: _,
|
||||||
} => {
|
} => {
|
||||||
cargo
|
cargo
|
||||||
.packages()
|
.packages()
|
||||||
|
@ -750,6 +760,7 @@ impl ProjectWorkspace {
|
||||||
build_scripts,
|
build_scripts,
|
||||||
cargo_config_extra_env: _,
|
cargo_config_extra_env: _,
|
||||||
error: _,
|
error: _,
|
||||||
|
set_test,
|
||||||
} => (
|
} => (
|
||||||
cargo_to_crate_graph(
|
cargo_to_crate_graph(
|
||||||
load,
|
load,
|
||||||
|
@ -759,10 +770,11 @@ impl ProjectWorkspace {
|
||||||
rustc_cfg.clone(),
|
rustc_cfg.clone(),
|
||||||
cfg_overrides,
|
cfg_overrides,
|
||||||
build_scripts,
|
build_scripts,
|
||||||
|
*set_test,
|
||||||
),
|
),
|
||||||
sysroot,
|
sysroot,
|
||||||
),
|
),
|
||||||
ProjectWorkspaceKind::DetachedFile { file, cargo: cargo_script, .. } => (
|
ProjectWorkspaceKind::DetachedFile { file, cargo: cargo_script, set_test, .. } => (
|
||||||
if let Some((cargo, build_scripts, _)) = cargo_script {
|
if let Some((cargo, build_scripts, _)) = cargo_script {
|
||||||
cargo_to_crate_graph(
|
cargo_to_crate_graph(
|
||||||
&mut |path| load(path),
|
&mut |path| load(path),
|
||||||
|
@ -772,6 +784,7 @@ impl ProjectWorkspace {
|
||||||
rustc_cfg.clone(),
|
rustc_cfg.clone(),
|
||||||
cfg_overrides,
|
cfg_overrides,
|
||||||
build_scripts,
|
build_scripts,
|
||||||
|
*set_test,
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
detached_file_to_crate_graph(
|
detached_file_to_crate_graph(
|
||||||
|
@ -780,6 +793,7 @@ impl ProjectWorkspace {
|
||||||
file,
|
file,
|
||||||
sysroot,
|
sysroot,
|
||||||
cfg_overrides,
|
cfg_overrides,
|
||||||
|
*set_test,
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
sysroot,
|
sysroot,
|
||||||
|
@ -813,6 +827,7 @@ impl ProjectWorkspace {
|
||||||
cargo_config_extra_env,
|
cargo_config_extra_env,
|
||||||
build_scripts: _,
|
build_scripts: _,
|
||||||
error: _,
|
error: _,
|
||||||
|
set_test: _,
|
||||||
},
|
},
|
||||||
ProjectWorkspaceKind::Cargo {
|
ProjectWorkspaceKind::Cargo {
|
||||||
cargo: o_cargo,
|
cargo: o_cargo,
|
||||||
|
@ -820,6 +835,7 @@ impl ProjectWorkspace {
|
||||||
cargo_config_extra_env: o_cargo_config_extra_env,
|
cargo_config_extra_env: o_cargo_config_extra_env,
|
||||||
build_scripts: _,
|
build_scripts: _,
|
||||||
error: _,
|
error: _,
|
||||||
|
set_test: _,
|
||||||
},
|
},
|
||||||
) => {
|
) => {
|
||||||
cargo == o_cargo
|
cargo == o_cargo
|
||||||
|
@ -834,11 +850,13 @@ impl ProjectWorkspace {
|
||||||
file,
|
file,
|
||||||
cargo: Some((cargo_script, _, _)),
|
cargo: Some((cargo_script, _, _)),
|
||||||
cargo_config_extra_env,
|
cargo_config_extra_env,
|
||||||
|
set_test: _,
|
||||||
},
|
},
|
||||||
ProjectWorkspaceKind::DetachedFile {
|
ProjectWorkspaceKind::DetachedFile {
|
||||||
file: o_file,
|
file: o_file,
|
||||||
cargo: Some((o_cargo_script, _, _)),
|
cargo: Some((o_cargo_script, _, _)),
|
||||||
cargo_config_extra_env: o_cargo_config_extra_env,
|
cargo_config_extra_env: o_cargo_config_extra_env,
|
||||||
|
set_test: _,
|
||||||
},
|
},
|
||||||
) => {
|
) => {
|
||||||
file == o_file
|
file == o_file
|
||||||
|
@ -987,6 +1005,7 @@ fn cargo_to_crate_graph(
|
||||||
rustc_cfg: Vec<CfgAtom>,
|
rustc_cfg: Vec<CfgAtom>,
|
||||||
override_cfg: &CfgOverrides,
|
override_cfg: &CfgOverrides,
|
||||||
build_scripts: &WorkspaceBuildScripts,
|
build_scripts: &WorkspaceBuildScripts,
|
||||||
|
set_test: bool,
|
||||||
) -> (CrateGraph, ProcMacroPaths) {
|
) -> (CrateGraph, ProcMacroPaths) {
|
||||||
let _p = tracing::info_span!("cargo_to_crate_graph").entered();
|
let _p = tracing::info_span!("cargo_to_crate_graph").entered();
|
||||||
let mut res = (CrateGraph::default(), ProcMacroPaths::default());
|
let mut res = (CrateGraph::default(), ProcMacroPaths::default());
|
||||||
|
@ -1011,8 +1030,10 @@ fn cargo_to_crate_graph(
|
||||||
let mut cfg_options = cfg_options.clone();
|
let mut cfg_options = cfg_options.clone();
|
||||||
|
|
||||||
if cargo[pkg].is_local {
|
if cargo[pkg].is_local {
|
||||||
// Add test cfg for local crates
|
if set_test {
|
||||||
cfg_options.insert_atom(sym::test.clone());
|
// Add test cfg for local crates
|
||||||
|
cfg_options.insert_atom(sym::test.clone());
|
||||||
|
}
|
||||||
cfg_options.insert_atom(sym::rust_analyzer.clone());
|
cfg_options.insert_atom(sym::rust_analyzer.clone());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1173,6 +1194,7 @@ fn detached_file_to_crate_graph(
|
||||||
detached_file: &ManifestPath,
|
detached_file: &ManifestPath,
|
||||||
sysroot: &Sysroot,
|
sysroot: &Sysroot,
|
||||||
override_cfg: &CfgOverrides,
|
override_cfg: &CfgOverrides,
|
||||||
|
set_test: bool,
|
||||||
) -> (CrateGraph, ProcMacroPaths) {
|
) -> (CrateGraph, ProcMacroPaths) {
|
||||||
let _p = tracing::info_span!("detached_file_to_crate_graph").entered();
|
let _p = tracing::info_span!("detached_file_to_crate_graph").entered();
|
||||||
let mut crate_graph = CrateGraph::default();
|
let mut crate_graph = CrateGraph::default();
|
||||||
|
@ -1180,7 +1202,9 @@ fn detached_file_to_crate_graph(
|
||||||
sysroot_to_crate_graph(&mut crate_graph, sysroot, rustc_cfg.clone(), load);
|
sysroot_to_crate_graph(&mut crate_graph, sysroot, rustc_cfg.clone(), load);
|
||||||
|
|
||||||
let mut cfg_options = CfgOptions::from_iter(rustc_cfg);
|
let mut cfg_options = CfgOptions::from_iter(rustc_cfg);
|
||||||
cfg_options.insert_atom(sym::test.clone());
|
if set_test {
|
||||||
|
cfg_options.insert_atom(sym::test.clone());
|
||||||
|
}
|
||||||
cfg_options.insert_atom(sym::rust_analyzer.clone());
|
cfg_options.insert_atom(sym::rust_analyzer.clone());
|
||||||
override_cfg.apply(&mut cfg_options, "");
|
override_cfg.apply(&mut cfg_options, "");
|
||||||
let cfg_options = Arc::new(cfg_options);
|
let cfg_options = Arc::new(cfg_options);
|
||||||
|
@ -1426,6 +1450,7 @@ fn sysroot_to_crate_graph(
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
&WorkspaceBuildScripts::default(),
|
&WorkspaceBuildScripts::default(),
|
||||||
|
false,
|
||||||
);
|
);
|
||||||
|
|
||||||
let mut pub_deps = vec![];
|
let mut pub_deps = vec![];
|
||||||
|
|
|
@ -65,6 +65,7 @@ impl flags::AnalysisStats {
|
||||||
false => Some(RustLibSource::Discover),
|
false => Some(RustLibSource::Discover),
|
||||||
},
|
},
|
||||||
all_targets: true,
|
all_targets: true,
|
||||||
|
set_test: true,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
};
|
};
|
||||||
let no_progress = &|_| ();
|
let no_progress = &|_| ();
|
||||||
|
|
|
@ -277,6 +277,7 @@ impl flags::Lsif {
|
||||||
let cargo_config = &CargoConfig {
|
let cargo_config = &CargoConfig {
|
||||||
sysroot: Some(RustLibSource::Discover),
|
sysroot: Some(RustLibSource::Discover),
|
||||||
all_targets: true,
|
all_targets: true,
|
||||||
|
set_test: true,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
};
|
};
|
||||||
let no_progress = &|_| ();
|
let no_progress = &|_| ();
|
||||||
|
|
|
@ -16,6 +16,7 @@ impl flags::RunTests {
|
||||||
let cargo_config = CargoConfig {
|
let cargo_config = CargoConfig {
|
||||||
sysroot: Some(RustLibSource::Discover),
|
sysroot: Some(RustLibSource::Discover),
|
||||||
all_targets: true,
|
all_targets: true,
|
||||||
|
set_test: true,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
};
|
};
|
||||||
let load_cargo_config = LoadCargoConfig {
|
let load_cargo_config = LoadCargoConfig {
|
||||||
|
|
|
@ -70,6 +70,7 @@ impl Tester {
|
||||||
let cargo_config = CargoConfig {
|
let cargo_config = CargoConfig {
|
||||||
sysroot: Some(RustLibSource::Discover),
|
sysroot: Some(RustLibSource::Discover),
|
||||||
all_targets: true,
|
all_targets: true,
|
||||||
|
set_test: true,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -85,6 +86,7 @@ impl Tester {
|
||||||
file: ManifestPath::try_from(tmp_file).unwrap(),
|
file: ManifestPath::try_from(tmp_file).unwrap(),
|
||||||
cargo: None,
|
cargo: None,
|
||||||
cargo_config_extra_env: Default::default(),
|
cargo_config_extra_env: Default::default(),
|
||||||
|
set_test: true,
|
||||||
},
|
},
|
||||||
sysroot,
|
sysroot,
|
||||||
rustc_cfg: vec![],
|
rustc_cfg: vec![],
|
||||||
|
|
|
@ -24,11 +24,6 @@ impl flags::Scip {
|
||||||
let now = Instant::now();
|
let now = Instant::now();
|
||||||
|
|
||||||
let no_progress = &|s| (eprintln!("rust-analyzer: Loading {s}"));
|
let no_progress = &|s| (eprintln!("rust-analyzer: Loading {s}"));
|
||||||
let load_cargo_config = LoadCargoConfig {
|
|
||||||
load_out_dirs_from_check: true,
|
|
||||||
with_proc_macro_server: ProcMacroServerChoice::Sysroot,
|
|
||||||
prefill_caches: true,
|
|
||||||
};
|
|
||||||
let root =
|
let root =
|
||||||
vfs::AbsPathBuf::assert_utf8(std::env::current_dir()?.join(&self.path)).normalize();
|
vfs::AbsPathBuf::assert_utf8(std::env::current_dir()?.join(&self.path)).normalize();
|
||||||
|
|
||||||
|
@ -51,6 +46,11 @@ impl flags::Scip {
|
||||||
// FIXME @alibektas : What happens to errors without logging?
|
// FIXME @alibektas : What happens to errors without logging?
|
||||||
error!(?error_sink, "Config Error(s)");
|
error!(?error_sink, "Config Error(s)");
|
||||||
}
|
}
|
||||||
|
let load_cargo_config = LoadCargoConfig {
|
||||||
|
load_out_dirs_from_check: true,
|
||||||
|
with_proc_macro_server: ProcMacroServerChoice::Sysroot,
|
||||||
|
prefill_caches: true,
|
||||||
|
};
|
||||||
let cargo_config = config.cargo(None);
|
let cargo_config = config.cargo(None);
|
||||||
let (db, vfs, _) = load_workspace_at(
|
let (db, vfs, _) = load_workspace_at(
|
||||||
root.as_path().as_ref(),
|
root.as_path().as_ref(),
|
||||||
|
|
|
@ -13,6 +13,7 @@ impl flags::Ssr {
|
||||||
let cargo_config = CargoConfig {
|
let cargo_config = CargoConfig {
|
||||||
sysroot: Some(RustLibSource::Discover),
|
sysroot: Some(RustLibSource::Discover),
|
||||||
all_targets: true,
|
all_targets: true,
|
||||||
|
set_test: true,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
};
|
};
|
||||||
let load_cargo_config = LoadCargoConfig {
|
let load_cargo_config = LoadCargoConfig {
|
||||||
|
@ -50,7 +51,8 @@ impl flags::Search {
|
||||||
pub fn run(self) -> anyhow::Result<()> {
|
pub fn run(self) -> anyhow::Result<()> {
|
||||||
use ide_db::base_db::SourceRootDatabase;
|
use ide_db::base_db::SourceRootDatabase;
|
||||||
use ide_db::symbol_index::SymbolsDatabase;
|
use ide_db::symbol_index::SymbolsDatabase;
|
||||||
let cargo_config = CargoConfig::default();
|
let cargo_config =
|
||||||
|
CargoConfig { all_targets: true, set_test: true, ..CargoConfig::default() };
|
||||||
let load_cargo_config = LoadCargoConfig {
|
let load_cargo_config = LoadCargoConfig {
|
||||||
load_out_dirs_from_check: true,
|
load_out_dirs_from_check: true,
|
||||||
with_proc_macro_server: ProcMacroServerChoice::Sysroot,
|
with_proc_macro_server: ProcMacroServerChoice::Sysroot,
|
||||||
|
|
|
@ -574,6 +574,9 @@ config_data! {
|
||||||
/// set to a path relative to the workspace to use that path.
|
/// set to a path relative to the workspace to use that path.
|
||||||
cargo_targetDir | rust_analyzerTargetDir: Option<TargetDirectory> = None,
|
cargo_targetDir | rust_analyzerTargetDir: Option<TargetDirectory> = None,
|
||||||
|
|
||||||
|
/// Set `cfg(test)` for local crates. Defaults to true.
|
||||||
|
cfg_setTest: bool = true,
|
||||||
|
|
||||||
/// Run the check command for diagnostics on save.
|
/// Run the check command for diagnostics on save.
|
||||||
checkOnSave | checkOnSave_enable: bool = true,
|
checkOnSave | checkOnSave_enable: bool = true,
|
||||||
|
|
||||||
|
@ -695,7 +698,6 @@ config_data! {
|
||||||
workspace_symbol_search_limit: usize = 128,
|
workspace_symbol_search_limit: usize = 128,
|
||||||
/// Workspace symbol search scope.
|
/// Workspace symbol search scope.
|
||||||
workspace_symbol_search_scope: WorkspaceSymbolSearchScopeDef = WorkspaceSymbolSearchScopeDef::Workspace,
|
workspace_symbol_search_scope: WorkspaceSymbolSearchScopeDef = WorkspaceSymbolSearchScopeDef::Workspace,
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1859,9 +1861,14 @@ impl Config {
|
||||||
extra_args: self.cargo_extraArgs(source_root).clone(),
|
extra_args: self.cargo_extraArgs(source_root).clone(),
|
||||||
extra_env: self.cargo_extraEnv(source_root).clone(),
|
extra_env: self.cargo_extraEnv(source_root).clone(),
|
||||||
target_dir: self.target_dir_from_config(source_root),
|
target_dir: self.target_dir_from_config(source_root),
|
||||||
|
set_test: *self.cfg_setTest(source_root),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn cfg_set_test(&self, source_root: Option<SourceRootId>) -> bool {
|
||||||
|
*self.cfg_setTest(source_root)
|
||||||
|
}
|
||||||
|
|
||||||
pub(crate) fn completion_snippets_default() -> FxHashMap<String, SnippetDef> {
|
pub(crate) fn completion_snippets_default() -> FxHashMap<String, SnippetDef> {
|
||||||
serde_json::from_str(
|
serde_json::from_str(
|
||||||
r#"{
|
r#"{
|
||||||
|
|
|
@ -36,6 +36,8 @@ fn integrated_highlighting_benchmark() {
|
||||||
|
|
||||||
let cargo_config = CargoConfig {
|
let cargo_config = CargoConfig {
|
||||||
sysroot: Some(project_model::RustLibSource::Discover),
|
sysroot: Some(project_model::RustLibSource::Discover),
|
||||||
|
all_targets: true,
|
||||||
|
set_test: true,
|
||||||
..CargoConfig::default()
|
..CargoConfig::default()
|
||||||
};
|
};
|
||||||
let load_cargo_config = LoadCargoConfig {
|
let load_cargo_config = LoadCargoConfig {
|
||||||
|
@ -102,6 +104,8 @@ fn integrated_completion_benchmark() {
|
||||||
|
|
||||||
let cargo_config = CargoConfig {
|
let cargo_config = CargoConfig {
|
||||||
sysroot: Some(project_model::RustLibSource::Discover),
|
sysroot: Some(project_model::RustLibSource::Discover),
|
||||||
|
all_targets: true,
|
||||||
|
set_test: true,
|
||||||
..CargoConfig::default()
|
..CargoConfig::default()
|
||||||
};
|
};
|
||||||
let load_cargo_config = LoadCargoConfig {
|
let load_cargo_config = LoadCargoConfig {
|
||||||
|
@ -279,6 +283,8 @@ fn integrated_diagnostics_benchmark() {
|
||||||
|
|
||||||
let cargo_config = CargoConfig {
|
let cargo_config = CargoConfig {
|
||||||
sysroot: Some(project_model::RustLibSource::Discover),
|
sysroot: Some(project_model::RustLibSource::Discover),
|
||||||
|
all_targets: true,
|
||||||
|
set_test: true,
|
||||||
..CargoConfig::default()
|
..CargoConfig::default()
|
||||||
};
|
};
|
||||||
let load_cargo_config = LoadCargoConfig {
|
let load_cargo_config = LoadCargoConfig {
|
||||||
|
|
|
@ -158,6 +158,11 @@ building from locking the `Cargo.lock` at the expense of duplicating build artif
|
||||||
Set to `true` to use a subdirectory of the existing target directory or
|
Set to `true` to use a subdirectory of the existing target directory or
|
||||||
set to a path relative to the workspace to use that path.
|
set to a path relative to the workspace to use that path.
|
||||||
--
|
--
|
||||||
|
[[rust-analyzer.cfg.setTest]]rust-analyzer.cfg.setTest (default: `true`)::
|
||||||
|
+
|
||||||
|
--
|
||||||
|
Set `cfg(test)` for local crates. Defaults to true.
|
||||||
|
--
|
||||||
[[rust-analyzer.checkOnSave]]rust-analyzer.checkOnSave (default: `true`)::
|
[[rust-analyzer.checkOnSave]]rust-analyzer.checkOnSave (default: `true`)::
|
||||||
+
|
+
|
||||||
--
|
--
|
||||||
|
|
|
@ -853,6 +853,16 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"title": "cfg",
|
||||||
|
"properties": {
|
||||||
|
"rust-analyzer.cfg.setTest": {
|
||||||
|
"markdownDescription": "Set `cfg(test)` for local crates. Defaults to true.",
|
||||||
|
"default": true,
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"title": "general",
|
"title": "general",
|
||||||
"properties": {
|
"properties": {
|
||||||
|
|
|
@ -24,6 +24,7 @@ export class Config {
|
||||||
"serverPath",
|
"serverPath",
|
||||||
"server",
|
"server",
|
||||||
"files",
|
"files",
|
||||||
|
"cfg",
|
||||||
].map((opt) => `${this.rootSection}.${opt}`);
|
].map((opt) => `${this.rootSection}.${opt}`);
|
||||||
|
|
||||||
private readonly requiresWindowReloadOpts = ["testExplorer"].map(
|
private readonly requiresWindowReloadOpts = ["testExplorer"].map(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue