diff options
Diffstat (limited to 'crates/ide/src/lib.rs')
-rw-r--r-- | crates/ide/src/lib.rs | 44 |
1 files changed, 28 insertions, 16 deletions
diff --git a/crates/ide/src/lib.rs b/crates/ide/src/lib.rs index 99e45633e..34360501a 100644 --- a/crates/ide/src/lib.rs +++ b/crates/ide/src/lib.rs | |||
@@ -49,6 +49,7 @@ mod syntax_tree; | |||
49 | mod typing; | 49 | mod typing; |
50 | mod markdown_remove; | 50 | mod markdown_remove; |
51 | mod doc_links; | 51 | mod doc_links; |
52 | mod view_crate_graph; | ||
52 | 53 | ||
53 | use std::sync::Arc; | 54 | use std::sync::Arc; |
54 | 55 | ||
@@ -87,7 +88,9 @@ pub use crate::{ | |||
87 | }, | 88 | }, |
88 | }; | 89 | }; |
89 | pub use hir::{Documentation, Semantics}; | 90 | pub use hir::{Documentation, Semantics}; |
90 | pub use ide_assists::{Assist, AssistConfig, AssistId, AssistKind}; | 91 | pub use ide_assists::{ |
92 | Assist, AssistConfig, AssistId, AssistKind, AssistResolveStrategy, SingleResolve, | ||
93 | }; | ||
91 | pub use ide_completion::{ | 94 | pub use ide_completion::{ |
92 | CompletionConfig, CompletionItem, CompletionItemKind, CompletionRelevance, ImportEdit, | 95 | CompletionConfig, CompletionItem, CompletionItemKind, CompletionRelevance, ImportEdit, |
93 | InsertTextFormat, | 96 | InsertTextFormat, |
@@ -285,6 +288,10 @@ impl Analysis { | |||
285 | self.with_db(|db| view_hir::view_hir(&db, position)) | 288 | self.with_db(|db| view_hir::view_hir(&db, position)) |
286 | } | 289 | } |
287 | 290 | ||
291 | pub fn view_crate_graph(&self) -> Cancelable<Result<String, String>> { | ||
292 | self.with_db(|db| view_crate_graph::view_crate_graph(&db)) | ||
293 | } | ||
294 | |||
288 | pub fn expand_macro(&self, position: FilePosition) -> Cancelable<Option<ExpandedMacro>> { | 295 | pub fn expand_macro(&self, position: FilePosition) -> Cancelable<Option<ExpandedMacro>> { |
289 | self.with_db(|db| expand_macro::expand_macro(db, position)) | 296 | self.with_db(|db| expand_macro::expand_macro(db, position)) |
290 | } | 297 | } |
@@ -518,12 +525,13 @@ impl Analysis { | |||
518 | pub fn assists( | 525 | pub fn assists( |
519 | &self, | 526 | &self, |
520 | config: &AssistConfig, | 527 | config: &AssistConfig, |
521 | resolve: bool, | 528 | resolve: AssistResolveStrategy, |
522 | frange: FileRange, | 529 | frange: FileRange, |
523 | ) -> Cancelable<Vec<Assist>> { | 530 | ) -> Cancelable<Vec<Assist>> { |
524 | self.with_db(|db| { | 531 | self.with_db(|db| { |
532 | let ssr_assists = ssr::ssr_assists(db, &resolve, frange); | ||
525 | let mut acc = Assist::get(db, config, resolve, frange); | 533 | let mut acc = Assist::get(db, config, resolve, frange); |
526 | ssr::add_ssr_assist(db, &mut acc, resolve, frange); | 534 | acc.extend(ssr_assists.into_iter()); |
527 | acc | 535 | acc |
528 | }) | 536 | }) |
529 | } | 537 | } |
@@ -532,10 +540,10 @@ impl Analysis { | |||
532 | pub fn diagnostics( | 540 | pub fn diagnostics( |
533 | &self, | 541 | &self, |
534 | config: &DiagnosticsConfig, | 542 | config: &DiagnosticsConfig, |
535 | resolve: bool, | 543 | resolve: AssistResolveStrategy, |
536 | file_id: FileId, | 544 | file_id: FileId, |
537 | ) -> Cancelable<Vec<Diagnostic>> { | 545 | ) -> Cancelable<Vec<Diagnostic>> { |
538 | self.with_db(|db| diagnostics::diagnostics(db, config, resolve, file_id)) | 546 | self.with_db(|db| diagnostics::diagnostics(db, config, &resolve, file_id)) |
539 | } | 547 | } |
540 | 548 | ||
541 | /// Convenience function to return assists + quick fixes for diagnostics | 549 | /// Convenience function to return assists + quick fixes for diagnostics |
@@ -543,7 +551,7 @@ impl Analysis { | |||
543 | &self, | 551 | &self, |
544 | assist_config: &AssistConfig, | 552 | assist_config: &AssistConfig, |
545 | diagnostics_config: &DiagnosticsConfig, | 553 | diagnostics_config: &DiagnosticsConfig, |
546 | resolve: bool, | 554 | resolve: AssistResolveStrategy, |
547 | frange: FileRange, | 555 | frange: FileRange, |
548 | ) -> Cancelable<Vec<Assist>> { | 556 | ) -> Cancelable<Vec<Assist>> { |
549 | let include_fixes = match &assist_config.allowed { | 557 | let include_fixes = match &assist_config.allowed { |
@@ -552,17 +560,21 @@ impl Analysis { | |||
552 | }; | 560 | }; |
553 | 561 | ||
554 | self.with_db(|db| { | 562 | self.with_db(|db| { |
563 | let ssr_assists = ssr::ssr_assists(db, &resolve, frange); | ||
564 | let diagnostic_assists = if include_fixes { | ||
565 | diagnostics::diagnostics(db, diagnostics_config, &resolve, frange.file_id) | ||
566 | .into_iter() | ||
567 | .filter_map(|it| it.fix) | ||
568 | .filter(|it| it.target.intersect(frange.range).is_some()) | ||
569 | .collect() | ||
570 | } else { | ||
571 | Vec::new() | ||
572 | }; | ||
573 | |||
555 | let mut res = Assist::get(db, assist_config, resolve, frange); | 574 | let mut res = Assist::get(db, assist_config, resolve, frange); |
556 | ssr::add_ssr_assist(db, &mut res, resolve, frange); | 575 | res.extend(ssr_assists.into_iter()); |
557 | 576 | res.extend(diagnostic_assists.into_iter()); | |
558 | if include_fixes { | 577 | |
559 | res.extend( | ||
560 | diagnostics::diagnostics(db, diagnostics_config, resolve, frange.file_id) | ||
561 | .into_iter() | ||
562 | .filter_map(|it| it.fix) | ||
563 | .filter(|it| it.target.intersect(frange.range).is_some()), | ||
564 | ); | ||
565 | } | ||
566 | res | 578 | res |
567 | }) | 579 | }) |
568 | } | 580 | } |