Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 10 additions & 10 deletions crates/ide/src/annotations.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,15 @@ mod fn_references;
//
// ![Annotations](https://user-images.githubusercontent.com/48062697/113020672-b7c34f00-917a-11eb-8f6e-858735660a0e.png)
#[derive(Debug, Hash, PartialEq, Eq)]
pub struct Annotation {
pub struct Annotation<'db> {
pub range: TextRange,
pub kind: AnnotationKind,
pub kind: AnnotationKind<'db>,
}

#[derive(Debug, Hash, PartialEq, Eq)]
pub enum AnnotationKind {
Runnable(Runnable),
HasImpls { pos: FilePosition, data: Option<Vec<NavigationTarget>> },
pub enum AnnotationKind<'db> {
Runnable(Runnable<'db>),
HasImpls { pos: FilePosition, data: Option<Vec<NavigationTarget<'db>>> },
HasReferences { pos: FilePosition, data: Option<Vec<FileRange>> },
}

Expand All @@ -57,7 +57,7 @@ pub(crate) fn annotations(
db: &RootDatabase,
config: &AnnotationConfig<'_>,
file_id: FileId,
) -> Vec<Annotation> {
) -> Vec<Annotation<'static>> {
let mut annotations = FxIndexSet::default();

if config.annotate_runnables {
Expand Down Expand Up @@ -198,11 +198,11 @@ pub(crate) fn annotations(
.collect()
}

pub(crate) fn resolve_annotation(
pub(crate) fn resolve_annotation<'db>(
db: &RootDatabase,
config: &AnnotationConfig<'_>,
mut annotation: Annotation,
) -> Annotation {
mut annotation: Annotation<'db>,
) -> Annotation<'db> {
match annotation.kind {
AnnotationKind::HasImpls { pos, ref mut data } => {
let goto_implementation_config = GotoImplementationConfig {
Expand Down Expand Up @@ -274,7 +274,7 @@ mod tests {
) {
let (analysis, file_id) = fixture::file(ra_fixture);

let annotations: Vec<Annotation> = analysis
let annotations: Vec<Annotation<'_>> = analysis
.annotations(config, file_id)
.unwrap()
.into_iter()
Expand Down
8 changes: 4 additions & 4 deletions crates/ide/src/call_hierarchy.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ use crate::{

#[derive(Debug, Clone)]
pub struct CallItem {
pub target: NavigationTarget,
pub target: NavigationTarget<'static>,
pub ranges: Vec<FileRange>,
}

Expand All @@ -33,7 +33,7 @@ pub(crate) fn call_hierarchy(
db: &RootDatabase,
position: FilePosition,
config: &CallHierarchyConfig<'_>,
) -> Option<RangeInfo<Vec<NavigationTarget>>> {
) -> Option<RangeInfo<Vec<NavigationTarget<'static>>>> {
goto_definition::goto_definition(
db,
position,
Expand Down Expand Up @@ -159,11 +159,11 @@ pub(crate) fn outgoing_calls(

#[derive(Default)]
struct CallLocations {
funcs: FxIndexMap<NavigationTarget, Vec<FileRange>>,
funcs: FxIndexMap<NavigationTarget<'static>, Vec<FileRange>>,
}

impl CallLocations {
fn add(&mut self, target: NavigationTarget, range: FileRange) {
fn add(&mut self, target: NavigationTarget<'static>, range: FileRange) {
self.funcs.entry(target).or_default().push(range);
}

Expand Down
7 changes: 6 additions & 1 deletion crates/ide/src/child_modules.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,10 @@ use crate::NavigationTarget;
// | VS Code | **rust-analyzer: Locate child modules** |

/// This returns `Vec` because a module may be included from several places.
pub(crate) fn child_modules(db: &RootDatabase, position: FilePosition) -> Vec<NavigationTarget> {
pub(crate) fn child_modules(
db: &RootDatabase,
position: FilePosition,
) -> Vec<NavigationTarget<'static>> {
let sema = Semantics::new(db);
let source_file = sema.parse_guess_edition(position.file_id);
// First go to the parent module which contains the cursor
Expand All @@ -29,13 +32,15 @@ pub(crate) fn child_modules(db: &RootDatabase, position: FilePosition) -> Vec<Na
.into_iter()
.flat_map(|module| module.children(db))
.map(|module| NavigationTarget::from_module_to_decl(db, module).call_site())
.map(NavigationTarget::into_owned)
.collect()
}
None => {
// Return all the child modules inside the source file
sema.file_to_module_defs(position.file_id)
.flat_map(|module| module.children(db))
.map(|module| NavigationTarget::from_module_to_decl(db, module).call_site())
.map(NavigationTarget::into_owned)
.collect()
}
}
Expand Down
9 changes: 6 additions & 3 deletions crates/ide/src/goto_declaration.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,14 @@ pub(crate) fn goto_declaration(
db: &RootDatabase,
position @ FilePosition { file_id, offset }: FilePosition,
config: &GotoDefinitionConfig<'_>,
) -> Option<RangeInfo<Vec<NavigationTarget>>> {
) -> Option<RangeInfo<Vec<NavigationTarget<'static>>>> {
let sema = Semantics::new(db);
let file = sema.parse_guess_edition(file_id).syntax().clone();
let original_token = file
.token_at_offset(offset)
.find(|it| matches!(it.kind(), IDENT | T![self] | T![super] | T![crate] | T![Self]))?;
let range = original_token.text_range();
let info: Vec<NavigationTarget> = sema
let info: Vec<NavigationTarget<'static>> = sema
.descend_into_macros_no_opaque(original_token, false)
.iter()
.filter_map(|token| {
Expand All @@ -53,7 +53,10 @@ pub(crate) fn goto_declaration(
};
let assoc = match def? {
Definition::Module(module) => {
return Some(NavigationTarget::from_module_to_decl(db, module));
return Some(
NavigationTarget::from_module_to_decl(db, module)
.map(NavigationTarget::into_owned),
);
}
Definition::Const(c) => c.as_assoc_item(db),
Definition::TypeAlias(ta) => ta.as_assoc_item(db),
Expand Down
29 changes: 16 additions & 13 deletions crates/ide/src/goto_definition.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ pub(crate) fn goto_definition(
db: &RootDatabase,
FilePosition { file_id, offset }: FilePosition,
config: &GotoDefinitionConfig<'_>,
) -> Option<RangeInfo<Vec<NavigationTarget>>> {
) -> Option<RangeInfo<Vec<NavigationTarget<'static>>>> {
let sema = &Semantics::new(db);
let file = sema.parse_guess_edition(file_id).syntax().clone();
let edition = sema.attach_first_edition(file_id).edition(db);
Expand Down Expand Up @@ -202,7 +202,7 @@ fn goto_question_mark_conversions(
fn find_definition_for_known_blanket_dual_impls(
sema: &Semantics<'_, RootDatabase>,
original_token: &SyntaxToken,
) -> Option<Vec<NavigationTarget>> {
) -> Option<Vec<NavigationTarget<'static>>> {
let method_call = ast::MethodCallExpr::cast(original_token.parent()?.parent()?)?;
let callable = sema.resolve_method_call_as_callable(&method_call)?;
let CallableKind::Function(f) = callable.kind() else { return None };
Expand Down Expand Up @@ -273,7 +273,7 @@ fn find_definition_for_known_blanket_dual_impls(
fn find_definition_for_comparison_operators(
sema: &Semantics<'_, RootDatabase>,
original_token: &SyntaxToken,
) -> Option<Vec<NavigationTarget>> {
) -> Option<Vec<NavigationTarget<'static>>> {
let bin_expr = ast::BinExpr::cast(original_token.parent()?)?;

let f = sema.resolve_bin_expr(&bin_expr)?;
Expand Down Expand Up @@ -329,7 +329,7 @@ fn try_lookup_include_path(
sema: &Semantics<'_, RootDatabase>,
token: InFile<ast::String>,
file_id: FileId,
) -> Option<NavigationTarget> {
) -> Option<NavigationTarget<'static>> {
let file = token.file_id.macro_file()?;

// Check that we are in the eager argument expansion of an include macro
Expand Down Expand Up @@ -359,7 +359,7 @@ fn try_lookup_include_path(
fn try_lookup_macro_def_in_macro_use(
sema: &Semantics<'_, RootDatabase>,
token: SyntaxToken,
) -> Option<NavigationTarget> {
) -> Option<NavigationTarget<'static>> {
let extern_crate = token.parent()?.ancestors().find_map(ast::ExternCrate::cast)?;
let extern_crate = sema.to_def(&extern_crate)?;
let krate = extern_crate.resolved_crate(sema.db)?;
Expand All @@ -386,7 +386,7 @@ fn try_lookup_macro_def_in_macro_use(
fn try_filter_trait_item_definition(
sema: &Semantics<'_, RootDatabase>,
def: &Definition,
) -> Option<Vec<NavigationTarget>> {
) -> Option<Vec<NavigationTarget<'static>>> {
let db = sema.db;
let assoc = def.as_assoc_item(db)?;
match assoc {
Expand All @@ -408,7 +408,7 @@ fn try_filter_trait_item_definition(
fn handle_control_flow_keywords(
sema: &Semantics<'_, RootDatabase>,
token: &SyntaxToken,
) -> Option<Vec<NavigationTarget>> {
) -> Option<Vec<NavigationTarget<'static>>> {
match token.kind() {
// For `fn` / `loop` / `while` / `for` / `async` / `match`, return the keyword it self,
// so that VSCode will find the references when using `ctrl + click`
Expand Down Expand Up @@ -456,7 +456,7 @@ pub(crate) fn find_fn_or_blocks(
fn nav_for_exit_points(
sema: &Semantics<'_, RootDatabase>,
token: &SyntaxToken,
) -> Option<Vec<NavigationTarget>> {
) -> Option<Vec<NavigationTarget<'static>>> {
let db = sema.db;
let token_kind = token.kind();

Expand All @@ -482,7 +482,7 @@ fn nav_for_exit_points(
.map(|(frange, _)| frange);

if let Some(FileRange { file_id, range }) = focus_frange {
let contains_frange = |nav: &NavigationTarget| {
let contains_frange = |nav: &NavigationTarget<'_>| {
nav.file_id == file_id.file_id(db) && nav.full_range.contains_range(range)
};

Expand Down Expand Up @@ -563,7 +563,7 @@ pub(crate) fn find_branch_root(
fn nav_for_branch_exit_points(
sema: &Semantics<'_, RootDatabase>,
token: &SyntaxToken,
) -> Option<Vec<NavigationTarget>> {
) -> Option<Vec<NavigationTarget<'static>>> {
let db = sema.db;

let navs = match token.kind() {
Expand Down Expand Up @@ -615,7 +615,7 @@ fn nav_for_branch_exit_points(
fn nav_for_break_points(
sema: &Semantics<'_, RootDatabase>,
token: &SyntaxToken,
) -> Option<Vec<NavigationTarget>> {
) -> Option<Vec<NavigationTarget<'static>>> {
let db = sema.db;

let navs = find_loops(sema, token)?
Expand All @@ -639,15 +639,18 @@ fn nav_for_break_points(
Some(navs)
}

fn def_to_nav(sema: &Semantics<'_, RootDatabase>, def: Definition) -> Vec<NavigationTarget> {
fn def_to_nav(
sema: &Semantics<'_, RootDatabase>,
def: Definition,
) -> Vec<NavigationTarget<'static>> {
def.try_to_nav(sema).map(|it| it.collect()).unwrap_or_default()
}

fn expr_to_nav(
db: &RootDatabase,
InFile { file_id, value }: InFile<ast::Expr>,
focus_range: Option<TextRange>,
) -> UpmappingResult<NavigationTarget> {
) -> UpmappingResult<NavigationTarget<'static>> {
let kind = SymbolKind::Label;

let value_range = value.syntax().text_range();
Expand Down
11 changes: 7 additions & 4 deletions crates/ide/src/goto_implementation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ pub(crate) fn goto_implementation(
db: &RootDatabase,
config: &GotoImplementationConfig,
FilePosition { file_id, offset }: FilePosition,
) -> Option<RangeInfo<Vec<NavigationTarget>>> {
) -> Option<RangeInfo<Vec<NavigationTarget<'static>>>> {
let sema = Semantics::new(db);
let source_file = sema.parse_guess_edition(file_id);
let syntax = source_file.syntax().clone();
Expand Down Expand Up @@ -100,7 +100,10 @@ pub(crate) fn goto_implementation(
Some(RangeInfo { range, info: navs })
}

fn impls_for_ty(sema: &Semantics<'_, RootDatabase>, ty: hir::Type<'_>) -> Vec<NavigationTarget> {
fn impls_for_ty(
sema: &Semantics<'_, RootDatabase>,
ty: hir::Type<'_>,
) -> Vec<NavigationTarget<'static>> {
Impl::all_for_type(sema.db, ty)
.into_iter()
.filter_map(|imp| imp.try_to_nav(sema))
Expand All @@ -111,7 +114,7 @@ fn impls_for_ty(sema: &Semantics<'_, RootDatabase>, ty: hir::Type<'_>) -> Vec<Na
fn impls_for_trait(
sema: &Semantics<'_, RootDatabase>,
trait_: hir::Trait,
) -> Vec<NavigationTarget> {
) -> Vec<NavigationTarget<'static>> {
Impl::all_for_trait(sema.db, trait_)
.into_iter()
.filter_map(|imp| imp.try_to_nav(sema))
Expand All @@ -123,7 +126,7 @@ fn impls_for_trait_item(
sema: &Semantics<'_, RootDatabase>,
trait_: hir::Trait,
fun_name: hir::Name,
) -> Vec<NavigationTarget> {
) -> Vec<NavigationTarget<'static>> {
Impl::all_for_trait(sema.db, trait_)
.into_iter()
.filter_map(|imp| {
Expand Down
2 changes: 1 addition & 1 deletion crates/ide/src/goto_type_definition.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ use crate::{FilePosition, NavigationTarget, RangeInfo, TryToNav};
pub(crate) fn goto_type_definition(
db: &RootDatabase,
FilePosition { file_id, offset }: FilePosition,
) -> Option<RangeInfo<Vec<NavigationTarget>>> {
) -> Option<RangeInfo<Vec<NavigationTarget<'static>>>> {
let sema = hir::Semantics::new(db);

let file: ast::SourceFile = sema.parse_guess_edition(file_id);
Expand Down
Loading
Loading