feat: add File.glob for file pattern matching (issue 15)
Add File.glob(pattern) effect operation that returns a list of file paths matching a glob pattern (e.g., "src/**/*.lux"). Implemented across interpreter (using glob crate), JS backend (handler-based), and C backend (using POSIX glob.h). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -3968,6 +3968,29 @@ impl Interpreter {
|
||||
}
|
||||
}
|
||||
|
||||
("File", "glob") => {
|
||||
let pattern = match request.args.first() {
|
||||
Some(Value::String(s)) => s.clone(),
|
||||
_ => return Err(RuntimeError {
|
||||
message: "File.glob requires a string pattern".to_string(),
|
||||
span: None,
|
||||
}),
|
||||
};
|
||||
match glob::glob(&pattern) {
|
||||
Ok(paths) => {
|
||||
let entries: Vec<Value> = paths
|
||||
.filter_map(|entry| entry.ok())
|
||||
.map(|path| Value::String(path.to_string_lossy().to_string()))
|
||||
.collect();
|
||||
Ok(Value::List(entries))
|
||||
}
|
||||
Err(e) => Err(RuntimeError {
|
||||
message: format!("Invalid glob pattern '{}': {}", pattern, e),
|
||||
span: None,
|
||||
}),
|
||||
}
|
||||
}
|
||||
|
||||
// ===== Process Effect =====
|
||||
("Process", "exec") => {
|
||||
use std::process::Command;
|
||||
|
||||
Reference in New Issue
Block a user