]> git.lizzy.rs Git - rust.git/commitdiff
Compare timestamp
authorEdwin Cheng <edwin0cheng@gmail.com>
Sat, 25 Apr 2020 04:30:28 +0000 (12:30 +0800)
committerEdwin Cheng <edwin0cheng@gmail.com>
Sun, 26 Apr 2020 09:17:37 +0000 (17:17 +0800)
crates/ra_proc_macro_srv/src/lib.rs

index 0954bd6b51521e4b4ed3cd50c7c4aae4a5491ece..121f531fd530b1a3e30010dca167279daf467ba8 100644 (file)
 use ra_proc_macro::{ExpansionResult, ExpansionTask, ListMacrosResult, ListMacrosTask};
 use std::{
     collections::{hash_map::Entry, HashMap},
+    fs::metadata,
     path::{Path, PathBuf},
+    time::SystemTime,
 };
 
 #[derive(Default)]
 pub(crate) struct ProcMacroSrv {
-    expanders: HashMap<PathBuf, dylib::Expander>,
+    expanders: HashMap<(PathBuf, SystemTime), dylib::Expander>,
 }
 
 impl ProcMacroSrv {
@@ -48,7 +50,11 @@ pub fn list_macros(&mut self, task: &ListMacrosTask) -> Result<ListMacrosResult,
     }
 
     fn expander(&mut self, path: &Path) -> Result<&dylib::Expander, String> {
-        Ok(match self.expanders.entry(path.to_path_buf()) {
+        let time = metadata(path)
+            .and_then(|it| it.modified())
+            .map_err(|err| format!("Failed to file metadata for {}: {:?}", path.display(), err))?;
+
+        Ok(match self.expanders.entry((path.to_path_buf(), time)) {
             Entry::Vacant(v) => v.insert(dylib::Expander::new(path).map_err(|err| {
                 format!("Cannot create expander for {}: {:?}", path.display(), err)
             })?),