Skip to content

Commit 98d64d2

Browse files
Diagnose cfged-out crate
1 parent 49094db commit 98d64d2

2 files changed

Lines changed: 50 additions & 3 deletions

File tree

crates/hir-def/src/nameres/collector.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ use itertools::izip;
2222
use la_arena::Idx;
2323
use rustc_hash::{FxHashMap, FxHashSet};
2424
use smallvec::SmallVec;
25-
use span::{Edition, FileAstId, SyntaxContext};
25+
use span::{Edition, FileAstId, ROOT_ERASED_FILE_AST_ID, SyntaxContext};
2626
use stdx::always;
2727
use syntax::ast;
2828
use triomphe::Arc;
@@ -369,7 +369,14 @@ impl<'db> DefCollector<'db> {
369369

370370
self.inject_prelude();
371371

372-
if matches!(item_tree.top_level_attrs(), AttrsOrCfg::CfgDisabled(_)) {
372+
if let AttrsOrCfg::CfgDisabled(attrs) = item_tree.top_level_attrs() {
373+
let (cfg_expr, _) = &**attrs;
374+
self.def_map.diagnostics.push(DefDiagnostic::unconfigured_code(
375+
self.def_map.root,
376+
InFile::new(file_id.into(), ROOT_ERASED_FILE_AST_ID),
377+
cfg_expr.clone(),
378+
self.cfg_options.clone(),
379+
));
373380
return;
374381
}
375382

crates/ide-diagnostics/src/handlers/inactive_code.rs

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,10 @@ pub(crate) fn inactive_code(
4040

4141
#[cfg(test)]
4242
mod tests {
43-
use crate::{DiagnosticsConfig, tests::check_diagnostics_with_config};
43+
use ide_db::RootDatabase;
44+
use test_fixture::WithFixture;
45+
46+
use crate::{DiagnosticCode, DiagnosticsConfig, tests::check_diagnostics_with_config};
4447

4548
#[track_caller]
4649
pub(crate) fn check(#[rust_analyzer::rust_fixture] ra_fixture: &str) {
@@ -212,4 +215,41 @@ union FooBar {
212215
"#,
213216
);
214217
}
218+
219+
#[test]
220+
fn inactive_crate() {
221+
let db = RootDatabase::with_files(
222+
r#"
223+
#![cfg(false)]
224+
225+
fn foo() {}
226+
"#,
227+
);
228+
let file_id = db.test_crate().root_file_id(&db);
229+
let diagnostics = hir::attach_db(&db, || {
230+
crate::full_diagnostics(
231+
&db,
232+
&DiagnosticsConfig::test_sample(),
233+
&ide_db::assists::AssistResolveStrategy::All,
234+
file_id.file_id(&db),
235+
)
236+
});
237+
let [inactive_code] = &*diagnostics else {
238+
panic!("expected one inactive_code diagnostic, found {diagnostics:#?}");
239+
};
240+
assert_eq!(
241+
inactive_code.code,
242+
DiagnosticCode::Ra("inactive-code", ide_db::Severity::WeakWarning)
243+
);
244+
assert_eq!(
245+
inactive_code.message,
246+
"code is inactive due to #[cfg] directives: false is disabled",
247+
);
248+
assert!(inactive_code.fixes.is_none());
249+
let full_file_range = file_id.parse(&db).syntax_node().text_range();
250+
assert_eq!(
251+
inactive_code.range,
252+
ide_db::FileRange { file_id: file_id.file_id(&db), range: full_file_range },
253+
);
254+
}
215255
}

0 commit comments

Comments
 (0)