diff --git a/crates/red_knot_python_semantic/src/module_resolver/resolver.rs b/crates/red_knot_python_semantic/src/module_resolver/resolver.rs index 960ef39e99..990fc01a51 100644 --- a/crates/red_knot_python_semantic/src/module_resolver/resolver.rs +++ b/crates/red_knot_python_semantic/src/module_resolver/resolver.rs @@ -73,6 +73,15 @@ enum SystemOrVendoredPathRef<'a> { Vendored(&'a VendoredPath), } +impl std::fmt::Display for SystemOrVendoredPathRef<'_> { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + SystemOrVendoredPathRef::System(system) => system.fmt(f), + SystemOrVendoredPathRef::Vendored(vendored) => vendored.fmt(f), + } + } +} + /// Resolves the module for the file with the given id. /// /// Returns `None` if the file is not a module locatable via any of the known search paths. diff --git a/crates/red_knot_python_semantic/src/types/infer.rs b/crates/red_knot_python_semantic/src/types/infer.rs index d0338d7c08..06e907b5f1 100644 --- a/crates/red_knot_python_semantic/src/types/infer.rs +++ b/crates/red_knot_python_semantic/src/types/infer.rs @@ -124,7 +124,6 @@ pub(crate) fn infer_definition_types<'db>( let file = definition.file(db); let _span = tracing::trace_span!( "infer_definition_types", - definition = ?definition.as_id(), range = ?definition.kind(db).range(), file = %file.path(db) ) diff --git a/crates/ruff_db/src/system/test.rs b/crates/ruff_db/src/system/test.rs index 5b318a113a..bb15ffe62b 100644 --- a/crates/ruff_db/src/system/test.rs +++ b/crates/ruff_db/src/system/test.rs @@ -175,19 +175,26 @@ pub trait DbWithTestSystem: Db + Sized { /// /// # Panics /// If the system isn't using the memory file system. - fn write_file( - &mut self, - path: impl AsRef, - content: impl ToString, - ) -> crate::system::Result<()> { + fn write_file(&mut self, path: impl AsRef, content: impl ToString) -> Result<()> { let path = path.as_ref(); - let result = self - .test_system() - .memory_file_system() - .write_file(path, content); + + let memory_fs = self.test_system().memory_file_system(); + + let sync_ancestors = path + .parent() + .is_some_and(|parent| !memory_fs.exists(parent)); + let result = memory_fs.write_file(path, content); if result.is_ok() { File::sync_path(self, path); + + // Sync the ancestor paths if the path's parent + // directory didn't exist before. + if sync_ancestors { + for ancestor in path.ancestors() { + File::sync_path(self, ancestor); + } + } } result