mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-03 07:04:49 +00:00
Add a way to resolve certain assists
This commit is contained in:
parent
eb741e895f
commit
e5cdcb8b12
10 changed files with 178 additions and 92 deletions
|
@ -87,7 +87,7 @@ pub use crate::{
|
|||
},
|
||||
};
|
||||
pub use hir::{Documentation, Semantics};
|
||||
pub use ide_assists::{Assist, AssistConfig, AssistId, AssistKind};
|
||||
pub use ide_assists::{Assist, AssistConfig, AssistId, AssistKind, AssistResolveStrategy};
|
||||
pub use ide_completion::{
|
||||
CompletionConfig, CompletionItem, CompletionItemKind, CompletionRelevance, ImportEdit,
|
||||
InsertTextFormat,
|
||||
|
@ -518,12 +518,13 @@ impl Analysis {
|
|||
pub fn assists(
|
||||
&self,
|
||||
config: &AssistConfig,
|
||||
resolve: bool,
|
||||
resolve: AssistResolveStrategy,
|
||||
frange: FileRange,
|
||||
) -> Cancelable<Vec<Assist>> {
|
||||
self.with_db(|db| {
|
||||
let ssr_assists = ssr::ssr_assists(db, resolve, frange);
|
||||
let mut acc = Assist::get(db, config, resolve, frange);
|
||||
ssr::add_ssr_assist(db, &mut acc, resolve, frange);
|
||||
acc.extend(ssr_assists.into_iter());
|
||||
acc
|
||||
})
|
||||
}
|
||||
|
@ -532,7 +533,7 @@ impl Analysis {
|
|||
pub fn diagnostics(
|
||||
&self,
|
||||
config: &DiagnosticsConfig,
|
||||
resolve: bool,
|
||||
resolve: AssistResolveStrategy,
|
||||
file_id: FileId,
|
||||
) -> Cancelable<Vec<Diagnostic>> {
|
||||
self.with_db(|db| diagnostics::diagnostics(db, config, resolve, file_id))
|
||||
|
@ -543,7 +544,7 @@ impl Analysis {
|
|||
&self,
|
||||
assist_config: &AssistConfig,
|
||||
diagnostics_config: &DiagnosticsConfig,
|
||||
resolve: bool,
|
||||
resolve: AssistResolveStrategy,
|
||||
frange: FileRange,
|
||||
) -> Cancelable<Vec<Assist>> {
|
||||
let include_fixes = match &assist_config.allowed {
|
||||
|
@ -552,17 +553,21 @@ impl Analysis {
|
|||
};
|
||||
|
||||
self.with_db(|db| {
|
||||
let mut res = Assist::get(db, assist_config, resolve, frange);
|
||||
ssr::add_ssr_assist(db, &mut res, resolve, frange);
|
||||
let ssr_assists = ssr::ssr_assists(db, resolve, frange);
|
||||
let diagnostic_assists = if include_fixes {
|
||||
diagnostics::diagnostics(db, diagnostics_config, resolve, frange.file_id)
|
||||
.into_iter()
|
||||
.filter_map(|it| it.fix)
|
||||
.filter(|it| it.target.intersect(frange.range).is_some())
|
||||
.collect()
|
||||
} else {
|
||||
Vec::new()
|
||||
};
|
||||
|
||||
let mut res = Assist::get(db, assist_config, resolve, frange);
|
||||
res.extend(ssr_assists.into_iter());
|
||||
res.extend(diagnostic_assists.into_iter());
|
||||
|
||||
if include_fixes {
|
||||
res.extend(
|
||||
diagnostics::diagnostics(db, diagnostics_config, resolve, frange.file_id)
|
||||
.into_iter()
|
||||
.filter_map(|it| it.fix)
|
||||
.filter(|it| it.target.intersect(frange.range).is_some()),
|
||||
);
|
||||
}
|
||||
res
|
||||
})
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue