Merge pull request #19161 from Veykril/push-prmuyxlnxzxo
fix: Improve sort order of runnables
This commit is contained in:
commit
9e507b2117
2 changed files with 45 additions and 33 deletions
|
@ -1,6 +1,6 @@
|
|||
use hir::{HasSource, InFile, InRealFile, Semantics};
|
||||
use ide_db::{
|
||||
defs::Definition, helpers::visit_file_defs, FileId, FilePosition, FileRange, FxHashSet,
|
||||
defs::Definition, helpers::visit_file_defs, FileId, FilePosition, FileRange, FxIndexSet,
|
||||
RootDatabase,
|
||||
};
|
||||
use itertools::Itertools;
|
||||
|
@ -55,7 +55,7 @@ pub(crate) fn annotations(
|
|||
config: &AnnotationConfig,
|
||||
file_id: FileId,
|
||||
) -> Vec<Annotation> {
|
||||
let mut annotations = FxHashSet::default();
|
||||
let mut annotations = FxIndexSet::default();
|
||||
|
||||
if config.annotate_runnables {
|
||||
for runnable in runnables(db, file_id) {
|
||||
|
@ -170,7 +170,19 @@ pub(crate) fn annotations(
|
|||
}));
|
||||
}
|
||||
|
||||
annotations.into_iter().sorted_by_key(|a| (a.range.start(), a.range.end())).collect()
|
||||
annotations
|
||||
.into_iter()
|
||||
.sorted_by_key(|a| {
|
||||
(
|
||||
a.range.start(),
|
||||
a.range.end(),
|
||||
match &a.kind {
|
||||
AnnotationKind::Runnable(runnable) => Some(runnable.nav.name.clone()),
|
||||
_ => None,
|
||||
},
|
||||
)
|
||||
})
|
||||
.collect()
|
||||
}
|
||||
|
||||
pub(crate) fn resolve_annotation(db: &RootDatabase, mut annotation: Annotation) -> Annotation {
|
||||
|
@ -535,6 +547,20 @@ fn main() {
|
|||
),
|
||||
},
|
||||
},
|
||||
Annotation {
|
||||
range: 69..73,
|
||||
kind: HasReferences {
|
||||
pos: FilePositionWrapper {
|
||||
file_id: FileId(
|
||||
0,
|
||||
),
|
||||
offset: 69,
|
||||
},
|
||||
data: Some(
|
||||
[],
|
||||
),
|
||||
},
|
||||
},
|
||||
Annotation {
|
||||
range: 69..73,
|
||||
kind: Runnable(
|
||||
|
@ -559,20 +585,6 @@ fn main() {
|
|||
},
|
||||
),
|
||||
},
|
||||
Annotation {
|
||||
range: 69..73,
|
||||
kind: HasReferences {
|
||||
pos: FilePositionWrapper {
|
||||
file_id: FileId(
|
||||
0,
|
||||
),
|
||||
offset: 69,
|
||||
},
|
||||
data: Some(
|
||||
[],
|
||||
),
|
||||
},
|
||||
},
|
||||
]
|
||||
"#]],
|
||||
);
|
||||
|
@ -717,6 +729,20 @@ fn main() {
|
|||
),
|
||||
},
|
||||
},
|
||||
Annotation {
|
||||
range: 61..65,
|
||||
kind: HasReferences {
|
||||
pos: FilePositionWrapper {
|
||||
file_id: FileId(
|
||||
0,
|
||||
),
|
||||
offset: 61,
|
||||
},
|
||||
data: Some(
|
||||
[],
|
||||
),
|
||||
},
|
||||
},
|
||||
Annotation {
|
||||
range: 61..65,
|
||||
kind: Runnable(
|
||||
|
@ -741,20 +767,6 @@ fn main() {
|
|||
},
|
||||
),
|
||||
},
|
||||
Annotation {
|
||||
range: 61..65,
|
||||
kind: HasReferences {
|
||||
pos: FilePositionWrapper {
|
||||
file_id: FileId(
|
||||
0,
|
||||
),
|
||||
offset: 61,
|
||||
},
|
||||
data: Some(
|
||||
[],
|
||||
),
|
||||
},
|
||||
},
|
||||
]
|
||||
"#]],
|
||||
);
|
||||
|
|
|
@ -13,7 +13,7 @@ use ide_db::{
|
|||
documentation::docs_from_attrs,
|
||||
helpers::visit_file_defs,
|
||||
search::{FileReferenceNode, SearchScope},
|
||||
FilePosition, FxHashMap, FxHashSet, RootDatabase, SymbolKind,
|
||||
FilePosition, FxHashMap, FxHashSet, FxIndexMap, RootDatabase, SymbolKind,
|
||||
};
|
||||
use itertools::Itertools;
|
||||
use smallvec::SmallVec;
|
||||
|
@ -130,7 +130,7 @@ pub(crate) fn runnables(db: &RootDatabase, file_id: FileId) -> Vec<Runnable> {
|
|||
let mut res = Vec::new();
|
||||
// Record all runnables that come from macro expansions here instead.
|
||||
// In case an expansion creates multiple runnables we want to name them to avoid emitting a bunch of equally named runnables.
|
||||
let mut in_macro_expansion = FxHashMap::<hir::HirFileId, Vec<Runnable>>::default();
|
||||
let mut in_macro_expansion = FxIndexMap::<hir::HirFileId, Vec<Runnable>>::default();
|
||||
let mut add_opt = |runnable: Option<Runnable>, def| {
|
||||
if let Some(runnable) = runnable.filter(|runnable| runnable.nav.file_id == file_id) {
|
||||
if let Some(def) = def {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue