Skip to content

Commit 6052d46

Browse files
authored
fix(lsp): update cached_versions on lockfile change (#38)
* feat(lsp): add lock file watcher infrastructure Phase 1 of lock file watching implementation: - Add `lockfile_filenames()` to Ecosystem trait for separation of concerns - Add `get_for_lockfile()` and `all_lockfile_patterns()` to EcosystemRegistry - Create `locate_lockfile_for_manifest()` helper in deps-core for DRY - Add file_watcher module with LSP capability registration - Register lock file watchers on server initialization - Optimize PathBuf allocation in lockfile locator Each ecosystem now declares its lock files: - Cargo: Cargo.lock - npm: package-lock.json - PyPI: poetry.lock, uv.lock * feat(lsp): add lock file change notification handler Phase 2 of lock file watching: - Implement did_change_watched_files() handler - Detect ecosystem from lock file name - Invalidate cache on lock file changes - Log lock file change events for debugging Phase 3 will add document update and UI refresh logic. * feat(lsp): add document update on lock file changes Phase 3 of lock file watching: - Add handle_lockfile_change() to find affected manifests - Reload lock file and update resolved_versions - Publish diagnostics for all affected documents - Request inlay hint refresh from client Complete flow: lock file change → cache invalidate → reload → update documents → refresh UI. * fix(lsp): update cached_versions on lockfile change Previously, only resolved_versions was updated when a lockfile changed, causing inlay hints to only appear for dependencies that were visible during the initial document load. Dependencies outside the viewport would not show version hints after scrolling. This fix ensures cached_versions is also updated, matching the pattern already used in document_lifecycle.rs for document open/change events. Adds unit test for update_cached_versions method.
1 parent 22ce258 commit 6052d46

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

crates/deps-lsp/src/document.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -797,6 +797,19 @@ serde = "1.0"
797797
);
798798
}
799799

800+
#[test]
801+
fn test_document_state_update_cached_versions() {
802+
let deps = vec![create_test_cargo_dependency()];
803+
let mut state = DocumentState::new(Ecosystem::Cargo, "test".into(), deps);
804+
805+
let mut cached = HashMap::new();
806+
cached.insert("serde".into(), "1.0.210".into());
807+
808+
state.update_cached_versions(cached);
809+
assert_eq!(state.cached_versions.len(), 1);
810+
assert_eq!(state.cached_versions.get("serde"), Some(&"1.0.210".into()));
811+
}
812+
800813
#[test]
801814
fn test_document_state_parse_result_accessor() {
802815
let deps = vec![create_test_cargo_dependency()];

crates/deps-lsp/src/server.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ impl Backend {
155155
for uri in affected_uris {
156156
if let Some(mut doc) = self.state.documents.get_mut(&uri) {
157157
doc.update_resolved_versions(resolved_versions.clone());
158+
doc.update_cached_versions(resolved_versions.clone());
158159
}
159160

160161
let items =

0 commit comments

Comments
 (0)