mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-29 13:25:09 +00:00
Gate #[test]
expansion under cfg(test)
.
This will mean users opting to not activate `cfg(test)` will lose IDE experience on them, which is quite unfortunate, but this is unavoidable if we want to avoid false positives on e.g. diagnostics. The real fix is to provide IDE experience even for cfg'ed out code, but this is out of scope for this PR.
This commit is contained in:
parent
4ea09dd9f6
commit
4a06675e9c
17 changed files with 78 additions and 45 deletions
|
@ -4,6 +4,8 @@ use span::{MacroCallId, Span};
|
|||
|
||||
use crate::{db::ExpandDatabase, name, tt, ExpandResult, MacroCallKind};
|
||||
|
||||
use super::quote;
|
||||
|
||||
macro_rules! register_builtin {
|
||||
($(($name:ident, $variant:ident) => $expand:ident),* ) => {
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||
|
@ -52,15 +54,15 @@ impl BuiltinAttrExpander {
|
|||
}
|
||||
|
||||
register_builtin! {
|
||||
(bench, Bench) => dummy_attr_expand,
|
||||
(bench, Bench) => dummy_gate_test_expand,
|
||||
(cfg_accessible, CfgAccessible) => dummy_attr_expand,
|
||||
(cfg_eval, CfgEval) => dummy_attr_expand,
|
||||
(derive, Derive) => derive_expand,
|
||||
// derive const is equivalent to derive for our proposes.
|
||||
(derive_const, DeriveConst) => derive_expand,
|
||||
(global_allocator, GlobalAllocator) => dummy_attr_expand,
|
||||
(test, Test) => dummy_attr_expand,
|
||||
(test_case, TestCase) => dummy_attr_expand
|
||||
(test, Test) => dummy_gate_test_expand,
|
||||
(test_case, TestCase) => dummy_gate_test_expand
|
||||
}
|
||||
|
||||
pub fn find_builtin_attr(ident: &name::Name) -> Option<BuiltinAttrExpander> {
|
||||
|
@ -76,6 +78,19 @@ fn dummy_attr_expand(
|
|||
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
|
||||
/// 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.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue