inline_call: ensure correct whitespace in parameter types
This commit is contained in:
parent
1974e7490d
commit
57a454233c
@ -415,7 +415,24 @@ fn inline(
|
|||||||
let expr: &ast::Expr = expr;
|
let expr: &ast::Expr = expr;
|
||||||
|
|
||||||
let mut insert_let_stmt = || {
|
let mut insert_let_stmt = || {
|
||||||
let ty = sema.type_of_expr(expr).filter(TypeInfo::has_adjustment).and(param_ty.clone());
|
let param_ty = match param_ty {
|
||||||
|
None => None,
|
||||||
|
Some(param_ty) => {
|
||||||
|
if sema.hir_file_for(param_ty.syntax()).is_macro() {
|
||||||
|
if let Some(param_ty) =
|
||||||
|
ast::Type::cast(insert_ws_into(param_ty.syntax().clone()))
|
||||||
|
{
|
||||||
|
Some(param_ty)
|
||||||
|
} else {
|
||||||
|
Some(param_ty.clone_for_update())
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Some(param_ty.clone_for_update())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
let ty: Option<syntax::ast::Type> =
|
||||||
|
sema.type_of_expr(expr).filter(TypeInfo::has_adjustment).and(param_ty);
|
||||||
|
|
||||||
let is_self = param
|
let is_self = param
|
||||||
.name(sema.db)
|
.name(sema.db)
|
||||||
@ -1732,6 +1749,135 @@ pub fn main() {
|
|||||||
this.0 += 1;
|
this.0 += 1;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
"#,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn inline_call_with_reference_in_macros() {
|
||||||
|
check_assist(
|
||||||
|
inline_call,
|
||||||
|
r#"
|
||||||
|
fn _write_u64(s: &mut u64, x: u64) {
|
||||||
|
*s += x;
|
||||||
|
}
|
||||||
|
macro_rules! impl_write {
|
||||||
|
($(($ty:ident, $meth:ident),)*) => {$(
|
||||||
|
fn _hash(inner_self_: &u64, state: &mut u64) {
|
||||||
|
$meth(state, *inner_self_)
|
||||||
|
}
|
||||||
|
)*}
|
||||||
|
}
|
||||||
|
impl_write! { (u64, _write_u64), }
|
||||||
|
fn _hash2(self_: &u64, state: &mut u64) {
|
||||||
|
$0_hash(&self_, state);
|
||||||
|
}
|
||||||
|
"#,
|
||||||
|
r#"
|
||||||
|
fn _write_u64(s: &mut u64, x: u64) {
|
||||||
|
*s += x;
|
||||||
|
}
|
||||||
|
macro_rules! impl_write {
|
||||||
|
($(($ty:ident, $meth:ident),)*) => {$(
|
||||||
|
fn _hash(inner_self_: &u64, state: &mut u64) {
|
||||||
|
$meth(state, *inner_self_)
|
||||||
|
}
|
||||||
|
)*}
|
||||||
|
}
|
||||||
|
impl_write! { (u64, _write_u64), }
|
||||||
|
fn _hash2(self_: &u64, state: &mut u64) {
|
||||||
|
{
|
||||||
|
let inner_self_: &u64 = &self_;
|
||||||
|
let state: &mut u64 = state;
|
||||||
|
_write_u64(state, *inner_self_)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
"#,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn inline_call_with_reference_in_macro_generated_trait_impl() {
|
||||||
|
check_assist(
|
||||||
|
inline_call,
|
||||||
|
r#"
|
||||||
|
trait Hash2 {
|
||||||
|
fn hash2<H: Hasher2>(&self, state: &mut H);
|
||||||
|
}
|
||||||
|
|
||||||
|
trait Hasher2 {
|
||||||
|
fn write2_u64(&mut self, x: u64);
|
||||||
|
}
|
||||||
|
impl Hasher2 for u64 {
|
||||||
|
fn write2_u64(&mut self, x: u64) {
|
||||||
|
*self += x;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
macro_rules! impl_write {
|
||||||
|
($(($ty:ident, $meth:ident),)*) => {$(
|
||||||
|
impl Hash2 for $ty {
|
||||||
|
#[inline]
|
||||||
|
fn hash2<H: Hasher2>(&self, state: &mut H) {
|
||||||
|
state.$meth(*self)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)*}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl_write! { (u64, write2_u64), }
|
||||||
|
|
||||||
|
pub struct MyStruct {
|
||||||
|
value: u64,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Hash2 for MyStruct {
|
||||||
|
fn hash2<H: Hasher2>(&self, state: &mut H) {
|
||||||
|
self.value.$0hash2(state)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"#,
|
||||||
|
//
|
||||||
|
r#"
|
||||||
|
trait Hash2 {
|
||||||
|
fn hash2<H: Hasher2>(&self, state: &mut H);
|
||||||
|
}
|
||||||
|
|
||||||
|
trait Hasher2 {
|
||||||
|
fn write2_u64(&mut self, x: u64);
|
||||||
|
}
|
||||||
|
impl Hasher2 for u64 {
|
||||||
|
fn write2_u64(&mut self, x: u64) {
|
||||||
|
*self += x;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
macro_rules! impl_write {
|
||||||
|
($(($ty:ident, $meth:ident),)*) => {$(
|
||||||
|
impl Hash2 for $ty {
|
||||||
|
#[inline]
|
||||||
|
fn hash2<H: Hasher2>(&self, state: &mut H) {
|
||||||
|
state.$meth(*self)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)*}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl_write! { (u64, write2_u64), }
|
||||||
|
|
||||||
|
pub struct MyStruct {
|
||||||
|
value: u64,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Hash2 for MyStruct {
|
||||||
|
fn hash2<H: Hasher2>(&self, state: &mut H) {
|
||||||
|
{
|
||||||
|
let this = &self.value;
|
||||||
|
let state: &mut H = state;
|
||||||
|
state.write2_u64(*this)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
"#,
|
"#,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user