lint clippy and fmt

This commit is contained in:
Josh Thomas 2025-08-22 15:09:54 -05:00
parent 79a0c4cb4f
commit db5f3aac65
5 changed files with 49 additions and 56 deletions

View file

@ -2,7 +2,6 @@ use std::future::Future;
use std::sync::Arc; use std::sync::Arc;
use tokio::sync::RwLock; use tokio::sync::RwLock;
use serde_json;
use tower_lsp_server::jsonrpc::Result as LspResult; use tower_lsp_server::jsonrpc::Result as LspResult;
use tower_lsp_server::lsp_types::CompletionOptions; use tower_lsp_server::lsp_types::CompletionOptions;
use tower_lsp_server::lsp_types::CompletionParams; use tower_lsp_server::lsp_types::CompletionParams;
@ -282,31 +281,28 @@ impl LanguageServer for DjangoLanguageServer {
} }
async fn execute_command(&self, params: ExecuteCommandParams) -> LspResult<Option<serde_json::Value>> { async fn execute_command(&self, params: ExecuteCommandParams) -> LspResult<Option<serde_json::Value>> {
match params.command.as_str() { if params.command.as_str() == "djls/dumpState" {
"djls/dumpState" => { tracing::info!("Executing djls/dumpState command");
tracing::info!("Executing djls/dumpState command");
// Check if debug mode is enabled
if std::env::var("DJLS_DEBUG").is_err() {
tracing::warn!("djls/dumpState command requires DJLS_DEBUG environment variable");
return Ok(Some(serde_json::json!({
"error": "Debug mode not enabled. Set DJLS_DEBUG environment variable."
})));
}
let result = self.with_session(|session| { // Check if debug mode is enabled
session.dump_debug_state() if std::env::var("DJLS_DEBUG").is_err() {
}).await; tracing::warn!("djls/dumpState command requires DJLS_DEBUG environment variable");
return Ok(Some(serde_json::json!({
"error": "Debug mode not enabled. Set DJLS_DEBUG environment variable."
})));
}
Ok(Some(serde_json::json!({ let result = self.with_session(|session| {
"success": true, session.dump_debug_state()
"message": result }).await;
})))
} Ok(Some(serde_json::json!({
_ => { "success": true,
tracing::warn!("Unknown command: {}", params.command); "message": result
Ok(None) })))
} } else {
tracing::warn!("Unknown command: {}", params.command);
Ok(None)
} }
} }

View file

@ -3,7 +3,6 @@ use djls_project::DjangoProject;
use salsa::StorageHandle; use salsa::StorageHandle;
use tower_lsp_server::lsp_types::ClientCapabilities; use tower_lsp_server::lsp_types::ClientCapabilities;
use tower_lsp_server::lsp_types::InitializeParams; use tower_lsp_server::lsp_types::InitializeParams;
use serde_json;
use crate::db::ServerDatabase; use crate::db::ServerDatabase;
use crate::workspace::Store; use crate::workspace::Store;
@ -112,7 +111,7 @@ impl Session {
let timestamp: DateTime<Utc> = Utc::now(); let timestamp: DateTime<Utc> = Utc::now();
let filename = format!("djls-debug-state-{}.json", timestamp.format("%Y%m%d-%H%M%S")); let filename = format!("djls-debug-state-{}.json", timestamp.format("%Y%m%d-%H%M%S"));
let debug_info = serde_json::json!({ let debug_info = serde_json::json!({
"timestamp": timestamp.to_rfc3339(), "timestamp": timestamp.to_rfc3339(),
"vfs": self.documents.debug_vfs_state(), "vfs": self.documents.debug_vfs_state(),
@ -124,13 +123,13 @@ impl Session {
}); });
match fs::write(&filename, serde_json::to_string_pretty(&debug_info).unwrap_or_else(|_| "{}".to_string())) { match fs::write(&filename, serde_json::to_string_pretty(&debug_info).unwrap_or_else(|_| "{}".to_string())) {
Ok(_) => { Ok(()) => {
tracing::info!("Debug state dumped to: {}", filename); tracing::info!("Debug state dumped to: {}", filename);
format!("Debug state written to: {}", filename) format!("Debug state written to: {filename}")
} }
Err(e) => { Err(e) => {
tracing::error!("Failed to write debug state: {}", e); tracing::error!("Failed to write debug state: {}", e);
format!("Failed to write debug state: {}", e) format!("Failed to write debug state: {e}")
} }
} }
} }

View file

@ -117,4 +117,3 @@ pub struct TemplateTagContext {
pub closing_brace: ClosingBrace, pub closing_brace: ClosingBrace,
pub needs_leading_space: bool, pub needs_leading_space: bool,
} }

View file

@ -168,9 +168,9 @@ impl FileSystem {
} }
} }
/// Implementation of the `vfs::FileSystem` trait for VfsPath compatibility. /// Implementation of the `vfs::FileSystem` trait for `VfsPath` compatibility.
/// ///
/// This trait implementation allows our custom FileSystem to be used with VfsPath /// This trait implementation allows our custom `FileSystem` to be used with `VfsPath`
/// while maintaining the dual-layer architecture. All operations respect the /// while maintaining the dual-layer architecture. All operations respect the
/// memory-over-physical priority, ensuring LSP semantics are preserved even when /// memory-over-physical priority, ensuring LSP semantics are preserved even when
/// accessed through the generic VFS interface. /// accessed through the generic VFS interface.

View file

@ -1,7 +1,6 @@
use super::fs::FileSystem; use super::fs::FileSystem;
use std::collections::HashMap; use std::collections::HashMap;
use std::path::PathBuf; use std::path::PathBuf;
use serde_json;
use anyhow::anyhow; use anyhow::anyhow;
use anyhow::Result; use anyhow::Result;
@ -48,7 +47,7 @@ impl Store {
root_path, root_path,
}) })
} }
/// Check if a URI represents a file within the workspace /// Check if a URI represents a file within the workspace
fn is_workspace_file(&self, uri: &tower_lsp_server::lsp_types::Uri) -> bool { fn is_workspace_file(&self, uri: &tower_lsp_server::lsp_types::Uri) -> bool {
if let Some(path) = uri_to_pathbuf(uri) { if let Some(path) = uri_to_pathbuf(uri) {
@ -65,7 +64,7 @@ impl Store {
// Silently ignore files outside workspace // Silently ignore files outside workspace
return; return;
} }
let uri = params.text_document.uri.to_string(); let uri = params.text_document.uri.to_string();
let version = params.text_document.version; let version = params.text_document.version;
let content = &params.text_document.text; let content = &params.text_document.text;
@ -79,7 +78,7 @@ impl Store {
&relative_path.to_string_lossy(), &relative_path.to_string_lossy(),
content content
) { ) {
eprintln!("Warning: Failed to write file to VFS: {}", e); eprintln!("Warning: Failed to write file to VFS: {e}");
// Continue with normal processing despite VFS error // Continue with normal processing despite VFS error
} }
} }
@ -101,7 +100,7 @@ impl Store {
// Return Ok to avoid errors for files outside workspace // Return Ok to avoid errors for files outside workspace
return Ok(()); return Ok(());
} }
let uri = params.text_document.uri.as_str().to_string(); let uri = params.text_document.uri.as_str().to_string();
let version = params.text_document.version; let version = params.text_document.version;
@ -109,7 +108,7 @@ impl Store {
if let Some(absolute_path) = uri_to_pathbuf(&params.text_document.uri) { if let Some(absolute_path) = uri_to_pathbuf(&params.text_document.uri) {
if let Ok(relative_path) = absolute_path.strip_prefix(&self.root_path) { if let Ok(relative_path) = absolute_path.strip_prefix(&self.root_path) {
let relative_path_str = relative_path.to_string_lossy(); let relative_path_str = relative_path.to_string_lossy();
// Read current content from VFS (single source of truth) // Read current content from VFS (single source of truth)
let current_content = self.vfs.read_to_string(&relative_path_str) let current_content = self.vfs.read_to_string(&relative_path_str)
.map_err(|e| anyhow!("Failed to read from VFS: {}", e))?; .map_err(|e| anyhow!("Failed to read from VFS: {}", e))?;
@ -119,7 +118,7 @@ impl Store {
// Write updated content back to VFS // Write updated content back to VFS
if let Err(e) = self.vfs.write_string(&relative_path_str, &updated_content) { if let Err(e) = self.vfs.write_string(&relative_path_str, &updated_content) {
eprintln!("Warning: Failed to write to VFS: {}", e); eprintln!("Warning: Failed to write to VFS: {e}");
} }
// Update document metadata (just version) // Update document metadata (just version)
@ -143,10 +142,10 @@ impl Store {
if let Some(absolute_path) = uri_to_pathbuf(&params.text_document.uri) { if let Some(absolute_path) = uri_to_pathbuf(&params.text_document.uri) {
if let Ok(relative_path) = absolute_path.strip_prefix(&self.root_path) { if let Ok(relative_path) = absolute_path.strip_prefix(&self.root_path) {
let relative_path_str = relative_path.to_string_lossy(); let relative_path_str = relative_path.to_string_lossy();
// Discard any unsaved changes in VFS (clean up memory layer) // Discard any unsaved changes in VFS (clean up memory layer)
if let Err(e) = self.vfs.discard_changes(&relative_path_str) { if let Err(e) = self.vfs.discard_changes(&relative_path_str) {
eprintln!("Warning: Failed to discard VFS changes on close: {}", e); eprintln!("Warning: Failed to discard VFS changes on close: {e}");
// Continue with document removal despite VFS error // Continue with document removal despite VFS error
} }
} }
@ -168,10 +167,10 @@ impl Store {
if let Some(absolute_path) = uri_to_pathbuf(&params.text_document.uri) { if let Some(absolute_path) = uri_to_pathbuf(&params.text_document.uri) {
if let Ok(relative_path) = absolute_path.strip_prefix(&self.root_path) { if let Ok(relative_path) = absolute_path.strip_prefix(&self.root_path) {
let relative_path_str = relative_path.to_string_lossy(); let relative_path_str = relative_path.to_string_lossy();
// Discard changes in VFS (clear memory layer so reads return disk content) // Discard changes in VFS (clear memory layer so reads return disk content)
if let Err(e) = self.vfs.discard_changes(&relative_path_str) { if let Err(e) = self.vfs.discard_changes(&relative_path_str) {
eprintln!("Warning: Failed to discard VFS changes on save: {}", e); eprintln!("Warning: Failed to discard VFS changes on save: {e}");
// Continue normally - this is not a critical error // Continue normally - this is not a critical error
} }
} }
@ -180,7 +179,7 @@ impl Store {
Ok(()) Ok(())
} }
/// Apply text changes to content (similar to TextDocument::with_changes but for strings) /// Apply text changes to content (similar to `TextDocument::with_changes` but for strings)
fn apply_changes_to_content( fn apply_changes_to_content(
&self, &self,
mut content: String, mut content: String,
@ -190,7 +189,7 @@ impl Store {
if let Some(range) = change.range { if let Some(range) = change.range {
// Incremental change with range // Incremental change with range
let index = LineIndex::new(&content); let index = LineIndex::new(&content);
if let (Some(start_offset), Some(end_offset)) = ( if let (Some(start_offset), Some(end_offset)) = (
index.offset(range.start).map(|o| o as usize), index.offset(range.start).map(|o| o as usize),
index.offset(range.end).map(|o| o as usize), index.offset(range.end).map(|o| o as usize),
@ -277,7 +276,7 @@ impl Store {
if let Some(absolute_path) = uri_to_pathbuf(&parsed_uri) { if let Some(absolute_path) = uri_to_pathbuf(&parsed_uri) {
if let Ok(relative_path) = absolute_path.strip_prefix(&self.root_path) { if let Ok(relative_path) = absolute_path.strip_prefix(&self.root_path) {
let relative_path_str = relative_path.to_string_lossy(); let relative_path_str = relative_path.to_string_lossy();
// Try to read from VFS first (includes unsaved changes) // Try to read from VFS first (includes unsaved changes)
match self.vfs.read_to_string(&relative_path_str) { match self.vfs.read_to_string(&relative_path_str) {
Ok(vfs_content) => vfs_content, Ok(vfs_content) => vfs_content,
@ -338,19 +337,19 @@ impl Store {
} }
} }
/// Debug method to expose VFS state (only enabled with DJLS_DEBUG) /// Debug method to expose VFS state (only enabled with `DJLS_DEBUG`)
pub fn debug_vfs_state(&self) -> serde_json::Value { pub fn debug_vfs_state(&self) -> serde_json::Value {
use std::collections::HashMap; use std::collections::HashMap;
// Get memory layer contents by trying to read all known documents // Get memory layer contents by trying to read all known documents
let mut memory_layer = HashMap::new(); let mut memory_layer = HashMap::new();
for uri_str in self.documents.keys() { for uri_str in self.documents.keys() {
if let Ok(uri) = uri_str.parse::<tower_lsp_server::lsp_types::Uri>() { if let Ok(uri) = uri_str.parse::<tower_lsp_server::lsp_types::Uri>() {
if let Some(absolute_path) = super::utils::uri_to_pathbuf(&uri) { if let Some(absolute_path) = super::utils::uri_to_pathbuf(&uri) {
if let Ok(relative_path) = absolute_path.strip_prefix(&self.root_path) { if let Ok(relative_path) = absolute_path.strip_prefix(&self.root_path) {
let relative_path_str = relative_path.to_string_lossy(); let relative_path_str = relative_path.to_string_lossy();
// Try to read from VFS - this will show us if there's content in memory layer // Try to read from VFS - this will show us if there's content in memory layer
if let Ok(content) = self.vfs.read_to_string(&relative_path_str) { if let Ok(content) = self.vfs.read_to_string(&relative_path_str) {
memory_layer.insert(relative_path_str.to_string(), content); memory_layer.insert(relative_path_str.to_string(), content);
@ -359,7 +358,7 @@ impl Store {
} }
} }
} }
serde_json::json!({ serde_json::json!({
"memory_layer_files": memory_layer, "memory_layer_files": memory_layer,
"physical_root": self.root_path.display().to_string() "physical_root": self.root_path.display().to_string()
@ -405,19 +404,19 @@ impl Store {
}) })
} }
/// Debug method to expose Store state (only enabled with DJLS_DEBUG) /// Debug method to expose Store state (only enabled with `DJLS_DEBUG`)
pub fn debug_store_state(&self) -> serde_json::Value { pub fn debug_store_state(&self) -> serde_json::Value {
use std::collections::HashMap; use std::collections::HashMap;
let mut documents_info = HashMap::new(); let mut documents_info = HashMap::new();
for (uri, _doc) in &self.documents { for uri in self.documents.keys() {
documents_info.insert(uri.clone(), serde_json::json!({ documents_info.insert(uri.clone(), serde_json::json!({
"version": self.versions.get(uri), "version": self.versions.get(uri),
"tracked": true "tracked": true
})); }));
} }
serde_json::json!({ serde_json::json!({
"documents": documents_info, "documents": documents_info,
"document_count": self.documents.len(), "document_count": self.documents.len(),