Skip to content

Commit

Permalink
Merge pull request #18884 from Veykril/push-xwqkorxozzkq
Browse files Browse the repository at this point in the history
fix: Fix `env`/`option_env` macro check disregarding macro_rules definitions
  • Loading branch information
Veykril authored Jan 8, 2025
2 parents 1e975d6 + acccd4b commit 32b86a8
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 34 deletions.
17 changes: 13 additions & 4 deletions crates/hir/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3046,14 +3046,23 @@ impl Macro {
MacroId::Macro2Id(it) => {
matches!(it.lookup(db.upcast()).expander, MacroExpander::BuiltInEager(eager) if eager.is_env_or_option_env())
}
MacroId::MacroRulesId(_) | MacroId::ProcMacroId(_) => false,
MacroId::MacroRulesId(it) => {
matches!(it.lookup(db.upcast()).expander, MacroExpander::BuiltInEager(eager) if eager.is_env_or_option_env())
}
MacroId::ProcMacroId(_) => false,
}
}

pub fn is_asm_or_global_asm(&self, db: &dyn HirDatabase) -> bool {
matches!(self.id, MacroId::Macro2Id(it) if {
matches!(it.lookup(db.upcast()).expander, MacroExpander::BuiltIn(m) if m.is_asm())
})
match self.id {
MacroId::Macro2Id(it) => {
matches!(it.lookup(db.upcast()).expander, MacroExpander::BuiltIn(m) if m.is_asm())
}
MacroId::MacroRulesId(it) => {
matches!(it.lookup(db.upcast()).expander, MacroExpander::BuiltIn(m) if m.is_asm())
}
MacroId::ProcMacroId(_) => false,
}
}

pub fn is_attr(&self, db: &dyn HirDatabase) -> bool {
Expand Down
57 changes: 27 additions & 30 deletions crates/ide-completion/src/completions/env_vars.rs
Original file line number Diff line number Diff line change
Expand Up @@ -68,43 +68,40 @@ pub(crate) fn complete_cargo_env_vars(
mod tests {
use crate::tests::{check_edit, completion_list};

fn check(macro_name: &str) {
#[test]
fn completes_env_variable_in_env() {
check_edit(
"CARGO_BIN_NAME",
&format!(
r#"
#[rustc_builtin_macro]
macro {macro_name} {{
($var:literal) => {{ 0 }}
}}
fn main() {{
let foo = {macro_name}!("CAR$0");
}}
"#
),
&format!(
r#"
#[rustc_builtin_macro]
macro {macro_name} {{
($var:literal) => {{ 0 }}
}}
fn main() {{
let foo = {macro_name}!("CARGO_BIN_NAME");
}}
"#
),
r#"
//- minicore: env
fn main() {
let foo = env!("CAR$0");
}
"#,
r#"
fn main() {
let foo = env!("CARGO_BIN_NAME");
}
"#,
);
}
#[test]
fn completes_env_variable_in_env() {
check("env")
}

#[test]
fn completes_env_variable_in_option_env() {
check("option_env");
check_edit(
"CARGO_BIN_NAME",
r#"
//- minicore: env
fn main() {
let foo = option_env!("CAR$0");
}
"#,
r#"
fn main() {
let foo = option_env!("CARGO_BIN_NAME");
}
"#,
);
}

#[test]
Expand Down

0 comments on commit 32b86a8

Please sign in to comment.