From 1d1f4f6c0f227e06b567c56eca9fa752e3e7fb41 Mon Sep 17 00:00:00 2001 From: "Josh (aider)" Date: Tue, 7 Jan 2025 11:46:55 -0600 Subject: [PATCH] feat: add basic diagnostic support for TODO comments --- crates/djls-server/src/diagnostics.rs | 28 +++++++++++++++++++++++++++ crates/djls-server/src/documents.rs | 8 +++++--- crates/djls-server/src/server.rs | 13 +++++++++++-- 3 files changed, 44 insertions(+), 5 deletions(-) create mode 100644 crates/djls-server/src/diagnostics.rs diff --git a/crates/djls-server/src/diagnostics.rs b/crates/djls-server/src/diagnostics.rs new file mode 100644 index 0000000..8a72ad5 --- /dev/null +++ b/crates/djls-server/src/diagnostics.rs @@ -0,0 +1,28 @@ +use tower_lsp::lsp_types::*; +use crate::documents::TextDocument; + +pub struct Diagnostics; + +impl Diagnostics { + pub fn generate_for_document(document: &TextDocument) -> Vec { + let mut diagnostics = Vec::new(); + + // TODO: Add actual diagnostic logic here + // For now, let's just add a placeholder diagnostic + if document.get_text().contains("TODO") { + diagnostics.push(Diagnostic { + range: Range { + start: Position { line: 0, character: 0 }, + end: Position { line: 0, character: 5 }, + }, + severity: Some(DiagnosticSeverity::INFORMATION), + code: Some(NumberOrString::String("django.todo".to_string())), + source: Some("Django LSP".to_string()), + message: "Found TODO comment".to_string(), + ..Default::default() + }); + } + + diagnostics + } +} diff --git a/crates/djls-server/src/documents.rs b/crates/djls-server/src/documents.rs index 968e796..5b8e326 100644 --- a/crates/djls-server/src/documents.rs +++ b/crates/djls-server/src/documents.rs @@ -2,10 +2,12 @@ use anyhow::{anyhow, Result}; use djls_project::TemplateTags; use std::collections::HashMap; use tower_lsp::lsp_types::{ - CompletionItem, CompletionItemKind, CompletionResponse, DidChangeTextDocumentParams, - DidCloseTextDocumentParams, DidOpenTextDocumentParams, Documentation, InsertTextFormat, - MarkupContent, MarkupKind, Position, Range, + CompletionItem, CompletionItemKind, CompletionResponse, Diagnostic, DiagnosticSeverity, + DidChangeTextDocumentParams, DidCloseTextDocumentParams, DidOpenTextDocumentParams, + Documentation, InsertTextFormat, MarkupContent, MarkupKind, NumberOrString, Position, Range, Url, }; +use tower_lsp::Client; +use crate::diagnostics::Diagnostics; #[derive(Debug)] pub struct Store { diff --git a/crates/djls-server/src/server.rs b/crates/djls-server/src/server.rs index 0569021..ac56123 100644 --- a/crates/djls-server/src/server.rs +++ b/crates/djls-server/src/server.rs @@ -81,6 +81,14 @@ impl LanguageServer for DjangoLanguageServer { save: Some(SaveOptions::default().into()), }, )), + diagnostic_provider: Some(DiagnosticServerCapabilities::Options(DiagnosticOptions { + identifier: Some("django".to_string()), + inter_file_dependencies: false, + workspace_diagnostics: false, + work_done_progress_options: WorkDoneProgressOptions { + work_done_progress: Some(true), + }, + })), ..Default::default() }, server_info: Some(ServerInfo { @@ -102,7 +110,7 @@ impl LanguageServer for DjangoLanguageServer { } async fn did_open(&self, params: DidOpenTextDocumentParams) { - if let Err(e) = self.documents.write().await.handle_did_open(params.clone()) { + if let Err(e) = self.documents.write().await.handle_did_open(params.clone(), &self.client).await { eprintln!("Error handling document open: {}", e); return; } @@ -120,7 +128,8 @@ impl LanguageServer for DjangoLanguageServer { .documents .write() .await - .handle_did_change(params.clone()) + .handle_did_change(params.clone(), &self.client) + .await { eprintln!("Error handling document change: {}", e); return;