@@ -2,11 +2,11 @@ use std::{fmt::Write as _, io::Write as _};
2
2
3
3
use gen_lsp_server:: ErrorCode ;
4
4
use lsp_types:: {
5
- CodeAction , CodeActionResponse , CodeLens , Command , Diagnostic , DiagnosticSeverity ,
6
- DocumentFormattingParams , DocumentHighlight , DocumentSymbol , FoldingRange , FoldingRangeKind ,
7
- FoldingRangeParams , Hover , HoverContents , Location , MarkupContent , MarkupKind , Position ,
8
- PrepareRenameResponse , Range , RenameParams , SymbolInformation , TextDocumentIdentifier ,
9
- TextEdit , WorkspaceEdit ,
5
+ CodeAction , CodeActionResponse , CodeLens , Command , CompletionItem , Diagnostic ,
6
+ DiagnosticSeverity , DocumentFormattingParams , DocumentHighlight , DocumentSymbol , FoldingRange ,
7
+ FoldingRangeKind , FoldingRangeParams , Hover , HoverContents , Location , MarkupContent ,
8
+ MarkupKind , Position , PrepareRenameResponse , Range , RenameParams , SymbolInformation ,
9
+ TextDocumentIdentifier , TextEdit , WorkspaceEdit ,
10
10
} ;
11
11
use ra_ide_api:: {
12
12
AssistId , Cancelable , FileId , FilePosition , FileRange , FoldKind , Query , RangeInfo ,
@@ -153,14 +153,12 @@ pub fn handle_on_type_formatting(
153
153
params : req:: DocumentOnTypeFormattingParams ,
154
154
) -> Result < Option < Vec < TextEdit > > > {
155
155
let _p = profile ( "handle_on_type_formatting" ) ;
156
- let file_id = params. text_document . try_conv_with ( & world) ?;
157
- let line_index = world. analysis ( ) . file_line_index ( file_id) ;
158
- let position = FilePosition {
159
- file_id,
160
- /// in `ra_ide_api`, the `on_type` invariant is that
161
- /// `text.char_at(position) == typed_char`.
162
- offset : params. position . conv_with ( & line_index) - TextUnit :: of_char ( '.' ) ,
163
- } ;
156
+ let mut position = params. text_document_position . try_conv_with ( & world) ?;
157
+ let line_index = world. analysis ( ) . file_line_index ( position. file_id ) ;
158
+
159
+ // in `ra_ide_api`, the `on_type` invariant is that
160
+ // `text.char_at(position) == typed_char`.
161
+ position. offset = position. offset - TextUnit :: of_char ( '.' ) ;
164
162
165
163
let edit = match params. ch . as_str ( ) {
166
164
"=" => world. analysis ( ) . on_eq_typed ( position) ,
@@ -214,7 +212,7 @@ pub fn handle_document_symbol(
214
212
}
215
213
}
216
214
217
- Ok ( Some ( req :: DocumentSymbolResponse :: Nested ( res) ) )
215
+ Ok ( Some ( res. into ( ) ) )
218
216
}
219
217
220
218
pub fn handle_workspace_symbol (
@@ -277,7 +275,7 @@ pub fn handle_goto_definition(
277
275
. map ( |nav| RangeInfo :: new ( nav_range, nav) )
278
276
. map ( |nav| to_location_link ( & nav, & world, & line_index) )
279
277
. collect :: < Result < Vec < _ > > > ( ) ?;
280
- Ok ( Some ( req :: GotoDefinitionResponse :: Link ( res) ) )
278
+ Ok ( Some ( res. into ( ) ) )
281
279
}
282
280
283
281
pub fn handle_goto_implementation (
@@ -297,7 +295,7 @@ pub fn handle_goto_implementation(
297
295
. map ( |nav| RangeInfo :: new ( nav_range, nav) )
298
296
. map ( |nav| to_location_link ( & nav, & world, & line_index) )
299
297
. collect :: < Result < Vec < _ > > > ( ) ?;
300
- Ok ( Some ( req :: GotoDefinitionResponse :: Link ( res) ) )
298
+ Ok ( Some ( res. into ( ) ) )
301
299
}
302
300
303
301
pub fn handle_goto_type_definition (
@@ -317,7 +315,7 @@ pub fn handle_goto_type_definition(
317
315
. map ( |nav| RangeInfo :: new ( nav_range, nav) )
318
316
. map ( |nav| to_location_link ( & nav, & world, & line_index) )
319
317
. collect :: < Result < Vec < _ > > > ( ) ?;
320
- Ok ( Some ( req :: GotoDefinitionResponse :: Link ( res) ) )
318
+ Ok ( Some ( res. into ( ) ) )
321
319
}
322
320
323
321
pub fn handle_parent_module (
@@ -407,12 +405,7 @@ pub fn handle_completion(
407
405
params : req:: CompletionParams ,
408
406
) -> Result < Option < req:: CompletionResponse > > {
409
407
let _p = profile ( "handle_completion" ) ;
410
- let position = {
411
- let file_id = params. text_document . try_conv_with ( & world) ?;
412
- let line_index = world. analysis ( ) . file_line_index ( file_id) ;
413
- let offset = params. position . conv_with ( & line_index) ;
414
- FilePosition { file_id, offset }
415
- } ;
408
+ let position = params. text_document_position . try_conv_with ( & world) ?;
416
409
let completion_triggered_after_single_colon = {
417
410
let mut res = false ;
418
411
if let Some ( ctx) = params. context {
@@ -440,9 +433,10 @@ pub fn handle_completion(
440
433
Some ( items) => items,
441
434
} ;
442
435
let line_index = world. analysis ( ) . file_line_index ( position. file_id ) ;
443
- let items = items. into_iter ( ) . map ( |item| item. conv_with ( & line_index) ) . collect ( ) ;
436
+ let items: Vec < CompletionItem > =
437
+ items. into_iter ( ) . map ( |item| item. conv_with ( & line_index) ) . collect ( ) ;
444
438
445
- Ok ( Some ( req :: CompletionResponse :: Array ( items) ) )
439
+ Ok ( Some ( items. into ( ) ) )
446
440
}
447
441
448
442
pub fn handle_folding_range (
@@ -543,9 +537,7 @@ pub fn handle_prepare_rename(
543
537
}
544
538
545
539
pub fn handle_rename ( world : WorldSnapshot , params : RenameParams ) -> Result < Option < WorkspaceEdit > > {
546
- let file_id = params. text_document . try_conv_with ( & world) ?;
547
- let line_index = world. analysis ( ) . file_line_index ( file_id) ;
548
- let offset = params. position . conv_with ( & line_index) ;
540
+ let position = params. text_document_position . try_conv_with ( & world) ?;
549
541
550
542
if params. new_name . is_empty ( ) {
551
543
return Err ( LspError :: new (
@@ -555,8 +547,7 @@ pub fn handle_rename(world: WorldSnapshot, params: RenameParams) -> Result<Optio
555
547
. into ( ) ) ;
556
548
}
557
549
558
- let optional_change =
559
- world. analysis ( ) . rename ( FilePosition { file_id, offset } , & * params. new_name ) ?;
550
+ let optional_change = world. analysis ( ) . rename ( position, & * params. new_name ) ?;
560
551
let change = match optional_change {
561
552
None => return Ok ( None ) ,
562
553
Some ( it) => it,
@@ -571,11 +562,10 @@ pub fn handle_references(
571
562
world : WorldSnapshot ,
572
563
params : req:: ReferenceParams ,
573
564
) -> Result < Option < Vec < Location > > > {
574
- let file_id = params. text_document . try_conv_with ( & world) ?;
575
- let line_index = world. analysis ( ) . file_line_index ( file_id) ;
576
- let offset = params. position . conv_with ( & line_index) ;
565
+ let position = params. text_document_position . try_conv_with ( & world) ?;
566
+ let line_index = world. analysis ( ) . file_line_index ( position. file_id ) ;
577
567
578
- let refs = match world. analysis ( ) . find_all_refs ( FilePosition { file_id , offset } ) ? {
568
+ let refs = match world. analysis ( ) . find_all_refs ( position ) ? {
579
569
None => return Ok ( None ) ,
580
570
Some ( refs) => refs,
581
571
} ;
0 commit comments