-
Notifications
You must be signed in to change notification settings - Fork 79
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: add regexes from node_modules watch #1439
Changes from 4 commits
85d12f5
4e5eff8
346013c
b8abf47
34538fb
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -7,6 +7,7 @@ use anyhow::{self, Ok}; | |||||||||||||||||||||||||||||||||||||||||||||||
use colored::Colorize; | ||||||||||||||||||||||||||||||||||||||||||||||||
use notify::{self, EventKind, Watcher as NotifyWatcher}; | ||||||||||||||||||||||||||||||||||||||||||||||||
use notify_debouncer_full::DebouncedEvent; | ||||||||||||||||||||||||||||||||||||||||||||||||
use regex::Regex; | ||||||||||||||||||||||||||||||||||||||||||||||||
use tracing::debug; | ||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||
use crate::compiler::Compiler; | ||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -18,6 +19,7 @@ pub struct Watcher<'a> { | |||||||||||||||||||||||||||||||||||||||||||||||
pub compiler: &'a Compiler, | ||||||||||||||||||||||||||||||||||||||||||||||||
pub watched_files: HashSet<PathBuf>, | ||||||||||||||||||||||||||||||||||||||||||||||||
pub watched_dirs: HashSet<PathBuf>, | ||||||||||||||||||||||||||||||||||||||||||||||||
node_modules_regexes: Vec<Regex>, | ||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||
impl<'a> Watcher<'a> { | ||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -32,6 +34,16 @@ impl<'a> Watcher<'a> { | |||||||||||||||||||||||||||||||||||||||||||||||
compiler, | ||||||||||||||||||||||||||||||||||||||||||||||||
watched_dirs: HashSet::new(), | ||||||||||||||||||||||||||||||||||||||||||||||||
watched_files: HashSet::new(), | ||||||||||||||||||||||||||||||||||||||||||||||||
node_modules_regexes: compiler | ||||||||||||||||||||||||||||||||||||||||||||||||
.context | ||||||||||||||||||||||||||||||||||||||||||||||||
.config | ||||||||||||||||||||||||||||||||||||||||||||||||
.watch | ||||||||||||||||||||||||||||||||||||||||||||||||
.node_modules_regexes | ||||||||||||||||||||||||||||||||||||||||||||||||
.clone() | ||||||||||||||||||||||||||||||||||||||||||||||||
.unwrap_or_default() | ||||||||||||||||||||||||||||||||||||||||||||||||
.iter() | ||||||||||||||||||||||||||||||||||||||||||||||||
.map(|s| Regex::new(s).unwrap()) | ||||||||||||||||||||||||||||||||||||||||||||||||
.collect::<Vec<Regex>>(), | ||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+37
to
+46
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 建议:处理正则表达式编译错误 当前代码假设正则表达式总是有效的。如果正则表达式无效,会导致 - let regexes = node_modules_regexes.iter().map(|s| Regex::new(s).unwrap());
+ let regexes = node_modules_regexes.iter().map(|s| Regex::new(s)).collect::<Result<Vec<_>, _>>()?; Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -57,6 +69,18 @@ impl<'a> Watcher<'a> { | |||||||||||||||||||||||||||||||||||||||||||||||
dirs.insert(dir); | ||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||
if !self.node_modules_regexes.is_empty() { | ||||||||||||||||||||||||||||||||||||||||||||||||
Jinbao1001 marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||||||||||||||||||||
let is_match = self | ||||||||||||||||||||||||||||||||||||||||||||||||
.node_modules_regexes | ||||||||||||||||||||||||||||||||||||||||||||||||
.iter() | ||||||||||||||||||||||||||||||||||||||||||||||||
.any(|regex| regex.is_match(resource.0.path().to_str().unwrap())); | ||||||||||||||||||||||||||||||||||||||||||||||||
if is_match { | ||||||||||||||||||||||||||||||||||||||||||||||||
let _ = self.watcher.watch( | ||||||||||||||||||||||||||||||||||||||||||||||||
resource.0.path().to_path_buf().as_path(), | ||||||||||||||||||||||||||||||||||||||||||||||||
notify::RecursiveMode::NonRecursive, | ||||||||||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+79
to
+84
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 建议:处理 当前代码忽略了 - let _ = self.watcher.watch(resource.0.path().to_path_buf().as_path(), notify::RecursiveMode::NonRecursive);
+ if let Err(e) = self.watcher.watch(resource.0.path().to_path_buf().as_path(), notify::RecursiveMode::NonRecursive) {
+ eprintln!("Failed to watch path: {:?}", e);
+ } Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||||
dirs.iter().try_for_each(|dir| { | ||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -103,6 +127,8 @@ impl<'a> Watcher<'a> { | |||||||||||||||||||||||||||||||||||||||||||||||
.config | ||||||||||||||||||||||||||||||||||||||||||||||||
.watch | ||||||||||||||||||||||||||||||||||||||||||||||||
.ignore_paths | ||||||||||||||||||||||||||||||||||||||||||||||||
.as_deref() | ||||||||||||||||||||||||||||||||||||||||||||||||
.unwrap_or(&[]) | ||||||||||||||||||||||||||||||||||||||||||||||||
.iter() | ||||||||||||||||||||||||||||||||||||||||||||||||
.map(|p| p.as_str()), | ||||||||||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
建议:处理正则表达式编译错误
当前代码假设正则表达式总是有效的。如果正则表达式无效,会导致
unwrap
引发恐慌。建议处理正则表达式编译错误。Committable suggestion