aboutsummaryrefslogtreecommitdiff
path: root/crates/ide/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ide/src/lib.rs')
-rw-r--r--crates/ide/src/lib.rs44
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;
49mod typing; 49mod typing;
50mod markdown_remove; 50mod markdown_remove;
51mod doc_links; 51mod doc_links;
52mod view_crate_graph;
52 53
53use std::sync::Arc; 54use std::sync::Arc;
54 55
@@ -87,7 +88,9 @@ pub use crate::{
87 }, 88 },
88}; 89};
89pub use hir::{Documentation, Semantics}; 90pub use hir::{Documentation, Semantics};
90pub use ide_assists::{Assist, AssistConfig, AssistId, AssistKind}; 91pub use ide_assists::{
92 Assist, AssistConfig, AssistId, AssistKind, AssistResolveStrategy, SingleResolve,
93};
91pub use ide_completion::{ 94pub 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 }