Semantic Ranges
This commit is contained in:
@@ -7,9 +7,9 @@ use lsp_types::{
|
||||
CompletionOptions, DocumentOnTypeFormattingOptions, FoldingRangeProviderCapability,
|
||||
ImplementationProviderCapability, RenameOptions, RenameProviderCapability, SaveOptions,
|
||||
SelectionRangeProviderCapability, SemanticTokensDocumentProvider, SemanticTokensLegend,
|
||||
SemanticTokensOptions, SemanticTokensServerCapabilities, ServerCapabilities,
|
||||
SignatureHelpOptions, TextDocumentSyncCapability, TextDocumentSyncKind,
|
||||
TextDocumentSyncOptions, TypeDefinitionProviderCapability, WorkDoneProgressOptions,
|
||||
SemanticTokensOptions, ServerCapabilities, SignatureHelpOptions, TextDocumentSyncCapability,
|
||||
TextDocumentSyncKind, TextDocumentSyncOptions, TypeDefinitionProviderCapability,
|
||||
WorkDoneProgressOptions,
|
||||
};
|
||||
|
||||
pub fn server_capabilities() -> ServerCapabilities {
|
||||
@@ -60,7 +60,7 @@ pub fn server_capabilities() -> ServerCapabilities {
|
||||
execute_command_provider: None,
|
||||
workspace: None,
|
||||
call_hierarchy_provider: Some(CallHierarchyServerCapability::Simple(true)),
|
||||
semantic_tokens_provider: Some(SemanticTokensServerCapabilities::SemanticTokensOptions(
|
||||
semantic_tokens_provider: Some(
|
||||
SemanticTokensOptions {
|
||||
legend: SemanticTokensLegend {
|
||||
token_types: semantic_tokens::supported_token_types().iter().cloned().collect(),
|
||||
@@ -71,9 +71,11 @@ pub fn server_capabilities() -> ServerCapabilities {
|
||||
},
|
||||
|
||||
document_provider: Some(SemanticTokensDocumentProvider::Bool(true)),
|
||||
..SemanticTokensOptions::default()
|
||||
},
|
||||
)),
|
||||
range_provider: Some(true),
|
||||
work_done_progress_options: Default::default(),
|
||||
}
|
||||
.into(),
|
||||
),
|
||||
experimental: Default::default(),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -527,8 +527,9 @@ fn on_request(
|
||||
.on::<req::CallHierarchyPrepare>(handlers::handle_call_hierarchy_prepare)?
|
||||
.on::<req::CallHierarchyIncomingCalls>(handlers::handle_call_hierarchy_incoming)?
|
||||
.on::<req::CallHierarchyOutgoingCalls>(handlers::handle_call_hierarchy_outgoing)?
|
||||
.on::<req::Ssr>(handlers::handle_ssr)?
|
||||
.on::<req::SemanticTokensRequest>(handlers::handle_semantic_tokens)?
|
||||
.on::<req::SemanticTokensRangeRequest>(handlers::handle_semantic_tokens_range)?
|
||||
.on::<req::Ssr>(handlers::handle_ssr)?
|
||||
.finish();
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -17,8 +17,8 @@ use lsp_types::{
|
||||
Diagnostic, DocumentFormattingParams, DocumentHighlight, DocumentSymbol, FoldingRange,
|
||||
FoldingRangeParams, Hover, HoverContents, Location, MarkupContent, MarkupKind, Position,
|
||||
PrepareRenameResponse, Range, RenameParams, SemanticTokenModifier, SemanticTokenType,
|
||||
SemanticTokens, SemanticTokensParams, SemanticTokensResult, SymbolInformation,
|
||||
TextDocumentIdentifier, TextEdit, WorkspaceEdit,
|
||||
SemanticTokens, SemanticTokensParams, SemanticTokensRangeParams, SemanticTokensRangeResult,
|
||||
SemanticTokensResult, SymbolInformation, TextDocumentIdentifier, TextEdit, WorkspaceEdit,
|
||||
};
|
||||
use ra_ide::{
|
||||
AssistId, FileId, FilePosition, FileRange, Query, RangeInfo, Runnable, RunnableKind,
|
||||
@@ -1092,3 +1092,25 @@ pub fn handle_semantic_tokens(
|
||||
|
||||
Ok(Some(tokens.into()))
|
||||
}
|
||||
|
||||
pub fn handle_semantic_tokens_range(
|
||||
world: WorldSnapshot,
|
||||
params: SemanticTokensRangeParams,
|
||||
) -> Result<Option<SemanticTokensRangeResult>> {
|
||||
let _p = profile("handle_semantic_tokens_range");
|
||||
|
||||
let frange = (¶ms.text_document, params.range).try_conv_with(&world)?;
|
||||
let line_index = world.analysis().file_line_index(frange.file_id)?;
|
||||
|
||||
let mut builder = SemanticTokensBuilder::default();
|
||||
|
||||
for h in world.analysis().highlight_range(frange)?.into_iter() {
|
||||
let type_and_modifiers: (SemanticTokenType, Vec<SemanticTokenModifier>) = h.tag.conv();
|
||||
let (token_type, token_modifiers) = type_and_modifiers.conv();
|
||||
builder.push(h.range.conv_with(&line_index), token_type, token_modifiers);
|
||||
}
|
||||
|
||||
let tokens = SemanticTokens { data: builder.build(), ..Default::default() };
|
||||
|
||||
Ok(Some(tokens.into()))
|
||||
}
|
||||
|
||||
@@ -12,9 +12,10 @@ pub use lsp_types::{
|
||||
DocumentSymbolResponse, FileSystemWatcher, Hover, InitializeResult, MessageType,
|
||||
PartialResultParams, ProgressParams, ProgressParamsValue, ProgressToken,
|
||||
PublishDiagnosticsParams, ReferenceParams, Registration, RegistrationParams, SelectionRange,
|
||||
SelectionRangeParams, SemanticTokensParams, SemanticTokensResult, ServerCapabilities,
|
||||
ShowMessageParams, SignatureHelp, SymbolKind, TextDocumentEdit, TextDocumentPositionParams,
|
||||
TextEdit, WorkDoneProgressParams, WorkspaceEdit, WorkspaceSymbolParams,
|
||||
SelectionRangeParams, SemanticTokensParams, SemanticTokensRangeParams,
|
||||
SemanticTokensRangeResult, SemanticTokensResult, ServerCapabilities, ShowMessageParams,
|
||||
SignatureHelp, SymbolKind, TextDocumentEdit, TextDocumentPositionParams, TextEdit,
|
||||
WorkDoneProgressParams, WorkspaceEdit, WorkspaceSymbolParams,
|
||||
};
|
||||
|
||||
pub enum AnalyzerStatus {}
|
||||
|
||||
Reference in New Issue
Block a user