diff options
-rw-r--r-- | crates/ra_lsp_server/src/conv.rs | 24 | ||||
-rw-r--r-- | crates/ra_lsp_server/src/main_loop/handlers.rs | 38 |
2 files changed, 28 insertions, 34 deletions
diff --git a/crates/ra_lsp_server/src/conv.rs b/crates/ra_lsp_server/src/conv.rs index 5fa52ec1b..d78f77925 100644 --- a/crates/ra_lsp_server/src/conv.rs +++ b/crates/ra_lsp_server/src/conv.rs | |||
@@ -6,8 +6,8 @@ use lsp_types::{ | |||
6 | }; | 6 | }; |
7 | use ra_ide_api::{ | 7 | use ra_ide_api::{ |
8 | translate_offset_with_edit, CompletionItem, CompletionItemKind, FileId, FilePosition, | 8 | translate_offset_with_edit, CompletionItem, CompletionItemKind, FileId, FilePosition, |
9 | FileRange, FileSystemEdit, InsertTextFormat, LineCol, LineIndex, NavigationTarget, RangeInfo, | 9 | FileRange, FileSystemEdit, Fold, FoldKind, InsertTextFormat, LineCol, LineIndex, |
10 | Severity, SourceChange, SourceFileEdit, | 10 | NavigationTarget, RangeInfo, Severity, SourceChange, SourceFileEdit, |
11 | }; | 11 | }; |
12 | use ra_syntax::{SyntaxKind, TextRange, TextUnit}; | 12 | use ra_syntax::{SyntaxKind, TextRange, TextUnit}; |
13 | use ra_text_edit::{AtomTextEdit, TextEdit}; | 13 | use ra_text_edit::{AtomTextEdit, TextEdit}; |
@@ -225,6 +225,26 @@ impl ConvWith<(&LineIndex, LineEndings)> for &AtomTextEdit { | |||
225 | } | 225 | } |
226 | } | 226 | } |
227 | 227 | ||
228 | impl ConvWith<&LineIndex> for Fold { | ||
229 | type Output = lsp_types::FoldingRange; | ||
230 | |||
231 | fn conv_with(self, line_index: &LineIndex) -> lsp_types::FoldingRange { | ||
232 | let range = self.range.conv_with(&line_index); | ||
233 | lsp_types::FoldingRange { | ||
234 | start_line: range.start.line, | ||
235 | start_character: Some(range.start.character), | ||
236 | end_line: range.end.line, | ||
237 | end_character: Some(range.end.character), | ||
238 | kind: match self.kind { | ||
239 | FoldKind::Comment => Some(lsp_types::FoldingRangeKind::Comment), | ||
240 | FoldKind::Imports => Some(lsp_types::FoldingRangeKind::Imports), | ||
241 | FoldKind::Mods => None, | ||
242 | FoldKind::Block => None, | ||
243 | }, | ||
244 | } | ||
245 | } | ||
246 | } | ||
247 | |||
228 | impl<T: ConvWith<CTX>, CTX> ConvWith<CTX> for Option<T> { | 248 | impl<T: ConvWith<CTX>, CTX> ConvWith<CTX> for Option<T> { |
229 | type Output = Option<T::Output>; | 249 | type Output = Option<T::Output>; |
230 | 250 | ||
diff --git a/crates/ra_lsp_server/src/main_loop/handlers.rs b/crates/ra_lsp_server/src/main_loop/handlers.rs index 948d543ea..ae57e57e9 100644 --- a/crates/ra_lsp_server/src/main_loop/handlers.rs +++ b/crates/ra_lsp_server/src/main_loop/handlers.rs | |||
@@ -3,14 +3,11 @@ use std::{fmt::Write as _, io::Write as _}; | |||
3 | use lsp_server::ErrorCode; | 3 | use lsp_server::ErrorCode; |
4 | use lsp_types::{ | 4 | use lsp_types::{ |
5 | CodeAction, CodeActionResponse, CodeLens, Command, CompletionItem, Diagnostic, | 5 | CodeAction, CodeActionResponse, CodeLens, Command, CompletionItem, Diagnostic, |
6 | DocumentFormattingParams, DocumentHighlight, DocumentSymbol, FoldingRange, FoldingRangeKind, | 6 | DocumentFormattingParams, DocumentHighlight, DocumentSymbol, FoldingRange, FoldingRangeParams, |
7 | FoldingRangeParams, Hover, HoverContents, Location, MarkupContent, MarkupKind, Position, | 7 | Hover, HoverContents, Location, MarkupContent, MarkupKind, Position, PrepareRenameResponse, |
8 | PrepareRenameResponse, Range, RenameParams, SymbolInformation, TextDocumentIdentifier, | 8 | Range, RenameParams, SymbolInformation, TextDocumentIdentifier, TextEdit, WorkspaceEdit, |
9 | TextEdit, WorkspaceEdit, | ||
10 | }; | ||
11 | use ra_ide_api::{ | ||
12 | AssistId, FileId, FilePosition, FileRange, FoldKind, Query, Runnable, RunnableKind, | ||
13 | }; | 9 | }; |
10 | use ra_ide_api::{AssistId, FileId, FilePosition, FileRange, Query, Runnable, RunnableKind}; | ||
14 | use ra_prof::profile; | 11 | use ra_prof::profile; |
15 | use ra_syntax::{AstNode, SyntaxKind, TextRange, TextUnit}; | 12 | use ra_syntax::{AstNode, SyntaxKind, TextRange, TextUnit}; |
16 | use rustc_hash::FxHashMap; | 13 | use rustc_hash::FxHashMap; |
@@ -383,32 +380,9 @@ pub fn handle_folding_range( | |||
383 | params: FoldingRangeParams, | 380 | params: FoldingRangeParams, |
384 | ) -> Result<Option<Vec<FoldingRange>>> { | 381 | ) -> Result<Option<Vec<FoldingRange>>> { |
385 | let file_id = params.text_document.try_conv_with(&world)?; | 382 | let file_id = params.text_document.try_conv_with(&world)?; |
383 | let folds = world.analysis().folding_ranges(file_id)?; | ||
386 | let line_index = world.analysis().file_line_index(file_id)?; | 384 | let line_index = world.analysis().file_line_index(file_id)?; |
387 | 385 | let res = Some(folds.into_iter().map_conv_with(&*line_index).collect()); | |
388 | let res = Some( | ||
389 | world | ||
390 | .analysis() | ||
391 | .folding_ranges(file_id)? | ||
392 | .into_iter() | ||
393 | .map(|fold| { | ||
394 | let kind = match fold.kind { | ||
395 | FoldKind::Comment => Some(FoldingRangeKind::Comment), | ||
396 | FoldKind::Imports => Some(FoldingRangeKind::Imports), | ||
397 | FoldKind::Mods => None, | ||
398 | FoldKind::Block => None, | ||
399 | }; | ||
400 | let range = fold.range.conv_with(&line_index); | ||
401 | FoldingRange { | ||
402 | start_line: range.start.line, | ||
403 | start_character: Some(range.start.character), | ||
404 | end_line: range.end.line, | ||
405 | end_character: Some(range.start.character), | ||
406 | kind, | ||
407 | } | ||
408 | }) | ||
409 | .collect(), | ||
410 | ); | ||
411 | |||
412 | Ok(res) | 386 | Ok(res) |
413 | } | 387 | } |
414 | 388 | ||