mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-27 20:42:04 +00:00
Allow hir::Param to refer to other entity params aside from functions
This commit is contained in:
parent
cd9e90cc71
commit
7c6f31a45b
9 changed files with 114 additions and 118 deletions
|
@ -1,7 +1,7 @@
|
|||
//! This module provides functionality for querying callable information about a token.
|
||||
|
||||
use either::Either;
|
||||
use hir::{Semantics, Type};
|
||||
use hir::{InFile, Semantics, Type};
|
||||
use parser::T;
|
||||
use syntax::{
|
||||
ast::{self, HasArgList, HasName},
|
||||
|
@ -13,7 +13,7 @@ use crate::RootDatabase;
|
|||
#[derive(Debug)]
|
||||
pub struct ActiveParameter {
|
||||
pub ty: Type,
|
||||
pub pat: Option<Either<ast::SelfParam, ast::Pat>>,
|
||||
pub src: Option<InFile<Either<ast::SelfParam, ast::Param>>>,
|
||||
}
|
||||
|
||||
impl ActiveParameter {
|
||||
|
@ -22,18 +22,18 @@ impl ActiveParameter {
|
|||
let (signature, active_parameter) = callable_for_token(sema, token)?;
|
||||
|
||||
let idx = active_parameter?;
|
||||
let mut params = signature.params(sema.db);
|
||||
let mut params = signature.params();
|
||||
if idx >= params.len() {
|
||||
cov_mark::hit!(too_many_arguments);
|
||||
return None;
|
||||
}
|
||||
let (pat, ty) = params.swap_remove(idx);
|
||||
Some(ActiveParameter { ty, pat })
|
||||
let param = params.swap_remove(idx);
|
||||
Some(ActiveParameter { ty: param.ty().clone(), src: param.source(sema.db) })
|
||||
}
|
||||
|
||||
pub fn ident(&self) -> Option<ast::Name> {
|
||||
self.pat.as_ref().and_then(|param| match param {
|
||||
Either::Right(ast::Pat::IdentPat(ident)) => ident.name(),
|
||||
self.src.as_ref().and_then(|param| match param.value.as_ref().right()?.pat()? {
|
||||
ast::Pat::IdentPat(ident) => ident.name(),
|
||||
_ => None,
|
||||
})
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue