aboutsummaryrefslogtreecommitdiff
path: root/crates/ide/src/lib.rs
diff options
context:
space:
mode:
authorKirill Bulatov <[email protected]>2021-05-03 15:08:09 +0100
committerKirill Bulatov <[email protected]>2021-05-03 15:14:49 +0100
commite5cdcb8b124f5b7d59950429787e760e46388f72 (patch)
tree8740336ea373603a48542d911da6765645a02627 /crates/ide/src/lib.rs
parenteb741e895f1a73420a401f2495c711afe37d9d19 (diff)
Add a way to resolve certain assists
Diffstat (limited to 'crates/ide/src/lib.rs')
-rw-r--r--crates/ide/src/lib.rs35
1 files changed, 20 insertions, 15 deletions
diff --git a/crates/ide/src/lib.rs b/crates/ide/src/lib.rs
index 99e45633e..6847b7e83 100644
--- a/crates/ide/src/lib.rs
+++ b/crates/ide/src/lib.rs
@@ -87,7 +87,7 @@ pub use crate::{
87 }, 87 },
88}; 88};
89pub use hir::{Documentation, Semantics}; 89pub use hir::{Documentation, Semantics};
90pub use ide_assists::{Assist, AssistConfig, AssistId, AssistKind}; 90pub use ide_assists::{Assist, AssistConfig, AssistId, AssistKind, AssistResolveStrategy};
91pub use ide_completion::{ 91pub use ide_completion::{
92 CompletionConfig, CompletionItem, CompletionItemKind, CompletionRelevance, ImportEdit, 92 CompletionConfig, CompletionItem, CompletionItemKind, CompletionRelevance, ImportEdit,
93 InsertTextFormat, 93 InsertTextFormat,
@@ -518,12 +518,13 @@ impl Analysis {
518 pub fn assists( 518 pub fn assists(
519 &self, 519 &self,
520 config: &AssistConfig, 520 config: &AssistConfig,
521 resolve: bool, 521 resolve: AssistResolveStrategy,
522 frange: FileRange, 522 frange: FileRange,
523 ) -> Cancelable<Vec<Assist>> { 523 ) -> Cancelable<Vec<Assist>> {
524 self.with_db(|db| { 524 self.with_db(|db| {
525 let ssr_assists = ssr::ssr_assists(db, resolve, frange);
525 let mut acc = Assist::get(db, config, resolve, frange); 526 let mut acc = Assist::get(db, config, resolve, frange);
526 ssr::add_ssr_assist(db, &mut acc, resolve, frange); 527 acc.extend(ssr_assists.into_iter());
527 acc 528 acc
528 }) 529 })
529 } 530 }
@@ -532,7 +533,7 @@ impl Analysis {
532 pub fn diagnostics( 533 pub fn diagnostics(
533 &self, 534 &self,
534 config: &DiagnosticsConfig, 535 config: &DiagnosticsConfig,
535 resolve: bool, 536 resolve: AssistResolveStrategy,
536 file_id: FileId, 537 file_id: FileId,
537 ) -> Cancelable<Vec<Diagnostic>> { 538 ) -> Cancelable<Vec<Diagnostic>> {
538 self.with_db(|db| diagnostics::diagnostics(db, config, resolve, file_id)) 539 self.with_db(|db| diagnostics::diagnostics(db, config, resolve, file_id))
@@ -543,7 +544,7 @@ impl Analysis {
543 &self, 544 &self,
544 assist_config: &AssistConfig, 545 assist_config: &AssistConfig,
545 diagnostics_config: &DiagnosticsConfig, 546 diagnostics_config: &DiagnosticsConfig,
546 resolve: bool, 547 resolve: AssistResolveStrategy,
547 frange: FileRange, 548 frange: FileRange,
548 ) -> Cancelable<Vec<Assist>> { 549 ) -> Cancelable<Vec<Assist>> {
549 let include_fixes = match &assist_config.allowed { 550 let include_fixes = match &assist_config.allowed {
@@ -552,17 +553,21 @@ impl Analysis {
552 }; 553 };
553 554
554 self.with_db(|db| { 555 self.with_db(|db| {
556 let ssr_assists = ssr::ssr_assists(db, resolve, frange);
557 let diagnostic_assists = if include_fixes {
558 diagnostics::diagnostics(db, diagnostics_config, resolve, frange.file_id)
559 .into_iter()
560 .filter_map(|it| it.fix)
561 .filter(|it| it.target.intersect(frange.range).is_some())
562 .collect()
563 } else {
564 Vec::new()
565 };
566
555 let mut res = Assist::get(db, assist_config, resolve, frange); 567 let mut res = Assist::get(db, assist_config, resolve, frange);
556 ssr::add_ssr_assist(db, &mut res, resolve, frange); 568 res.extend(ssr_assists.into_iter());
557 569 res.extend(diagnostic_assists.into_iter());
558 if include_fixes { 570
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 571 res
567 }) 572 })
568 } 573 }