diff --git a/crates/pine-lsp/src/lib.rs b/crates/pine-lsp/src/lib.rs
index 5c1c40e..b240d01 100644
--- a/crates/pine-lsp/src/lib.rs
+++ b/crates/pine-lsp/src/lib.rs
@@ -8,6 +8,7 @@ use pine_lang::diagnostics::{Diagnostic as PineDiagnostic, Severity};
use pine_lang::interpreter::{BuiltinSignature, Value};
use pine_lang::sema::{FileId, Symbol, SymbolId, SymbolKind, SymbolTable};
use pine_lang::DirLoader;
+use tower_lsp_server::lsp_types::SymbolKind as LspSymbolKind;
use tower_lsp_server::lsp_types::*;
use tower_lsp_server::{jsonrpc, Client, LanguageServer, LspService, Server, UriExt};
@@ -87,6 +88,8 @@ impl LanguageServer for Backend {
hover_provider: Some(HoverProviderCapability::Simple(true)),
definition_provider: Some(OneOf::Left(true)),
references_provider: Some(OneOf::Left(true)),
+ document_symbol_provider: Some(OneOf::Left(true)),
+ document_highlight_provider: Some(OneOf::Left(true)),
completion_provider: Some(CompletionOptions {
trigger_characters: Some(vec![".".to_string()]),
..Default::default()
@@ -233,6 +236,50 @@ impl LanguageServer for Backend {
Ok(locations.filter(|l| !l.is_empty()))
}
+ async fn document_symbol(
+ &self,
+ params: DocumentSymbolParams,
+ ) -> jsonrpc::Result