mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-01 11:31:15 +00:00
fix: Stabilize sort order of runnables
This commit is contained in:
parent
fb8bc313ff
commit
e0d1fba739
@ -1,6 +1,6 @@
|
|||||||
use hir::{HasSource, InFile, InRealFile, Semantics};
|
use hir::{HasSource, InFile, InRealFile, Semantics};
|
||||||
use ide_db::{
|
use ide_db::{
|
||||||
defs::Definition, helpers::visit_file_defs, FileId, FilePosition, FileRange, FxHashSet,
|
defs::Definition, helpers::visit_file_defs, FileId, FilePosition, FileRange, FxIndexSet,
|
||||||
RootDatabase,
|
RootDatabase,
|
||||||
};
|
};
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
@ -55,7 +55,7 @@ pub(crate) fn annotations(
|
|||||||
config: &AnnotationConfig,
|
config: &AnnotationConfig,
|
||||||
file_id: FileId,
|
file_id: FileId,
|
||||||
) -> Vec<Annotation> {
|
) -> Vec<Annotation> {
|
||||||
let mut annotations = FxHashSet::default();
|
let mut annotations = FxIndexSet::default();
|
||||||
|
|
||||||
if config.annotate_runnables {
|
if config.annotate_runnables {
|
||||||
for runnable in runnables(db, file_id) {
|
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 {
|
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 {
|
Annotation {
|
||||||
range: 69..73,
|
range: 69..73,
|
||||||
kind: Runnable(
|
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 {
|
Annotation {
|
||||||
range: 61..65,
|
range: 61..65,
|
||||||
kind: Runnable(
|
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,
|
documentation::docs_from_attrs,
|
||||||
helpers::visit_file_defs,
|
helpers::visit_file_defs,
|
||||||
search::{FileReferenceNode, SearchScope},
|
search::{FileReferenceNode, SearchScope},
|
||||||
FilePosition, FxHashMap, FxHashSet, RootDatabase, SymbolKind,
|
FilePosition, FxHashMap, FxHashSet, FxIndexMap, RootDatabase, SymbolKind,
|
||||||
};
|
};
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
use smallvec::SmallVec;
|
use smallvec::SmallVec;
|
||||||
@ -130,7 +130,7 @@ pub(crate) fn runnables(db: &RootDatabase, file_id: FileId) -> Vec<Runnable> {
|
|||||||
let mut res = Vec::new();
|
let mut res = Vec::new();
|
||||||
// Record all runnables that come from macro expansions here instead.
|
// 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.
|
// 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| {
|
let mut add_opt = |runnable: Option<Runnable>, def| {
|
||||||
if let Some(runnable) = runnable.filter(|runnable| runnable.nav.file_id == file_id) {
|
if let Some(runnable) = runnable.filter(|runnable| runnable.nav.file_id == file_id) {
|
||||||
if let Some(def) = def {
|
if let Some(def) = def {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user