Skip to content

Commit 745a33f

Browse files
committed
add custom request for view syntax tree
1 parent 6bd8a56 commit 745a33f

File tree

4 files changed

+54
-0
lines changed

4 files changed

+54
-0
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
use lsp_types::request::Request;
2+
use serde::{Deserialize, Serialize};
3+
4+
#[derive(Debug)]
5+
pub enum EmmySyntaxTreeRequest {}
6+
7+
impl Request for EmmySyntaxTreeRequest {
8+
type Params = EmmySyntaxTreeParams;
9+
type Result = Option<SyntaxTreeResponse>;
10+
const METHOD: &'static str = "emmy/syntaxTree";
11+
}
12+
13+
#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
14+
pub struct EmmySyntaxTreeParams {
15+
pub uri: String,
16+
}
17+
18+
#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
19+
pub struct SyntaxTreeResponse {
20+
pub content: String,
21+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
mod emmy_syntax_tree_request;
2+
3+
use std::str::FromStr;
4+
5+
use emmylua_parser::LuaAstNode;
6+
use lsp_types::Uri;
7+
use tokio_util::sync::CancellationToken;
8+
9+
use crate::{
10+
context::ServerContextSnapshot,
11+
handlers::emmy_syntax_tree::emmy_syntax_tree_request::{
12+
EmmySyntaxTreeParams, SyntaxTreeResponse,
13+
},
14+
};
15+
pub use emmy_syntax_tree_request::*;
16+
17+
pub async fn on_emmy_syntax_tree_handler(
18+
context: ServerContextSnapshot,
19+
params: EmmySyntaxTreeParams,
20+
_: CancellationToken,
21+
) -> Option<SyntaxTreeResponse> {
22+
let uri = Uri::from_str(&params.uri).ok()?;
23+
let analysis = context.analysis().read().await;
24+
let file_id = analysis.get_file_id(&uri)?;
25+
let semantic_model = analysis.compilation.get_semantic_model(file_id)?;
26+
27+
let root = semantic_model.get_root();
28+
let content = format!("{:#?}", root.syntax());
29+
Some(SyntaxTreeResponse { content })
30+
}

crates/emmylua_ls/src/handlers/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ mod document_symbol;
1616
mod document_type_format;
1717
mod emmy_annotator;
1818
mod emmy_gutter;
19+
mod emmy_syntax_tree;
1920
mod fold_range;
2021
mod hover;
2122
mod implementation;

crates/emmylua_ls/src/handlers/request_handler.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ use crate::{
2020
diagnostic::{on_pull_document_diagnostic, on_pull_workspace_diagnostic},
2121
document_type_format::on_type_formatting_handler,
2222
emmy_gutter::{EmmyGutterRequest, on_emmy_gutter_handler},
23+
emmy_syntax_tree::{EmmySyntaxTreeRequest, on_emmy_syntax_tree_handler},
2324
},
2425
};
2526

@@ -96,6 +97,7 @@ pub async fn on_request_handler(
9697
DocumentLinkResolve => on_document_link_resolve_handler,
9798
EmmyAnnotatorRequest => on_emmy_annotator_handler,
9899
EmmyGutterRequest => on_emmy_gutter_handler,
100+
EmmySyntaxTreeRequest => on_emmy_syntax_tree_handler,
99101
SelectionRangeRequest => on_document_selection_range_handle,
100102
Completion => on_completion_handler,
101103
ResolveCompletionItem => on_completion_resolve_handler,

0 commit comments

Comments
 (0)