Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
feat: start implementing hover feature
  • Loading branch information
tembleking committed Oct 2, 2025
commit cd1ca929f6606fe933758aa35bead1286f996e09
6 changes: 4 additions & 2 deletions src/app/lsp_server/lsp_server_inner.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@ use tower_lsp::lsp_types::{
CodeActionOrCommand, CodeActionParams, CodeActionProviderCapability, CodeActionResponse,
CodeLens, CodeLensOptions, CodeLensParams, DidChangeConfigurationParams,
DidChangeTextDocumentParams, DidOpenTextDocumentParams, ExecuteCommandOptions,
ExecuteCommandParams, InitializeParams, InitializeResult, InitializedParams, MessageType,
ServerCapabilities, TextDocumentSyncCapability, TextDocumentSyncKind,
ExecuteCommandParams, HoverProviderCapability, InitializeParams, InitializeResult,
InitializedParams, MessageType, ServerCapabilities, TextDocumentSyncCapability,
TextDocumentSyncKind,
};
use tracing::{debug, info};

Expand Down Expand Up @@ -105,6 +106,7 @@ where
commands: SupportedCommands::all_supported_commands_as_string(),
..Default::default()
}),
hover_provider: Some(HoverProviderCapability::Simple(true)),
..Default::default()
},
..Default::default()
Expand Down
36 changes: 34 additions & 2 deletions src/app/lsp_server/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ use tower_lsp::LanguageServer;
use tower_lsp::jsonrpc::{Error, Result};
use tower_lsp::lsp_types::{
CodeActionParams, CodeActionResponse, CodeLens, CodeLensParams, DidChangeConfigurationParams,
DidChangeTextDocumentParams, DidOpenTextDocumentParams, ExecuteCommandParams, InitializeParams,
InitializeResult, InitializedParams, Range,
DidChangeTextDocumentParams, DidOpenTextDocumentParams, ExecuteCommandParams, Hover,
HoverParams, InitializeParams, InitializeResult, InitializedParams, Range,
};

use super::{InMemoryDocumentDatabase, LSPClient};
Expand Down Expand Up @@ -90,6 +90,38 @@ where
self.inner.read().await.execute_command(params).await
}

async fn hover(&self, _params: HoverParams) -> Result<Option<Hover>> {
Ok(Some(Hover {
contents: tower_lsp::lsp_types::HoverContents::Markup(
tower_lsp::lsp_types::MarkupContent {
kind: tower_lsp::lsp_types::MarkupKind::Markdown,
value: "# Sysdig Language Server
---
**_Sysdig Secure_** provides comprehensive security for your containers.

### Features
* Vulnerability Scanning
* Runtime Security
* Compliance

| Feature | Status |
| ----------------- | ------ |
| Vulnerability Scan| ✅ |
| Policy Advisor | 🚧 |

```rust
fn main() {
println!(\"Hello, world!\");
}
```
"
.to_string(),
},
),
range: None,
}))
}

async fn shutdown(&self) -> Result<()> {
self.inner.read().await.shutdown().await
}
Expand Down
30 changes: 27 additions & 3 deletions tests/general.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,10 @@ use sysdig_lsp::domain::scanresult::scan_type::ScanType;
use tower_lsp::LanguageServer;
use tower_lsp::lsp_types::{
CodeActionContext, CodeActionParams, DiagnosticSeverity, DidChangeConfigurationParams,
DidChangeTextDocumentParams, DidOpenTextDocumentParams, ExecuteCommandParams, InitializeParams,
PartialResultParams, Position, Range, TextDocumentIdentifier, TextDocumentItem, Url,
VersionedTextDocumentIdentifier, WorkDoneProgressParams,
DidChangeTextDocumentParams, DidOpenTextDocumentParams, ExecuteCommandParams, HoverParams,
InitializeParams, PartialResultParams, Position, Range, TextDocumentIdentifier,
TextDocumentItem, TextDocumentPositionParams, Url, VersionedTextDocumentIdentifier,
WorkDoneProgressParams,
};

#[fixture]
Expand Down Expand Up @@ -343,6 +344,29 @@ async fn test_execute_command(
);
}

#[rstest]
#[awt]
#[tokio::test]
async fn test_hover(#[future] server_with_open_file: TestSetup, open_file_url: Url) {
let params = HoverParams {
text_document_position_params: TextDocumentPositionParams {
text_document: TextDocumentIdentifier::new(open_file_url),
position: Position::new(0, 0),
},
work_done_progress_params: WorkDoneProgressParams::default(),
};
let result = server_with_open_file.server.hover(params).await;
assert!(result.is_ok());
let hover = result.unwrap().unwrap();
let expected_json = serde_json::json!({
"contents": {
"kind": "markdown",
"value": "# Sysdig Language Server\n---\n**_Sysdig Secure_** provides comprehensive security for your containers.\n\n### Features\n* Vulnerability Scanning\n* Runtime Security\n* Compliance\n\n| Feature | Status |\n| ----------------- | ------ |\n| Vulnerability Scan| ✅ |\n| Policy Advisor | 🚧 |\n\n```rust\nfn main() {\n println!(\"Hello, world!\");\n}\n```\n"
}
});
assert_eq!(serde_json::to_value(hover).unwrap(), expected_json);
}

#[rstest]
#[awt]
#[tokio::test]
Expand Down