Skip to content

Commit cb9a1c0

Browse files
karthiknadigCopilot
andcommitted
test: cover recursive glob diagnostics (PR #495)
Remove the duplicate recursive warning and cover pattern filtering plus directory-only expansion. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 6f2dfa7 commit cb9a1c0

1 file changed

Lines changed: 47 additions & 8 deletions

File tree

‎crates/pet/src/jsonrpc.rs‎

Lines changed: 47 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -593,14 +593,18 @@ fn expand_configure_directory_patterns(kind: &str, patterns: Vec<PathBuf>) -> Ve
593593
.collect()
594594
}
595595

596+
fn recursive_environment_patterns(patterns: &[PathBuf]) -> impl Iterator<Item = &PathBuf> {
597+
patterns
598+
.iter()
599+
.filter(|pattern| is_recursive_glob_pattern(&pattern.to_string_lossy()))
600+
}
601+
596602
fn warn_for_recursive_environment_patterns(patterns: &[PathBuf]) {
597-
for pattern in patterns {
598-
if is_recursive_glob_pattern(&pattern.to_string_lossy()) {
599-
warn!(
600-
"Recursive environmentDirectories pattern '{}' can make configure slow; prefer bounded patterns such as '.venv' or '*/.venv'",
601-
pattern.display()
602-
);
603-
}
603+
for pattern in recursive_environment_patterns(patterns) {
604+
warn!(
605+
"Recursive environmentDirectories pattern '{}' can make configure slow; prefer bounded patterns such as '.venv' or '*/.venv'",
606+
pattern.display()
607+
);
604608
}
605609
}
606610
pub fn handle_configure(context: Arc<Context>, id: u32, params: Value) {
@@ -631,7 +635,6 @@ pub fn handle_configure(context: Arc<Context>, id: u32, params: Value) {
631635
.environment_directories
632636
.take()
633637
.map(|patterns| {
634-
warn_for_recursive_environment_patterns(&patterns);
635638
expand_configure_directory_patterns("environmentDirectories", patterns)
636639
});
637640
let glob_elapsed = now.elapsed();
@@ -1434,6 +1437,42 @@ mod tests {
14341437
use std::sync::{mpsc, Barrier, Mutex};
14351438
use std::thread;
14361439

1440+
#[test]
1441+
fn recursive_environment_pattern_filter_only_returns_recursive_globs() {
1442+
let patterns = vec![
1443+
PathBuf::from(".venv"),
1444+
PathBuf::from("*/.venv"),
1445+
PathBuf::from("**/.venv"),
1446+
PathBuf::from("/workspace/**/venv"),
1447+
];
1448+
1449+
assert_eq!(
1450+
recursive_environment_patterns(&patterns)
1451+
.cloned()
1452+
.collect::<Vec<_>>(),
1453+
vec![
1454+
PathBuf::from("**/.venv"),
1455+
PathBuf::from("/workspace/**/venv")
1456+
]
1457+
);
1458+
}
1459+
1460+
#[test]
1461+
fn configure_pattern_expansion_filters_non_directories() {
1462+
let temp = tempfile::tempdir().unwrap();
1463+
let directory = temp.path().join("env");
1464+
let file = temp.path().join("python.exe");
1465+
std::fs::create_dir(&directory).unwrap();
1466+
std::fs::write(&file, "").unwrap();
1467+
1468+
assert_eq!(
1469+
expand_configure_directory_patterns(
1470+
"environmentDirectories",
1471+
vec![temp.path().join("*")],
1472+
),
1473+
vec![directory]
1474+
);
1475+
}
14371476
#[derive(Default)]
14381477
struct RecordingReporter {
14391478
environments: Mutex<Vec<PythonEnvironment>>,

0 commit comments

Comments
 (0)