aboutsummaryrefslogtreecommitdiff
path: root/crates/ide_assists/src/handlers/extract_function.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ide_assists/src/handlers/extract_function.rs')
-rw-r--r--crates/ide_assists/src/handlers/extract_function.rs747
1 files changed, 429 insertions, 318 deletions
diff --git a/crates/ide_assists/src/handlers/extract_function.rs b/crates/ide_assists/src/handlers/extract_function.rs
index f2be091f4..870d4f665 100644
--- a/crates/ide_assists/src/handlers/extract_function.rs
+++ b/crates/ide_assists/src/handlers/extract_function.rs
@@ -109,10 +109,15 @@ pub(crate) fn extract_function(acc: &mut Assists, ctx: &AssistContext) -> Option
109 109
110 let new_indent = IndentLevel::from_node(&insert_after); 110 let new_indent = IndentLevel::from_node(&insert_after);
111 let old_indent = fun.body.indent_level(); 111 let old_indent = fun.body.indent_level();
112 let body_contains_await = body_contains_await(&fun.body);
112 113
113 builder.replace(target_range, format_replacement(ctx, &fun, old_indent)); 114 builder.replace(
115 target_range,
116 format_replacement(ctx, &fun, old_indent, body_contains_await),
117 );
114 118
115 let fn_def = format_function(ctx, module, &fun, old_indent, new_indent); 119 let fn_def =
120 format_function(ctx, module, &fun, old_indent, new_indent, body_contains_await);
116 let insert_offset = insert_after.text_range().end(); 121 let insert_offset = insert_after.text_range().end();
117 match ctx.config.snippet_cap { 122 match ctx.config.snippet_cap {
118 Some(cap) => builder.insert_snippet(cap, insert_offset, fn_def), 123 Some(cap) => builder.insert_snippet(cap, insert_offset, fn_def),
@@ -954,7 +959,12 @@ fn scope_for_fn_insertion_node(node: &SyntaxNode, anchor: Anchor) -> Option<Synt
954 last_ancestor 959 last_ancestor
955} 960}
956 961
957fn format_replacement(ctx: &AssistContext, fun: &Function, indent: IndentLevel) -> String { 962fn format_replacement(
963 ctx: &AssistContext,
964 fun: &Function,
965 indent: IndentLevel,
966 body_contains_await: bool,
967) -> String {
958 let ret_ty = fun.return_type(ctx); 968 let ret_ty = fun.return_type(ctx);
959 969
960 let args = fun.params.iter().map(|param| param.to_arg(ctx)); 970 let args = fun.params.iter().map(|param| param.to_arg(ctx));
@@ -994,6 +1004,9 @@ fn format_replacement(ctx: &AssistContext, fun: &Function, indent: IndentLevel)
994 } 1004 }
995 } 1005 }
996 format_to!(buf, "{}", expr); 1006 format_to!(buf, "{}", expr);
1007 if body_contains_await {
1008 buf.push_str(".await");
1009 }
997 if fun.ret_ty.is_unit() 1010 if fun.ret_ty.is_unit()
998 && (!fun.vars_defined_in_body_and_outlive.is_empty() || !expr.is_block_like()) 1011 && (!fun.vars_defined_in_body_and_outlive.is_empty() || !expr.is_block_like())
999 { 1012 {
@@ -1122,12 +1135,13 @@ fn format_function(
1122 fun: &Function, 1135 fun: &Function,
1123 old_indent: IndentLevel, 1136 old_indent: IndentLevel,
1124 new_indent: IndentLevel, 1137 new_indent: IndentLevel,
1138 body_contains_await: bool,
1125) -> String { 1139) -> String {
1126 let mut fn_def = String::new(); 1140 let mut fn_def = String::new();
1127 let params = make_param_list(ctx, module, fun); 1141 let params = make_param_list(ctx, module, fun);
1128 let ret_ty = make_ret_ty(ctx, module, fun); 1142 let ret_ty = make_ret_ty(ctx, module, fun);
1129 let body = make_body(ctx, old_indent, new_indent, fun); 1143 let body = make_body(ctx, old_indent, new_indent, fun);
1130 let async_kw = if body_contains_await(&fun.body) { "async " } else { "" }; 1144 let async_kw = if body_contains_await { "async " } else { "" };
1131 match ctx.config.snippet_cap { 1145 match ctx.config.snippet_cap {
1132 Some(_) => format_to!(fn_def, "\n\n{}{}fn $0{}{}", new_indent, async_kw, fun.name, params), 1146 Some(_) => format_to!(fn_def, "\n\n{}{}fn $0{}{}", new_indent, async_kw, fun.name, params),
1133 None => format_to!(fn_def, "\n\n{}{}fn {}{}", new_indent, async_kw, fun.name, params), 1147 None => format_to!(fn_def, "\n\n{}{}fn {}{}", new_indent, async_kw, fun.name, params),
@@ -1384,7 +1398,7 @@ fn fix_param_usages(ctx: &AssistContext, params: &[Param], syntax: &SyntaxNode)
1384 for (param, usages) in usages_for_param { 1398 for (param, usages) in usages_for_param {
1385 for usage in usages { 1399 for usage in usages {
1386 match usage.syntax().ancestors().skip(1).find_map(ast::Expr::cast) { 1400 match usage.syntax().ancestors().skip(1).find_map(ast::Expr::cast) {
1387 Some(ast::Expr::MethodCallExpr(_)) | Some(ast::Expr::FieldExpr(_)) => { 1401 Some(ast::Expr::MethodCallExpr(_) | ast::Expr::FieldExpr(_)) => {
1388 // do nothing 1402 // do nothing
1389 } 1403 }
1390 Some(ast::Expr::RefExpr(node)) 1404 Some(ast::Expr::RefExpr(node))
@@ -1501,7 +1515,8 @@ mod tests {
1501 r#" 1515 r#"
1502fn foo() { 1516fn foo() {
1503 foo($01 + 1$0); 1517 foo($01 + 1$0);
1504}"#, 1518}
1519"#,
1505 r#" 1520 r#"
1506fn foo() { 1521fn foo() {
1507 foo(fun_name()); 1522 foo(fun_name());
@@ -1509,7 +1524,8 @@ fn foo() {
1509 1524
1510fn $0fun_name() -> i32 { 1525fn $0fun_name() -> i32 {
1511 1 + 1 1526 1 + 1
1512}"#, 1527}
1528"#,
1513 ); 1529 );
1514 } 1530 }
1515 1531
@@ -1522,7 +1538,8 @@ mod bar {
1522 fn foo() { 1538 fn foo() {
1523 foo($01 + 1$0); 1539 foo($01 + 1$0);
1524 } 1540 }
1525}"#, 1541}
1542"#,
1526 r#" 1543 r#"
1527mod bar { 1544mod bar {
1528 fn foo() { 1545 fn foo() {
@@ -1532,7 +1549,8 @@ mod bar {
1532 fn $0fun_name() -> i32 { 1549 fn $0fun_name() -> i32 {
1533 1 + 1 1550 1 + 1
1534 } 1551 }
1535}"#, 1552}
1553"#,
1536 ); 1554 );
1537 } 1555 }
1538 1556
@@ -1543,7 +1561,8 @@ mod bar {
1543 r#" 1561 r#"
1544fn foo() { 1562fn foo() {
1545 $0{ 1 + 1 }$0; 1563 $0{ 1 + 1 }$0;
1546}"#, 1564}
1565"#,
1547 r#" 1566 r#"
1548fn foo() { 1567fn foo() {
1549 fun_name(); 1568 fun_name();
@@ -1551,7 +1570,8 @@ fn foo() {
1551 1570
1552fn $0fun_name() -> i32 { 1571fn $0fun_name() -> i32 {
1553 1 + 1 1572 1 + 1
1554}"#, 1573}
1574"#,
1555 ); 1575 );
1556 } 1576 }
1557 1577
@@ -1564,7 +1584,8 @@ fn foo() -> i32 {
1564 let k = 1; 1584 let k = 1;
1565 $0let m = 1; 1585 $0let m = 1;
1566 m + 1$0 1586 m + 1$0
1567}"#, 1587}
1588"#,
1568 r#" 1589 r#"
1569fn foo() -> i32 { 1590fn foo() -> i32 {
1570 let k = 1; 1591 let k = 1;
@@ -1574,7 +1595,8 @@ fn foo() -> i32 {
1574fn $0fun_name() -> i32 { 1595fn $0fun_name() -> i32 {
1575 let m = 1; 1596 let m = 1;
1576 m + 1 1597 m + 1
1577}"#, 1598}
1599"#,
1578 ); 1600 );
1579 } 1601 }
1580 1602
@@ -1588,7 +1610,8 @@ fn foo() {
1588 $0let m = 1; 1610 $0let m = 1;
1589 let n = m + 1;$0 1611 let n = m + 1;$0
1590 let g = 5; 1612 let g = 5;
1591}"#, 1613}
1614"#,
1592 r#" 1615 r#"
1593fn foo() { 1616fn foo() {
1594 let k = 3; 1617 let k = 3;
@@ -1599,7 +1622,8 @@ fn foo() {
1599fn $0fun_name() { 1622fn $0fun_name() {
1600 let m = 1; 1623 let m = 1;
1601 let n = m + 1; 1624 let n = m + 1;
1602}"#, 1625}
1626"#,
1603 ); 1627 );
1604 } 1628 }
1605 1629
@@ -1610,7 +1634,8 @@ fn $0fun_name() {
1610 r#" 1634 r#"
1611fn foo() { 1635fn foo() {
1612 $0if true { }$0 1636 $0if true { }$0
1613}"#, 1637}
1638"#,
1614 r#" 1639 r#"
1615fn foo() { 1640fn foo() {
1616 fun_name(); 1641 fun_name();
@@ -1618,7 +1643,8 @@ fn foo() {
1618 1643
1619fn $0fun_name() { 1644fn $0fun_name() {
1620 if true { } 1645 if true { }
1621}"#, 1646}
1647"#,
1622 ); 1648 );
1623 } 1649 }
1624 1650
@@ -1629,7 +1655,8 @@ fn $0fun_name() {
1629 r#" 1655 r#"
1630fn foo() -> i32 { 1656fn foo() -> i32 {
1631 $0if true { 1 } else { 2 }$0 1657 $0if true { 1 } else { 2 }$0
1632}"#, 1658}
1659"#,
1633 r#" 1660 r#"
1634fn foo() -> i32 { 1661fn foo() -> i32 {
1635 fun_name() 1662 fun_name()
@@ -1637,7 +1664,8 @@ fn foo() -> i32 {
1637 1664
1638fn $0fun_name() -> i32 { 1665fn $0fun_name() -> i32 {
1639 if true { 1 } else { 2 } 1666 if true { 1 } else { 2 }
1640}"#, 1667}
1668"#,
1641 ); 1669 );
1642 } 1670 }
1643 1671
@@ -1648,7 +1676,8 @@ fn $0fun_name() -> i32 {
1648 r#" 1676 r#"
1649fn foo() -> i32 { 1677fn foo() -> i32 {
1650 $0if let true = false { 1 } else { 2 }$0 1678 $0if let true = false { 1 } else { 2 }$0
1651}"#, 1679}
1680"#,
1652 r#" 1681 r#"
1653fn foo() -> i32 { 1682fn foo() -> i32 {
1654 fun_name() 1683 fun_name()
@@ -1656,7 +1685,8 @@ fn foo() -> i32 {
1656 1685
1657fn $0fun_name() -> i32 { 1686fn $0fun_name() -> i32 {
1658 if let true = false { 1 } else { 2 } 1687 if let true = false { 1 } else { 2 }
1659}"#, 1688}
1689"#,
1660 ); 1690 );
1661 } 1691 }
1662 1692
@@ -1670,7 +1700,8 @@ fn foo() -> i32 {
1670 true => 1, 1700 true => 1,
1671 false => 2, 1701 false => 2,
1672 }$0 1702 }$0
1673}"#, 1703}
1704"#,
1674 r#" 1705 r#"
1675fn foo() -> i32 { 1706fn foo() -> i32 {
1676 fun_name() 1707 fun_name()
@@ -1681,7 +1712,8 @@ fn $0fun_name() -> i32 {
1681 true => 1, 1712 true => 1,
1682 false => 2, 1713 false => 2,
1683 } 1714 }
1684}"#, 1715}
1716"#,
1685 ); 1717 );
1686 } 1718 }
1687 1719
@@ -1692,7 +1724,8 @@ fn $0fun_name() -> i32 {
1692 r#" 1724 r#"
1693fn foo() { 1725fn foo() {
1694 $0while true { }$0 1726 $0while true { }$0
1695}"#, 1727}
1728"#,
1696 r#" 1729 r#"
1697fn foo() { 1730fn foo() {
1698 fun_name(); 1731 fun_name();
@@ -1700,7 +1733,8 @@ fn foo() {
1700 1733
1701fn $0fun_name() { 1734fn $0fun_name() {
1702 while true { } 1735 while true { }
1703}"#, 1736}
1737"#,
1704 ); 1738 );
1705 } 1739 }
1706 1740
@@ -1711,7 +1745,8 @@ fn $0fun_name() {
1711 r#" 1745 r#"
1712fn foo() { 1746fn foo() {
1713 $0for v in &[0, 1] { }$0 1747 $0for v in &[0, 1] { }$0
1714}"#, 1748}
1749"#,
1715 r#" 1750 r#"
1716fn foo() { 1751fn foo() {
1717 fun_name(); 1752 fun_name();
@@ -1719,7 +1754,8 @@ fn foo() {
1719 1754
1720fn $0fun_name() { 1755fn $0fun_name() {
1721 for v in &[0, 1] { } 1756 for v in &[0, 1] { }
1722}"#, 1757}
1758"#,
1723 ); 1759 );
1724 } 1760 }
1725 1761
@@ -1732,7 +1768,8 @@ fn foo() {
1732 $0loop { 1768 $0loop {
1733 let m = 1; 1769 let m = 1;
1734 }$0 1770 }$0
1735}"#, 1771}
1772"#,
1736 r#" 1773 r#"
1737fn foo() { 1774fn foo() {
1738 fun_name() 1775 fun_name()
@@ -1742,7 +1779,8 @@ fn $0fun_name() -> ! {
1742 loop { 1779 loop {
1743 let m = 1; 1780 let m = 1;
1744 } 1781 }
1745}"#, 1782}
1783"#,
1746 ); 1784 );
1747 } 1785 }
1748 1786
@@ -1756,7 +1794,8 @@ fn foo() {
1756 let m = 1; 1794 let m = 1;
1757 break m; 1795 break m;
1758 }$0; 1796 }$0;
1759}"#, 1797}
1798"#,
1760 r#" 1799 r#"
1761fn foo() { 1800fn foo() {
1762 let v = fun_name(); 1801 let v = fun_name();
@@ -1767,7 +1806,8 @@ fn $0fun_name() -> i32 {
1767 let m = 1; 1806 let m = 1;
1768 break m; 1807 break m;
1769 } 1808 }
1770}"#, 1809}
1810"#,
1771 ); 1811 );
1772 } 1812 }
1773 1813
@@ -1781,7 +1821,8 @@ fn foo() {
1781 Some(x) => x, 1821 Some(x) => x,
1782 None => 0, 1822 None => 0,
1783 }$0; 1823 }$0;
1784}"#, 1824}
1825"#,
1785 r#" 1826 r#"
1786fn foo() { 1827fn foo() {
1787 let v: i32 = fun_name(); 1828 let v: i32 = fun_name();
@@ -1792,7 +1833,8 @@ fn $0fun_name() -> i32 {
1792 Some(x) => x, 1833 Some(x) => x,
1793 None => 0, 1834 None => 0,
1794 } 1835 }
1795}"#, 1836}
1837"#,
1796 ); 1838 );
1797 } 1839 }
1798 1840
@@ -1805,7 +1847,8 @@ fn foo() {
1805 let n = 1; 1847 let n = 1;
1806 let mut v = $0n * n;$0 1848 let mut v = $0n * n;$0
1807 v += 1; 1849 v += 1;
1808}"#, 1850}
1851"#,
1809 r#" 1852 r#"
1810fn foo() { 1853fn foo() {
1811 let n = 1; 1854 let n = 1;
@@ -1816,7 +1859,8 @@ fn foo() {
1816fn $0fun_name(n: i32) -> i32 { 1859fn $0fun_name(n: i32) -> i32 {
1817 let mut v = n * n; 1860 let mut v = n * n;
1818 v 1861 v
1819}"#, 1862}
1863"#,
1820 ); 1864 );
1821 } 1865 }
1822 1866
@@ -1832,7 +1876,8 @@ fn foo() {
1832 let mut w = 3;$0 1876 let mut w = 3;$0
1833 v += 1; 1877 v += 1;
1834 w += 1; 1878 w += 1;
1835}"#, 1879}
1880"#,
1836 r#" 1881 r#"
1837fn foo() { 1882fn foo() {
1838 let m = 2; 1883 let m = 2;
@@ -1846,7 +1891,8 @@ fn $0fun_name(m: i32, n: i32) -> (i32, i32) {
1846 let mut v = m * n; 1891 let mut v = m * n;
1847 let mut w = 3; 1892 let mut w = 3;
1848 (v, w) 1893 (v, w)
1849}"#, 1894}
1895"#,
1850 ); 1896 );
1851 } 1897 }
1852 1898
@@ -1854,12 +1900,13 @@ fn $0fun_name(m: i32, n: i32) -> (i32, i32) {
1854 fn argument_form_expr() { 1900 fn argument_form_expr() {
1855 check_assist( 1901 check_assist(
1856 extract_function, 1902 extract_function,
1857 r" 1903 r#"
1858fn foo() -> u32 { 1904fn foo() -> u32 {
1859 let n = 2; 1905 let n = 2;
1860 $0n+2$0 1906 $0n+2$0
1861}", 1907}
1862 r" 1908"#,
1909 r#"
1863fn foo() -> u32 { 1910fn foo() -> u32 {
1864 let n = 2; 1911 let n = 2;
1865 fun_name(n) 1912 fun_name(n)
@@ -1867,7 +1914,8 @@ fn foo() -> u32 {
1867 1914
1868fn $0fun_name(n: u32) -> u32 { 1915fn $0fun_name(n: u32) -> u32 {
1869 n+2 1916 n+2
1870}", 1917}
1918"#,
1871 ) 1919 )
1872 } 1920 }
1873 1921
@@ -1875,12 +1923,13 @@ fn $0fun_name(n: u32) -> u32 {
1875 fn argument_used_twice_form_expr() { 1923 fn argument_used_twice_form_expr() {
1876 check_assist( 1924 check_assist(
1877 extract_function, 1925 extract_function,
1878 r" 1926 r#"
1879fn foo() -> u32 { 1927fn foo() -> u32 {
1880 let n = 2; 1928 let n = 2;
1881 $0n+n$0 1929 $0n+n$0
1882}", 1930}
1883 r" 1931"#,
1932 r#"
1884fn foo() -> u32 { 1933fn foo() -> u32 {
1885 let n = 2; 1934 let n = 2;
1886 fun_name(n) 1935 fun_name(n)
@@ -1888,7 +1937,8 @@ fn foo() -> u32 {
1888 1937
1889fn $0fun_name(n: u32) -> u32 { 1938fn $0fun_name(n: u32) -> u32 {
1890 n+n 1939 n+n
1891}", 1940}
1941"#,
1892 ) 1942 )
1893 } 1943 }
1894 1944
@@ -1896,13 +1946,14 @@ fn $0fun_name(n: u32) -> u32 {
1896 fn two_arguments_form_expr() { 1946 fn two_arguments_form_expr() {
1897 check_assist( 1947 check_assist(
1898 extract_function, 1948 extract_function,
1899 r" 1949 r#"
1900fn foo() -> u32 { 1950fn foo() -> u32 {
1901 let n = 2; 1951 let n = 2;
1902 let m = 3; 1952 let m = 3;
1903 $0n+n*m$0 1953 $0n+n*m$0
1904}", 1954}
1905 r" 1955"#,
1956 r#"
1906fn foo() -> u32 { 1957fn foo() -> u32 {
1907 let n = 2; 1958 let n = 2;
1908 let m = 3; 1959 let m = 3;
@@ -1911,7 +1962,8 @@ fn foo() -> u32 {
1911 1962
1912fn $0fun_name(n: u32, m: u32) -> u32 { 1963fn $0fun_name(n: u32, m: u32) -> u32 {
1913 n+n*m 1964 n+n*m
1914}", 1965}
1966"#,
1915 ) 1967 )
1916 } 1968 }
1917 1969
@@ -1919,13 +1971,14 @@ fn $0fun_name(n: u32, m: u32) -> u32 {
1919 fn argument_and_locals() { 1971 fn argument_and_locals() {
1920 check_assist( 1972 check_assist(
1921 extract_function, 1973 extract_function,
1922 r" 1974 r#"
1923fn foo() -> u32 { 1975fn foo() -> u32 {
1924 let n = 2; 1976 let n = 2;
1925 $0let m = 1; 1977 $0let m = 1;
1926 n + m$0 1978 n + m$0
1927}", 1979}
1928 r" 1980"#,
1981 r#"
1929fn foo() -> u32 { 1982fn foo() -> u32 {
1930 let n = 2; 1983 let n = 2;
1931 fun_name(n) 1984 fun_name(n)
@@ -1934,7 +1987,8 @@ fn foo() -> u32 {
1934fn $0fun_name(n: u32) -> u32 { 1987fn $0fun_name(n: u32) -> u32 {
1935 let m = 1; 1988 let m = 1;
1936 n + m 1989 n + m
1937}", 1990}
1991"#,
1938 ) 1992 )
1939 } 1993 }
1940 1994
@@ -1948,18 +2002,20 @@ fn $0fun_name(n: u32) -> u32 {
1948 fn part_of_expr_stmt() { 2002 fn part_of_expr_stmt() {
1949 check_assist( 2003 check_assist(
1950 extract_function, 2004 extract_function,
1951 " 2005 r#"
1952fn foo() { 2006fn foo() {
1953 $01$0 + 1; 2007 $01$0 + 1;
1954}", 2008}
1955 " 2009"#,
2010 r#"
1956fn foo() { 2011fn foo() {
1957 fun_name() + 1; 2012 fun_name() + 1;
1958} 2013}
1959 2014
1960fn $0fun_name() -> i32 { 2015fn $0fun_name() -> i32 {
1961 1 2016 1
1962}", 2017}
2018"#,
1963 ); 2019 );
1964 } 2020 }
1965 2021
@@ -1970,7 +2026,8 @@ fn $0fun_name() -> i32 {
1970 r#" 2026 r#"
1971fn foo() { 2027fn foo() {
1972 $0bar(1 + 1)$0 2028 $0bar(1 + 1)$0
1973}"#, 2029}
2030"#,
1974 r#" 2031 r#"
1975fn foo() { 2032fn foo() {
1976 fun_name(); 2033 fun_name();
@@ -1978,7 +2035,8 @@ fn foo() {
1978 2035
1979fn $0fun_name() { 2036fn $0fun_name() {
1980 bar(1 + 1) 2037 bar(1 + 1)
1981}"#, 2038}
2039"#,
1982 ) 2040 )
1983 } 2041 }
1984 2042
@@ -1986,15 +2044,16 @@ fn $0fun_name() {
1986 fn extract_from_nested() { 2044 fn extract_from_nested() {
1987 check_assist( 2045 check_assist(
1988 extract_function, 2046 extract_function,
1989 r" 2047 r#"
1990fn main() { 2048fn main() {
1991 let x = true; 2049 let x = true;
1992 let tuple = match x { 2050 let tuple = match x {
1993 true => ($02 + 2$0, true) 2051 true => ($02 + 2$0, true)
1994 _ => (0, false) 2052 _ => (0, false)
1995 }; 2053 };
1996}", 2054}
1997 r" 2055"#,
2056 r#"
1998fn main() { 2057fn main() {
1999 let x = true; 2058 let x = true;
2000 let tuple = match x { 2059 let tuple = match x {
@@ -2005,7 +2064,8 @@ fn main() {
2005 2064
2006fn $0fun_name() -> i32 { 2065fn $0fun_name() -> i32 {
2007 2 + 2 2066 2 + 2
2008}", 2067}
2068"#,
2009 ); 2069 );
2010 } 2070 }
2011 2071
@@ -2013,18 +2073,20 @@ fn $0fun_name() -> i32 {
2013 fn param_from_closure() { 2073 fn param_from_closure() {
2014 check_assist( 2074 check_assist(
2015 extract_function, 2075 extract_function,
2016 r" 2076 r#"
2017fn main() { 2077fn main() {
2018 let lambda = |x: u32| $0x * 2$0; 2078 let lambda = |x: u32| $0x * 2$0;
2019}", 2079}
2020 r" 2080"#,
2081 r#"
2021fn main() { 2082fn main() {
2022 let lambda = |x: u32| fun_name(x); 2083 let lambda = |x: u32| fun_name(x);
2023} 2084}
2024 2085
2025fn $0fun_name(x: u32) -> u32 { 2086fn $0fun_name(x: u32) -> u32 {
2026 x * 2 2087 x * 2
2027}", 2088}
2089"#,
2028 ); 2090 );
2029 } 2091 }
2030 2092
@@ -2032,18 +2094,20 @@ fn $0fun_name(x: u32) -> u32 {
2032 fn extract_return_stmt() { 2094 fn extract_return_stmt() {
2033 check_assist( 2095 check_assist(
2034 extract_function, 2096 extract_function,
2035 r" 2097 r#"
2036fn foo() -> u32 { 2098fn foo() -> u32 {
2037 $0return 2 + 2$0; 2099 $0return 2 + 2$0;
2038}", 2100}
2039 r" 2101"#,
2102 r#"
2040fn foo() -> u32 { 2103fn foo() -> u32 {
2041 return fun_name(); 2104 return fun_name();
2042} 2105}
2043 2106
2044fn $0fun_name() -> u32 { 2107fn $0fun_name() -> u32 {
2045 2 + 2 2108 2 + 2
2046}", 2109}
2110"#,
2047 ); 2111 );
2048 } 2112 }
2049 2113
@@ -2051,13 +2115,14 @@ fn $0fun_name() -> u32 {
2051 fn does_not_add_extra_whitespace() { 2115 fn does_not_add_extra_whitespace() {
2052 check_assist( 2116 check_assist(
2053 extract_function, 2117 extract_function,
2054 r" 2118 r#"
2055fn foo() -> u32 { 2119fn foo() -> u32 {
2056 2120
2057 2121
2058 $0return 2 + 2$0; 2122 $0return 2 + 2$0;
2059}", 2123}
2060 r" 2124"#,
2125 r#"
2061fn foo() -> u32 { 2126fn foo() -> u32 {
2062 2127
2063 2128
@@ -2066,7 +2131,8 @@ fn foo() -> u32 {
2066 2131
2067fn $0fun_name() -> u32 { 2132fn $0fun_name() -> u32 {
2068 2 + 2 2133 2 + 2
2069}", 2134}
2135"#,
2070 ); 2136 );
2071 } 2137 }
2072 2138
@@ -2074,13 +2140,14 @@ fn $0fun_name() -> u32 {
2074 fn break_stmt() { 2140 fn break_stmt() {
2075 check_assist( 2141 check_assist(
2076 extract_function, 2142 extract_function,
2077 r" 2143 r#"
2078fn main() { 2144fn main() {
2079 let result = loop { 2145 let result = loop {
2080 $0break 2 + 2$0; 2146 $0break 2 + 2$0;
2081 }; 2147 };
2082}", 2148}
2083 r" 2149"#,
2150 r#"
2084fn main() { 2151fn main() {
2085 let result = loop { 2152 let result = loop {
2086 break fun_name(); 2153 break fun_name();
@@ -2089,7 +2156,8 @@ fn main() {
2089 2156
2090fn $0fun_name() -> i32 { 2157fn $0fun_name() -> i32 {
2091 2 + 2 2158 2 + 2
2092}", 2159}
2160"#,
2093 ); 2161 );
2094 } 2162 }
2095 2163
@@ -2097,18 +2165,20 @@ fn $0fun_name() -> i32 {
2097 fn extract_cast() { 2165 fn extract_cast() {
2098 check_assist( 2166 check_assist(
2099 extract_function, 2167 extract_function,
2100 r" 2168 r#"
2101fn main() { 2169fn main() {
2102 let v = $00f32 as u32$0; 2170 let v = $00f32 as u32$0;
2103}", 2171}
2104 r" 2172"#,
2173 r#"
2105fn main() { 2174fn main() {
2106 let v = fun_name(); 2175 let v = fun_name();
2107} 2176}
2108 2177
2109fn $0fun_name() -> u32 { 2178fn $0fun_name() -> u32 {
2110 0f32 as u32 2179 0f32 as u32
2111}", 2180}
2181"#,
2112 ); 2182 );
2113 } 2183 }
2114 2184
@@ -2121,15 +2191,16 @@ fn $0fun_name() -> u32 {
2121 fn method_to_freestanding() { 2191 fn method_to_freestanding() {
2122 check_assist( 2192 check_assist(
2123 extract_function, 2193 extract_function,
2124 r" 2194 r#"
2125struct S; 2195struct S;
2126 2196
2127impl S { 2197impl S {
2128 fn foo(&self) -> i32 { 2198 fn foo(&self) -> i32 {
2129 $01+1$0 2199 $01+1$0
2130 } 2200 }
2131}", 2201}
2132 r" 2202"#,
2203 r#"
2133struct S; 2204struct S;
2134 2205
2135impl S { 2206impl S {
@@ -2140,7 +2211,8 @@ impl S {
2140 2211
2141fn $0fun_name() -> i32 { 2212fn $0fun_name() -> i32 {
2142 1+1 2213 1+1
2143}", 2214}
2215"#,
2144 ); 2216 );
2145 } 2217 }
2146 2218
@@ -2148,15 +2220,16 @@ fn $0fun_name() -> i32 {
2148 fn method_with_reference() { 2220 fn method_with_reference() {
2149 check_assist( 2221 check_assist(
2150 extract_function, 2222 extract_function,
2151 r" 2223 r#"
2152struct S { f: i32 }; 2224struct S { f: i32 };
2153 2225
2154impl S { 2226impl S {
2155 fn foo(&self) -> i32 { 2227 fn foo(&self) -> i32 {
2156 $01+self.f$0 2228 $01+self.f$0
2157 } 2229 }
2158}", 2230}
2159 r" 2231"#,
2232 r#"
2160struct S { f: i32 }; 2233struct S { f: i32 };
2161 2234
2162impl S { 2235impl S {
@@ -2167,7 +2240,8 @@ impl S {
2167 fn $0fun_name(&self) -> i32 { 2240 fn $0fun_name(&self) -> i32 {
2168 1+self.f 2241 1+self.f
2169 } 2242 }
2170}", 2243}
2244"#,
2171 ); 2245 );
2172 } 2246 }
2173 2247
@@ -2175,15 +2249,16 @@ impl S {
2175 fn method_with_mut() { 2249 fn method_with_mut() {
2176 check_assist( 2250 check_assist(
2177 extract_function, 2251 extract_function,
2178 r" 2252 r#"
2179struct S { f: i32 }; 2253struct S { f: i32 };
2180 2254
2181impl S { 2255impl S {
2182 fn foo(&mut self) { 2256 fn foo(&mut self) {
2183 $0self.f += 1;$0 2257 $0self.f += 1;$0
2184 } 2258 }
2185}", 2259}
2186 r" 2260"#,
2261 r#"
2187struct S { f: i32 }; 2262struct S { f: i32 };
2188 2263
2189impl S { 2264impl S {
@@ -2194,7 +2269,8 @@ impl S {
2194 fn $0fun_name(&mut self) { 2269 fn $0fun_name(&mut self) {
2195 self.f += 1; 2270 self.f += 1;
2196 } 2271 }
2197}", 2272}
2273"#,
2198 ); 2274 );
2199 } 2275 }
2200 2276
@@ -2202,13 +2278,14 @@ impl S {
2202 fn variable_defined_inside_and_used_after_no_ret() { 2278 fn variable_defined_inside_and_used_after_no_ret() {
2203 check_assist( 2279 check_assist(
2204 extract_function, 2280 extract_function,
2205 r" 2281 r#"
2206fn foo() { 2282fn foo() {
2207 let n = 1; 2283 let n = 1;
2208 $0let k = n * n;$0 2284 $0let k = n * n;$0
2209 let m = k + 1; 2285 let m = k + 1;
2210}", 2286}
2211 r" 2287"#,
2288 r#"
2212fn foo() { 2289fn foo() {
2213 let n = 1; 2290 let n = 1;
2214 let k = fun_name(n); 2291 let k = fun_name(n);
@@ -2218,7 +2295,8 @@ fn foo() {
2218fn $0fun_name(n: i32) -> i32 { 2295fn $0fun_name(n: i32) -> i32 {
2219 let k = n * n; 2296 let k = n * n;
2220 k 2297 k
2221}", 2298}
2299"#,
2222 ); 2300 );
2223 } 2301 }
2224 2302
@@ -2226,13 +2304,14 @@ fn $0fun_name(n: i32) -> i32 {
2226 fn variable_defined_inside_and_used_after_mutably_no_ret() { 2304 fn variable_defined_inside_and_used_after_mutably_no_ret() {
2227 check_assist( 2305 check_assist(
2228 extract_function, 2306 extract_function,
2229 r" 2307 r#"
2230fn foo() { 2308fn foo() {
2231 let n = 1; 2309 let n = 1;
2232 $0let mut k = n * n;$0 2310 $0let mut k = n * n;$0
2233 k += 1; 2311 k += 1;
2234}", 2312}
2235 r" 2313"#,
2314 r#"
2236fn foo() { 2315fn foo() {
2237 let n = 1; 2316 let n = 1;
2238 let mut k = fun_name(n); 2317 let mut k = fun_name(n);
@@ -2242,7 +2321,8 @@ fn foo() {
2242fn $0fun_name(n: i32) -> i32 { 2321fn $0fun_name(n: i32) -> i32 {
2243 let mut k = n * n; 2322 let mut k = n * n;
2244 k 2323 k
2245}", 2324}
2325"#,
2246 ); 2326 );
2247 } 2327 }
2248 2328
@@ -2250,14 +2330,15 @@ fn $0fun_name(n: i32) -> i32 {
2250 fn two_variables_defined_inside_and_used_after_no_ret() { 2330 fn two_variables_defined_inside_and_used_after_no_ret() {
2251 check_assist( 2331 check_assist(
2252 extract_function, 2332 extract_function,
2253 r" 2333 r#"
2254fn foo() { 2334fn foo() {
2255 let n = 1; 2335 let n = 1;
2256 $0let k = n * n; 2336 $0let k = n * n;
2257 let m = k + 2;$0 2337 let m = k + 2;$0
2258 let h = k + m; 2338 let h = k + m;
2259}", 2339}
2260 r" 2340"#,
2341 r#"
2261fn foo() { 2342fn foo() {
2262 let n = 1; 2343 let n = 1;
2263 let (k, m) = fun_name(n); 2344 let (k, m) = fun_name(n);
@@ -2268,7 +2349,8 @@ fn $0fun_name(n: i32) -> (i32, i32) {
2268 let k = n * n; 2349 let k = n * n;
2269 let m = k + 2; 2350 let m = k + 2;
2270 (k, m) 2351 (k, m)
2271}", 2352}
2353"#,
2272 ); 2354 );
2273 } 2355 }
2274 2356
@@ -2276,7 +2358,7 @@ fn $0fun_name(n: i32) -> (i32, i32) {
2276 fn multi_variables_defined_inside_and_used_after_mutably_no_ret() { 2358 fn multi_variables_defined_inside_and_used_after_mutably_no_ret() {
2277 check_assist( 2359 check_assist(
2278 extract_function, 2360 extract_function,
2279 r" 2361 r#"
2280fn foo() { 2362fn foo() {
2281 let n = 1; 2363 let n = 1;
2282 $0let mut k = n * n; 2364 $0let mut k = n * n;
@@ -2285,8 +2367,9 @@ fn foo() {
2285 o += 1;$0 2367 o += 1;$0
2286 k += o; 2368 k += o;
2287 m = 1; 2369 m = 1;
2288}", 2370}
2289 r" 2371"#,
2372 r#"
2290fn foo() { 2373fn foo() {
2291 let n = 1; 2374 let n = 1;
2292 let (mut k, mut m, o) = fun_name(n); 2375 let (mut k, mut m, o) = fun_name(n);
@@ -2300,7 +2383,8 @@ fn $0fun_name(n: i32) -> (i32, i32, i32) {
2300 let mut o = m + 3; 2383 let mut o = m + 3;
2301 o += 1; 2384 o += 1;
2302 (k, m, o) 2385 (k, m, o)
2303}", 2386}
2387"#,
2304 ); 2388 );
2305 } 2389 }
2306 2390
@@ -2308,13 +2392,14 @@ fn $0fun_name(n: i32) -> (i32, i32, i32) {
2308 fn nontrivial_patterns_define_variables() { 2392 fn nontrivial_patterns_define_variables() {
2309 check_assist( 2393 check_assist(
2310 extract_function, 2394 extract_function,
2311 r" 2395 r#"
2312struct Counter(i32); 2396struct Counter(i32);
2313fn foo() { 2397fn foo() {
2314 $0let Counter(n) = Counter(0);$0 2398 $0let Counter(n) = Counter(0);$0
2315 let m = n; 2399 let m = n;
2316}", 2400}
2317 r" 2401"#,
2402 r#"
2318struct Counter(i32); 2403struct Counter(i32);
2319fn foo() { 2404fn foo() {
2320 let n = fun_name(); 2405 let n = fun_name();
@@ -2324,7 +2409,8 @@ fn foo() {
2324fn $0fun_name() -> i32 { 2409fn $0fun_name() -> i32 {
2325 let Counter(n) = Counter(0); 2410 let Counter(n) = Counter(0);
2326 n 2411 n
2327}", 2412}
2413"#,
2328 ); 2414 );
2329 } 2415 }
2330 2416
@@ -2332,13 +2418,14 @@ fn $0fun_name() -> i32 {
2332 fn struct_with_two_fields_pattern_define_variables() { 2418 fn struct_with_two_fields_pattern_define_variables() {
2333 check_assist( 2419 check_assist(
2334 extract_function, 2420 extract_function,
2335 r" 2421 r#"
2336struct Counter { n: i32, m: i32 }; 2422struct Counter { n: i32, m: i32 };
2337fn foo() { 2423fn foo() {
2338 $0let Counter { n, m: k } = Counter { n: 1, m: 2 };$0 2424 $0let Counter { n, m: k } = Counter { n: 1, m: 2 };$0
2339 let h = n + k; 2425 let h = n + k;
2340}", 2426}
2341 r" 2427"#,
2428 r#"
2342struct Counter { n: i32, m: i32 }; 2429struct Counter { n: i32, m: i32 };
2343fn foo() { 2430fn foo() {
2344 let (n, k) = fun_name(); 2431 let (n, k) = fun_name();
@@ -2348,7 +2435,8 @@ fn foo() {
2348fn $0fun_name() -> (i32, i32) { 2435fn $0fun_name() -> (i32, i32) {
2349 let Counter { n, m: k } = Counter { n: 1, m: 2 }; 2436 let Counter { n, m: k } = Counter { n: 1, m: 2 };
2350 (n, k) 2437 (n, k)
2351}", 2438}
2439"#,
2352 ); 2440 );
2353 } 2441 }
2354 2442
@@ -2356,13 +2444,14 @@ fn $0fun_name() -> (i32, i32) {
2356 fn mut_var_from_outer_scope() { 2444 fn mut_var_from_outer_scope() {
2357 check_assist( 2445 check_assist(
2358 extract_function, 2446 extract_function,
2359 r" 2447 r#"
2360fn foo() { 2448fn foo() {
2361 let mut n = 1; 2449 let mut n = 1;
2362 $0n += 1;$0 2450 $0n += 1;$0
2363 let m = n + 1; 2451 let m = n + 1;
2364}", 2452}
2365 r" 2453"#,
2454 r#"
2366fn foo() { 2455fn foo() {
2367 let mut n = 1; 2456 let mut n = 1;
2368 fun_name(&mut n); 2457 fun_name(&mut n);
@@ -2371,7 +2460,8 @@ fn foo() {
2371 2460
2372fn $0fun_name(n: &mut i32) { 2461fn $0fun_name(n: &mut i32) {
2373 *n += 1; 2462 *n += 1;
2374}", 2463}
2464"#,
2375 ); 2465 );
2376 } 2466 }
2377 2467
@@ -2379,14 +2469,15 @@ fn $0fun_name(n: &mut i32) {
2379 fn mut_field_from_outer_scope() { 2469 fn mut_field_from_outer_scope() {
2380 check_assist( 2470 check_assist(
2381 extract_function, 2471 extract_function,
2382 r" 2472 r#"
2383struct C { n: i32 } 2473struct C { n: i32 }
2384fn foo() { 2474fn foo() {
2385 let mut c = C { n: 0 }; 2475 let mut c = C { n: 0 };
2386 $0c.n += 1;$0 2476 $0c.n += 1;$0
2387 let m = c.n + 1; 2477 let m = c.n + 1;
2388}", 2478}
2389 r" 2479"#,
2480 r#"
2390struct C { n: i32 } 2481struct C { n: i32 }
2391fn foo() { 2482fn foo() {
2392 let mut c = C { n: 0 }; 2483 let mut c = C { n: 0 };
@@ -2396,7 +2487,8 @@ fn foo() {
2396 2487
2397fn $0fun_name(c: &mut C) { 2488fn $0fun_name(c: &mut C) {
2398 c.n += 1; 2489 c.n += 1;
2399}", 2490}
2491"#,
2400 ); 2492 );
2401 } 2493 }
2402 2494
@@ -2404,7 +2496,7 @@ fn $0fun_name(c: &mut C) {
2404 fn mut_nested_field_from_outer_scope() { 2496 fn mut_nested_field_from_outer_scope() {
2405 check_assist( 2497 check_assist(
2406 extract_function, 2498 extract_function,
2407 r" 2499 r#"
2408struct P { n: i32} 2500struct P { n: i32}
2409struct C { p: P } 2501struct C { p: P }
2410fn foo() { 2502fn foo() {
@@ -2414,8 +2506,9 @@ fn foo() {
2414 $0c.p.n += u.p.n; 2506 $0c.p.n += u.p.n;
2415 let r = &mut v.p.n;$0 2507 let r = &mut v.p.n;$0
2416 let m = c.p.n + v.p.n + u.p.n; 2508 let m = c.p.n + v.p.n + u.p.n;
2417}", 2509}
2418 r" 2510"#,
2511 r#"
2419struct P { n: i32} 2512struct P { n: i32}
2420struct C { p: P } 2513struct C { p: P }
2421fn foo() { 2514fn foo() {
@@ -2429,7 +2522,8 @@ fn foo() {
2429fn $0fun_name(c: &mut C, u: &C, v: &mut C) { 2522fn $0fun_name(c: &mut C, u: &C, v: &mut C) {
2430 c.p.n += u.p.n; 2523 c.p.n += u.p.n;
2431 let r = &mut v.p.n; 2524 let r = &mut v.p.n;
2432}", 2525}
2526"#,
2433 ); 2527 );
2434 } 2528 }
2435 2529
@@ -2437,7 +2531,7 @@ fn $0fun_name(c: &mut C, u: &C, v: &mut C) {
2437 fn mut_param_many_usages_stmt() { 2531 fn mut_param_many_usages_stmt() {
2438 check_assist( 2532 check_assist(
2439 extract_function, 2533 extract_function,
2440 r" 2534 r#"
2441fn bar(k: i32) {} 2535fn bar(k: i32) {}
2442trait I: Copy { 2536trait I: Copy {
2443 fn succ(&self) -> Self; 2537 fn succ(&self) -> Self;
@@ -2458,8 +2552,9 @@ fn foo() {
2458 *v = v.succ(); 2552 *v = v.succ();
2459 n.succ();$0 2553 n.succ();$0
2460 let m = n + 1; 2554 let m = n + 1;
2461}", 2555}
2462 r" 2556"#,
2557 r#"
2463fn bar(k: i32) {} 2558fn bar(k: i32) {}
2464trait I: Copy { 2559trait I: Copy {
2465 fn succ(&self) -> Self; 2560 fn succ(&self) -> Self;
@@ -2484,7 +2579,8 @@ fn $0fun_name(n: &mut i32) {
2484 let v = n; 2579 let v = n;
2485 *v = v.succ(); 2580 *v = v.succ();
2486 n.succ(); 2581 n.succ();
2487}", 2582}
2583"#,
2488 ); 2584 );
2489 } 2585 }
2490 2586
@@ -2492,7 +2588,7 @@ fn $0fun_name(n: &mut i32) {
2492 fn mut_param_many_usages_expr() { 2588 fn mut_param_many_usages_expr() {
2493 check_assist( 2589 check_assist(
2494 extract_function, 2590 extract_function,
2495 r" 2591 r#"
2496fn bar(k: i32) {} 2592fn bar(k: i32) {}
2497trait I: Copy { 2593trait I: Copy {
2498 fn succ(&self) -> Self; 2594 fn succ(&self) -> Self;
@@ -2515,8 +2611,9 @@ fn foo() {
2515 n.succ(); 2611 n.succ();
2516 }$0 2612 }$0
2517 let m = n + 1; 2613 let m = n + 1;
2518}", 2614}
2519 r" 2615"#,
2616 r#"
2520fn bar(k: i32) {} 2617fn bar(k: i32) {}
2521trait I: Copy { 2618trait I: Copy {
2522 fn succ(&self) -> Self; 2619 fn succ(&self) -> Self;
@@ -2541,7 +2638,8 @@ fn $0fun_name(n: &mut i32) {
2541 let v = n; 2638 let v = n;
2542 *v = v.succ(); 2639 *v = v.succ();
2543 n.succ(); 2640 n.succ();
2544}", 2641}
2642"#,
2545 ); 2643 );
2546 } 2644 }
2547 2645
@@ -2549,11 +2647,12 @@ fn $0fun_name(n: &mut i32) {
2549 fn mut_param_by_value() { 2647 fn mut_param_by_value() {
2550 check_assist( 2648 check_assist(
2551 extract_function, 2649 extract_function,
2552 r" 2650 r#"
2553fn foo() { 2651fn foo() {
2554 let mut n = 1; 2652 let mut n = 1;
2555 $0n += 1;$0 2653 $0n += 1;$0
2556}", 2654}
2655"#,
2557 r" 2656 r"
2558fn foo() { 2657fn foo() {
2559 let mut n = 1; 2658 let mut n = 1;
@@ -2562,7 +2661,8 @@ fn foo() {
2562 2661
2563fn $0fun_name(mut n: i32) { 2662fn $0fun_name(mut n: i32) {
2564 n += 1; 2663 n += 1;
2565}", 2664}
2665",
2566 ); 2666 );
2567 } 2667 }
2568 2668
@@ -2570,14 +2670,15 @@ fn $0fun_name(mut n: i32) {
2570 fn mut_param_because_of_mut_ref() { 2670 fn mut_param_because_of_mut_ref() {
2571 check_assist( 2671 check_assist(
2572 extract_function, 2672 extract_function,
2573 r" 2673 r#"
2574fn foo() { 2674fn foo() {
2575 let mut n = 1; 2675 let mut n = 1;
2576 $0let v = &mut n; 2676 $0let v = &mut n;
2577 *v += 1;$0 2677 *v += 1;$0
2578 let k = n; 2678 let k = n;
2579}", 2679}
2580 r" 2680"#,
2681 r#"
2581fn foo() { 2682fn foo() {
2582 let mut n = 1; 2683 let mut n = 1;
2583 fun_name(&mut n); 2684 fun_name(&mut n);
@@ -2587,7 +2688,8 @@ fn foo() {
2587fn $0fun_name(n: &mut i32) { 2688fn $0fun_name(n: &mut i32) {
2588 let v = n; 2689 let v = n;
2589 *v += 1; 2690 *v += 1;
2590}", 2691}
2692"#,
2591 ); 2693 );
2592 } 2694 }
2593 2695
@@ -2600,8 +2702,9 @@ fn foo() {
2600 let mut n = 1; 2702 let mut n = 1;
2601 $0let v = &mut n; 2703 $0let v = &mut n;
2602 *v += 1;$0 2704 *v += 1;$0
2603}", 2705}
2604 r" 2706",
2707 r#"
2605fn foo() { 2708fn foo() {
2606 let mut n = 1; 2709 let mut n = 1;
2607 fun_name(n); 2710 fun_name(n);
@@ -2610,7 +2713,8 @@ fn foo() {
2610fn $0fun_name(mut n: i32) { 2713fn $0fun_name(mut n: i32) {
2611 let v = &mut n; 2714 let v = &mut n;
2612 *v += 1; 2715 *v += 1;
2613}", 2716}
2717"#,
2614 ); 2718 );
2615 } 2719 }
2616 2720
@@ -2618,7 +2722,7 @@ fn $0fun_name(mut n: i32) {
2618 fn mut_method_call() { 2722 fn mut_method_call() {
2619 check_assist( 2723 check_assist(
2620 extract_function, 2724 extract_function,
2621 r" 2725 r#"
2622trait I { 2726trait I {
2623 fn inc(&mut self); 2727 fn inc(&mut self);
2624} 2728}
@@ -2628,8 +2732,9 @@ impl I for i32 {
2628fn foo() { 2732fn foo() {
2629 let mut n = 1; 2733 let mut n = 1;
2630 $0n.inc();$0 2734 $0n.inc();$0
2631}", 2735}
2632 r" 2736"#,
2737 r#"
2633trait I { 2738trait I {
2634 fn inc(&mut self); 2739 fn inc(&mut self);
2635} 2740}
@@ -2643,7 +2748,8 @@ fn foo() {
2643 2748
2644fn $0fun_name(mut n: i32) { 2749fn $0fun_name(mut n: i32) {
2645 n.inc(); 2750 n.inc();
2646}", 2751}
2752"#,
2647 ); 2753 );
2648 } 2754 }
2649 2755
@@ -2651,7 +2757,7 @@ fn $0fun_name(mut n: i32) {
2651 fn shared_method_call() { 2757 fn shared_method_call() {
2652 check_assist( 2758 check_assist(
2653 extract_function, 2759 extract_function,
2654 r" 2760 r#"
2655trait I { 2761trait I {
2656 fn succ(&self); 2762 fn succ(&self);
2657} 2763}
@@ -2661,7 +2767,8 @@ impl I for i32 {
2661fn foo() { 2767fn foo() {
2662 let mut n = 1; 2768 let mut n = 1;
2663 $0n.succ();$0 2769 $0n.succ();$0
2664}", 2770}
2771"#,
2665 r" 2772 r"
2666trait I { 2773trait I {
2667 fn succ(&self); 2774 fn succ(&self);
@@ -2676,7 +2783,8 @@ fn foo() {
2676 2783
2677fn $0fun_name(n: i32) { 2784fn $0fun_name(n: i32) {
2678 n.succ(); 2785 n.succ();
2679}", 2786}
2787",
2680 ); 2788 );
2681 } 2789 }
2682 2790
@@ -2684,7 +2792,7 @@ fn $0fun_name(n: i32) {
2684 fn mut_method_call_with_other_receiver() { 2792 fn mut_method_call_with_other_receiver() {
2685 check_assist( 2793 check_assist(
2686 extract_function, 2794 extract_function,
2687 r" 2795 r#"
2688trait I { 2796trait I {
2689 fn inc(&mut self, n: i32); 2797 fn inc(&mut self, n: i32);
2690} 2798}
@@ -2695,7 +2803,8 @@ fn foo() {
2695 let mut n = 1; 2803 let mut n = 1;
2696 $0let mut m = 2; 2804 $0let mut m = 2;
2697 m.inc(n);$0 2805 m.inc(n);$0
2698}", 2806}
2807"#,
2699 r" 2808 r"
2700trait I { 2809trait I {
2701 fn inc(&mut self, n: i32); 2810 fn inc(&mut self, n: i32);
@@ -2711,7 +2820,8 @@ fn foo() {
2711fn $0fun_name(n: i32) { 2820fn $0fun_name(n: i32) {
2712 let mut m = 2; 2821 let mut m = 2;
2713 m.inc(n); 2822 m.inc(n);
2714}", 2823}
2824",
2715 ); 2825 );
2716 } 2826 }
2717 2827
@@ -2719,12 +2829,13 @@ fn $0fun_name(n: i32) {
2719 fn non_copy_without_usages_after() { 2829 fn non_copy_without_usages_after() {
2720 check_assist( 2830 check_assist(
2721 extract_function, 2831 extract_function,
2722 r" 2832 r#"
2723struct Counter(i32); 2833struct Counter(i32);
2724fn foo() { 2834fn foo() {
2725 let c = Counter(0); 2835 let c = Counter(0);
2726 $0let n = c.0;$0 2836 $0let n = c.0;$0
2727}", 2837}
2838"#,
2728 r" 2839 r"
2729struct Counter(i32); 2840struct Counter(i32);
2730fn foo() { 2841fn foo() {
@@ -2734,7 +2845,8 @@ fn foo() {
2734 2845
2735fn $0fun_name(c: Counter) { 2846fn $0fun_name(c: Counter) {
2736 let n = c.0; 2847 let n = c.0;
2737}", 2848}
2849",
2738 ); 2850 );
2739 } 2851 }
2740 2852
@@ -2748,8 +2860,9 @@ fn foo() {
2748 let c = Counter(0); 2860 let c = Counter(0);
2749 $0let n = c.0;$0 2861 $0let n = c.0;$0
2750 let m = c.0; 2862 let m = c.0;
2751}", 2863}
2752 r" 2864",
2865 r#"
2753struct Counter(i32); 2866struct Counter(i32);
2754fn foo() { 2867fn foo() {
2755 let c = Counter(0); 2868 let c = Counter(0);
@@ -2759,7 +2872,8 @@ fn foo() {
2759 2872
2760fn $0fun_name(c: &Counter) { 2873fn $0fun_name(c: &Counter) {
2761 let n = c.0; 2874 let n = c.0;
2762}", 2875}
2876"#,
2763 ); 2877 );
2764 } 2878 }
2765 2879
@@ -2767,19 +2881,15 @@ fn $0fun_name(c: &Counter) {
2767 fn copy_used_after() { 2881 fn copy_used_after() {
2768 check_assist( 2882 check_assist(
2769 extract_function, 2883 extract_function,
2770 r##" 2884 r#"
2771#[lang = "copy"] 2885//- minicore: copy
2772pub trait Copy {}
2773impl Copy for i32 {}
2774fn foo() { 2886fn foo() {
2775 let n = 0; 2887 let n = 0;
2776 $0let m = n;$0 2888 $0let m = n;$0
2777 let k = n; 2889 let k = n;
2778}"##, 2890}
2779 r##" 2891"#,
2780#[lang = "copy"] 2892 r#"
2781pub trait Copy {}
2782impl Copy for i32 {}
2783fn foo() { 2893fn foo() {
2784 let n = 0; 2894 let n = 0;
2785 fun_name(n); 2895 fun_name(n);
@@ -2788,7 +2898,8 @@ fn foo() {
2788 2898
2789fn $0fun_name(n: i32) { 2899fn $0fun_name(n: i32) {
2790 let m = n; 2900 let m = n;
2791}"##, 2901}
2902"#,
2792 ) 2903 )
2793 } 2904 }
2794 2905
@@ -2796,21 +2907,19 @@ fn $0fun_name(n: i32) {
2796 fn copy_custom_used_after() { 2907 fn copy_custom_used_after() {
2797 check_assist( 2908 check_assist(
2798 extract_function, 2909 extract_function,
2799 r##" 2910 r#"
2800#[lang = "copy"] 2911//- minicore: copy, derive
2801pub trait Copy {} 2912#[derive(Clone, Copy)]
2802struct Counter(i32); 2913struct Counter(i32);
2803impl Copy for Counter {}
2804fn foo() { 2914fn foo() {
2805 let c = Counter(0); 2915 let c = Counter(0);
2806 $0let n = c.0;$0 2916 $0let n = c.0;$0
2807 let m = c.0; 2917 let m = c.0;
2808}"##, 2918}
2809 r##" 2919"#,
2810#[lang = "copy"] 2920 r#"
2811pub trait Copy {} 2921#[derive(Clone, Copy)]
2812struct Counter(i32); 2922struct Counter(i32);
2813impl Copy for Counter {}
2814fn foo() { 2923fn foo() {
2815 let c = Counter(0); 2924 let c = Counter(0);
2816 fun_name(c); 2925 fun_name(c);
@@ -2819,7 +2928,8 @@ fn foo() {
2819 2928
2820fn $0fun_name(c: Counter) { 2929fn $0fun_name(c: Counter) {
2821 let n = c.0; 2930 let n = c.0;
2822}"##, 2931}
2932"#,
2823 ); 2933 );
2824 } 2934 }
2825 2935
@@ -2827,7 +2937,7 @@ fn $0fun_name(c: Counter) {
2827 fn indented_stmts() { 2937 fn indented_stmts() {
2828 check_assist( 2938 check_assist(
2829 extract_function, 2939 extract_function,
2830 r" 2940 r#"
2831fn foo() { 2941fn foo() {
2832 if true { 2942 if true {
2833 loop { 2943 loop {
@@ -2835,8 +2945,9 @@ fn foo() {
2835 let m = 2;$0 2945 let m = 2;$0
2836 } 2946 }
2837 } 2947 }
2838}", 2948}
2839 r" 2949"#,
2950 r#"
2840fn foo() { 2951fn foo() {
2841 if true { 2952 if true {
2842 loop { 2953 loop {
@@ -2848,7 +2959,8 @@ fn foo() {
2848fn $0fun_name() { 2959fn $0fun_name() {
2849 let n = 1; 2960 let n = 1;
2850 let m = 2; 2961 let m = 2;
2851}", 2962}
2963"#,
2852 ); 2964 );
2853 } 2965 }
2854 2966
@@ -2856,7 +2968,7 @@ fn $0fun_name() {
2856 fn indented_stmts_inside_mod() { 2968 fn indented_stmts_inside_mod() {
2857 check_assist( 2969 check_assist(
2858 extract_function, 2970 extract_function,
2859 r" 2971 r#"
2860mod bar { 2972mod bar {
2861 fn foo() { 2973 fn foo() {
2862 if true { 2974 if true {
@@ -2866,8 +2978,9 @@ mod bar {
2866 } 2978 }
2867 } 2979 }
2868 } 2980 }
2869}", 2981}
2870 r" 2982"#,
2983 r#"
2871mod bar { 2984mod bar {
2872 fn foo() { 2985 fn foo() {
2873 if true { 2986 if true {
@@ -2881,7 +2994,8 @@ mod bar {
2881 let n = 1; 2994 let n = 1;
2882 let m = 2; 2995 let m = 2;
2883 } 2996 }
2884}", 2997}
2998"#,
2885 ); 2999 );
2886 } 3000 }
2887 3001
@@ -2889,12 +3003,8 @@ mod bar {
2889 fn break_loop() { 3003 fn break_loop() {
2890 check_assist( 3004 check_assist(
2891 extract_function, 3005 extract_function,
2892 r##" 3006 r#"
2893enum Option<T> { 3007//- minicore: option
2894 #[lang = "None"] None,
2895 #[lang = "Some"] Some(T),
2896}
2897use Option::*;
2898fn foo() { 3008fn foo() {
2899 loop { 3009 loop {
2900 let n = 1; 3010 let n = 1;
@@ -2903,13 +3013,9 @@ fn foo() {
2903 let k = 2;$0 3013 let k = 2;$0
2904 let h = 1 + k; 3014 let h = 1 + k;
2905 } 3015 }
2906}"##,
2907 r##"
2908enum Option<T> {
2909 #[lang = "None"] None,
2910 #[lang = "Some"] Some(T),
2911} 3016}
2912use Option::*; 3017"#,
3018 r#"
2913fn foo() { 3019fn foo() {
2914 loop { 3020 loop {
2915 let n = 1; 3021 let n = 1;
@@ -2926,7 +3032,8 @@ fn $0fun_name(n: i32) -> Option<i32> {
2926 return None; 3032 return None;
2927 let k = 2; 3033 let k = 2;
2928 Some(k) 3034 Some(k)
2929}"##, 3035}
3036"#,
2930 ); 3037 );
2931 } 3038 }
2932 3039
@@ -2934,31 +3041,17 @@ fn $0fun_name(n: i32) -> Option<i32> {
2934 fn return_to_parent() { 3041 fn return_to_parent() {
2935 check_assist( 3042 check_assist(
2936 extract_function, 3043 extract_function,
2937 r##" 3044 r#"
2938#[lang = "copy"] 3045//- minicore: copy, result
2939pub trait Copy {}
2940impl Copy for i32 {}
2941enum Result<T, E> {
2942 #[lang = "Ok"] Ok(T),
2943 #[lang = "Err"] Err(E),
2944}
2945use Result::*;
2946fn foo() -> i64 { 3046fn foo() -> i64 {
2947 let n = 1; 3047 let n = 1;
2948 $0let m = n + 1; 3048 $0let m = n + 1;
2949 return 1; 3049 return 1;
2950 let k = 2;$0 3050 let k = 2;$0
2951 (n + k) as i64 3051 (n + k) as i64
2952}"##, 3052}
2953 r##" 3053"#,
2954#[lang = "copy"] 3054 r#"
2955pub trait Copy {}
2956impl Copy for i32 {}
2957enum Result<T, E> {
2958 #[lang = "Ok"] Ok(T),
2959 #[lang = "Err"] Err(E),
2960}
2961use Result::*;
2962fn foo() -> i64 { 3055fn foo() -> i64 {
2963 let n = 1; 3056 let n = 1;
2964 let k = match fun_name(n) { 3057 let k = match fun_name(n) {
@@ -2973,7 +3066,8 @@ fn $0fun_name(n: i32) -> Result<i32, i64> {
2973 return Err(1); 3066 return Err(1);
2974 let k = 2; 3067 let k = 2;
2975 Ok(k) 3068 Ok(k)
2976}"##, 3069}
3070"#,
2977 ); 3071 );
2978 } 3072 }
2979 3073
@@ -2982,7 +3076,7 @@ fn $0fun_name(n: i32) -> Result<i32, i64> {
2982 cov_mark::check!(external_control_flow_break_and_continue); 3076 cov_mark::check!(external_control_flow_break_and_continue);
2983 check_assist_not_applicable( 3077 check_assist_not_applicable(
2984 extract_function, 3078 extract_function,
2985 r##" 3079 r#"
2986fn foo() { 3080fn foo() {
2987 loop { 3081 loop {
2988 let n = 1; 3082 let n = 1;
@@ -2993,7 +3087,8 @@ fn foo() {
2993 let k = k + 1;$0 3087 let k = k + 1;$0
2994 let r = n + k; 3088 let r = n + k;
2995 } 3089 }
2996}"##, 3090}
3091"#,
2997 ); 3092 );
2998 } 3093 }
2999 3094
@@ -3002,7 +3097,7 @@ fn foo() {
3002 cov_mark::check!(external_control_flow_return_and_bc); 3097 cov_mark::check!(external_control_flow_return_and_bc);
3003 check_assist_not_applicable( 3098 check_assist_not_applicable(
3004 extract_function, 3099 extract_function,
3005 r##" 3100 r#"
3006fn foo() { 3101fn foo() {
3007 loop { 3102 loop {
3008 let n = 1; 3103 let n = 1;
@@ -3013,7 +3108,8 @@ fn foo() {
3013 let k = k + 1;$0 3108 let k = k + 1;$0
3014 let r = n + k; 3109 let r = n + k;
3015 } 3110 }
3016}"##, 3111}
3112"#,
3017 ); 3113 );
3018 } 3114 }
3019 3115
@@ -3021,7 +3117,7 @@ fn foo() {
3021 fn break_loop_with_if() { 3117 fn break_loop_with_if() {
3022 check_assist( 3118 check_assist(
3023 extract_function, 3119 extract_function,
3024 r##" 3120 r#"
3025fn foo() { 3121fn foo() {
3026 loop { 3122 loop {
3027 let mut n = 1; 3123 let mut n = 1;
@@ -3030,8 +3126,9 @@ fn foo() {
3030 n += m;$0 3126 n += m;$0
3031 let h = 1 + n; 3127 let h = 1 + n;
3032 } 3128 }
3033}"##, 3129}
3034 r##" 3130"#,
3131 r#"
3035fn foo() { 3132fn foo() {
3036 loop { 3133 loop {
3037 let mut n = 1; 3134 let mut n = 1;
@@ -3047,7 +3144,8 @@ fn $0fun_name(n: &mut i32) -> bool {
3047 return true; 3144 return true;
3048 *n += m; 3145 *n += m;
3049 false 3146 false
3050}"##, 3147}
3148"#,
3051 ); 3149 );
3052 } 3150 }
3053 3151
@@ -3055,7 +3153,7 @@ fn $0fun_name(n: &mut i32) -> bool {
3055 fn break_loop_nested() { 3153 fn break_loop_nested() {
3056 check_assist( 3154 check_assist(
3057 extract_function, 3155 extract_function,
3058 r##" 3156 r#"
3059fn foo() { 3157fn foo() {
3060 loop { 3158 loop {
3061 let mut n = 1; 3159 let mut n = 1;
@@ -3065,8 +3163,9 @@ fn foo() {
3065 }$0 3163 }$0
3066 let h = 1; 3164 let h = 1;
3067 } 3165 }
3068}"##, 3166}
3069 r##" 3167"#,
3168 r#"
3070fn foo() { 3169fn foo() {
3071 loop { 3170 loop {
3072 let mut n = 1; 3171 let mut n = 1;
@@ -3083,7 +3182,8 @@ fn $0fun_name(n: i32) -> bool {
3083 return true; 3182 return true;
3084 } 3183 }
3085 false 3184 false
3086}"##, 3185}
3186"#,
3087 ); 3187 );
3088 } 3188 }
3089 3189
@@ -3091,7 +3191,7 @@ fn $0fun_name(n: i32) -> bool {
3091 fn return_from_nested_loop() { 3191 fn return_from_nested_loop() {
3092 check_assist( 3192 check_assist(
3093 extract_function, 3193 extract_function,
3094 r##" 3194 r#"
3095fn foo() { 3195fn foo() {
3096 loop { 3196 loop {
3097 let n = 1; 3197 let n = 1;
@@ -3103,8 +3203,9 @@ fn foo() {
3103 let m = k + 1;$0 3203 let m = k + 1;$0
3104 let h = 1 + m; 3204 let h = 1 + m;
3105 } 3205 }
3106}"##, 3206}
3107 r##" 3207"#,
3208 r#"
3108fn foo() { 3209fn foo() {
3109 loop { 3210 loop {
3110 let n = 1; 3211 let n = 1;
@@ -3123,7 +3224,8 @@ fn $0fun_name() -> Option<i32> {
3123 } 3224 }
3124 let m = k + 1; 3225 let m = k + 1;
3125 Some(m) 3226 Some(m)
3126}"##, 3227}
3228"#,
3127 ); 3229 );
3128 } 3230 }
3129 3231
@@ -3131,7 +3233,7 @@ fn $0fun_name() -> Option<i32> {
3131 fn break_from_nested_loop() { 3233 fn break_from_nested_loop() {
3132 check_assist( 3234 check_assist(
3133 extract_function, 3235 extract_function,
3134 r##" 3236 r#"
3135fn foo() { 3237fn foo() {
3136 loop { 3238 loop {
3137 let n = 1; 3239 let n = 1;
@@ -3142,8 +3244,9 @@ fn foo() {
3142 let m = k + 1;$0 3244 let m = k + 1;$0
3143 let h = 1 + m; 3245 let h = 1 + m;
3144 } 3246 }
3145}"##, 3247}
3146 r##" 3248"#,
3249 r#"
3147fn foo() { 3250fn foo() {
3148 loop { 3251 loop {
3149 let n = 1; 3252 let n = 1;
@@ -3159,7 +3262,8 @@ fn $0fun_name() -> i32 {
3159 } 3262 }
3160 let m = k + 1; 3263 let m = k + 1;
3161 m 3264 m
3162}"##, 3265}
3266"#,
3163 ); 3267 );
3164 } 3268 }
3165 3269
@@ -3167,7 +3271,7 @@ fn $0fun_name() -> i32 {
3167 fn break_from_nested_and_outer_loops() { 3271 fn break_from_nested_and_outer_loops() {
3168 check_assist( 3272 check_assist(
3169 extract_function, 3273 extract_function,
3170 r##" 3274 r#"
3171fn foo() { 3275fn foo() {
3172 loop { 3276 loop {
3173 let n = 1; 3277 let n = 1;
@@ -3181,8 +3285,9 @@ fn foo() {
3181 let m = k + 1;$0 3285 let m = k + 1;$0
3182 let h = 1 + m; 3286 let h = 1 + m;
3183 } 3287 }
3184}"##, 3288}
3185 r##" 3289"#,
3290 r#"
3186fn foo() { 3291fn foo() {
3187 loop { 3292 loop {
3188 let n = 1; 3293 let n = 1;
@@ -3204,7 +3309,8 @@ fn $0fun_name() -> Option<i32> {
3204 } 3309 }
3205 let m = k + 1; 3310 let m = k + 1;
3206 Some(m) 3311 Some(m)
3207}"##, 3312}
3313"#,
3208 ); 3314 );
3209 } 3315 }
3210 3316
@@ -3212,7 +3318,7 @@ fn $0fun_name() -> Option<i32> {
3212 fn return_from_nested_fn() { 3318 fn return_from_nested_fn() {
3213 check_assist( 3319 check_assist(
3214 extract_function, 3320 extract_function,
3215 r##" 3321 r#"
3216fn foo() { 3322fn foo() {
3217 loop { 3323 loop {
3218 let n = 1; 3324 let n = 1;
@@ -3223,8 +3329,9 @@ fn foo() {
3223 let m = k + 1;$0 3329 let m = k + 1;$0
3224 let h = 1 + m; 3330 let h = 1 + m;
3225 } 3331 }
3226}"##, 3332}
3227 r##" 3333"#,
3334 r#"
3228fn foo() { 3335fn foo() {
3229 loop { 3336 loop {
3230 let n = 1; 3337 let n = 1;
@@ -3240,7 +3347,8 @@ fn $0fun_name() -> i32 {
3240 } 3347 }
3241 let m = k + 1; 3348 let m = k + 1;
3242 m 3349 m
3243}"##, 3350}
3351"#,
3244 ); 3352 );
3245 } 3353 }
3246 3354
@@ -3248,7 +3356,7 @@ fn $0fun_name() -> i32 {
3248 fn break_with_value() { 3356 fn break_with_value() {
3249 check_assist( 3357 check_assist(
3250 extract_function, 3358 extract_function,
3251 r##" 3359 r#"
3252fn foo() -> i32 { 3360fn foo() -> i32 {
3253 loop { 3361 loop {
3254 let n = 1; 3362 let n = 1;
@@ -3259,8 +3367,9 @@ fn foo() -> i32 {
3259 let m = k + 1;$0 3367 let m = k + 1;$0
3260 let h = 1; 3368 let h = 1;
3261 } 3369 }
3262}"##, 3370}
3263 r##" 3371"#,
3372 r#"
3264fn foo() -> i32 { 3373fn foo() -> i32 {
3265 loop { 3374 loop {
3266 let n = 1; 3375 let n = 1;
@@ -3278,7 +3387,8 @@ fn $0fun_name() -> Option<i32> {
3278 } 3387 }
3279 let m = k + 1; 3388 let m = k + 1;
3280 None 3389 None
3281}"##, 3390}
3391"#,
3282 ); 3392 );
3283 } 3393 }
3284 3394
@@ -3286,7 +3396,7 @@ fn $0fun_name() -> Option<i32> {
3286 fn break_with_value_and_return() { 3396 fn break_with_value_and_return() {
3287 check_assist( 3397 check_assist(
3288 extract_function, 3398 extract_function,
3289 r##" 3399 r#"
3290fn foo() -> i64 { 3400fn foo() -> i64 {
3291 loop { 3401 loop {
3292 let n = 1; 3402 let n = 1;
@@ -3298,8 +3408,9 @@ fn foo() -> i64 {
3298 let m = k + 1;$0 3408 let m = k + 1;$0
3299 let h = 1 + m; 3409 let h = 1 + m;
3300 } 3410 }
3301}"##, 3411}
3302 r##" 3412"#,
3413 r#"
3303fn foo() -> i64 { 3414fn foo() -> i64 {
3304 loop { 3415 loop {
3305 let n = 1; 3416 let n = 1;
@@ -3318,7 +3429,8 @@ fn $0fun_name() -> Result<i32, i64> {
3318 } 3429 }
3319 let m = k + 1; 3430 let m = k + 1;
3320 Ok(m) 3431 Ok(m)
3321}"##, 3432}
3433"#,
3322 ); 3434 );
3323 } 3435 }
3324 3436
@@ -3326,9 +3438,8 @@ fn $0fun_name() -> Result<i32, i64> {
3326 fn try_option() { 3438 fn try_option() {
3327 check_assist( 3439 check_assist(
3328 extract_function, 3440 extract_function,
3329 r##" 3441 r#"
3330enum Option<T> { None, Some(T), } 3442//- minicore: option
3331use Option::*;
3332fn bar() -> Option<i32> { None } 3443fn bar() -> Option<i32> { None }
3333fn foo() -> Option<()> { 3444fn foo() -> Option<()> {
3334 let n = bar()?; 3445 let n = bar()?;
@@ -3336,10 +3447,9 @@ fn foo() -> Option<()> {
3336 let m = k + 1;$0 3447 let m = k + 1;$0
3337 let h = 1 + m; 3448 let h = 1 + m;
3338 Some(()) 3449 Some(())
3339}"##, 3450}
3340 r##" 3451"#,
3341enum Option<T> { None, Some(T), } 3452 r#"
3342use Option::*;
3343fn bar() -> Option<i32> { None } 3453fn bar() -> Option<i32> { None }
3344fn foo() -> Option<()> { 3454fn foo() -> Option<()> {
3345 let n = bar()?; 3455 let n = bar()?;
@@ -3352,7 +3462,8 @@ fn $0fun_name() -> Option<i32> {
3352 let k = foo()?; 3462 let k = foo()?;
3353 let m = k + 1; 3463 let m = k + 1;
3354 Some(m) 3464 Some(m)
3355}"##, 3465}
3466"#,
3356 ); 3467 );
3357 } 3468 }
3358 3469
@@ -3360,19 +3471,17 @@ fn $0fun_name() -> Option<i32> {
3360 fn try_option_unit() { 3471 fn try_option_unit() {
3361 check_assist( 3472 check_assist(
3362 extract_function, 3473 extract_function,
3363 r##" 3474 r#"
3364enum Option<T> { None, Some(T), } 3475//- minicore: option
3365use Option::*;
3366fn foo() -> Option<()> { 3476fn foo() -> Option<()> {
3367 let n = 1; 3477 let n = 1;
3368 $0let k = foo()?; 3478 $0let k = foo()?;
3369 let m = k + 1;$0 3479 let m = k + 1;$0
3370 let h = 1 + n; 3480 let h = 1 + n;
3371 Some(()) 3481 Some(())
3372}"##, 3482}
3373 r##" 3483"#,
3374enum Option<T> { None, Some(T), } 3484 r#"
3375use Option::*;
3376fn foo() -> Option<()> { 3485fn foo() -> Option<()> {
3377 let n = 1; 3486 let n = 1;
3378 fun_name()?; 3487 fun_name()?;
@@ -3384,7 +3493,8 @@ fn $0fun_name() -> Option<()> {
3384 let k = foo()?; 3493 let k = foo()?;
3385 let m = k + 1; 3494 let m = k + 1;
3386 Some(()) 3495 Some(())
3387}"##, 3496}
3497"#,
3388 ); 3498 );
3389 } 3499 }
3390 3500
@@ -3392,19 +3502,17 @@ fn $0fun_name() -> Option<()> {
3392 fn try_result() { 3502 fn try_result() {
3393 check_assist( 3503 check_assist(
3394 extract_function, 3504 extract_function,
3395 r##" 3505 r#"
3396enum Result<T, E> { Ok(T), Err(E), } 3506//- minicore: result
3397use Result::*;
3398fn foo() -> Result<(), i64> { 3507fn foo() -> Result<(), i64> {
3399 let n = 1; 3508 let n = 1;
3400 $0let k = foo()?; 3509 $0let k = foo()?;
3401 let m = k + 1;$0 3510 let m = k + 1;$0
3402 let h = 1 + m; 3511 let h = 1 + m;
3403 Ok(()) 3512 Ok(())
3404}"##, 3513}
3405 r##" 3514"#,
3406enum Result<T, E> { Ok(T), Err(E), } 3515 r#"
3407use Result::*;
3408fn foo() -> Result<(), i64> { 3516fn foo() -> Result<(), i64> {
3409 let n = 1; 3517 let n = 1;
3410 let m = fun_name()?; 3518 let m = fun_name()?;
@@ -3416,7 +3524,8 @@ fn $0fun_name() -> Result<i32, i64> {
3416 let k = foo()?; 3524 let k = foo()?;
3417 let m = k + 1; 3525 let m = k + 1;
3418 Ok(m) 3526 Ok(m)
3419}"##, 3527}
3528"#,
3420 ); 3529 );
3421 } 3530 }
3422 3531
@@ -3424,9 +3533,8 @@ fn $0fun_name() -> Result<i32, i64> {
3424 fn try_option_with_return() { 3533 fn try_option_with_return() {
3425 check_assist( 3534 check_assist(
3426 extract_function, 3535 extract_function,
3427 r##" 3536 r#"
3428enum Option<T> { None, Some(T) } 3537//- minicore: option
3429use Option::*;
3430fn foo() -> Option<()> { 3538fn foo() -> Option<()> {
3431 let n = 1; 3539 let n = 1;
3432 $0let k = foo()?; 3540 $0let k = foo()?;
@@ -3436,10 +3544,9 @@ fn foo() -> Option<()> {
3436 let m = k + 1;$0 3544 let m = k + 1;$0
3437 let h = 1 + m; 3545 let h = 1 + m;
3438 Some(()) 3546 Some(())
3439}"##, 3547}
3440 r##" 3548"#,
3441enum Option<T> { None, Some(T) } 3549 r#"
3442use Option::*;
3443fn foo() -> Option<()> { 3550fn foo() -> Option<()> {
3444 let n = 1; 3551 let n = 1;
3445 let m = fun_name()?; 3552 let m = fun_name()?;
@@ -3454,7 +3561,8 @@ fn $0fun_name() -> Option<i32> {
3454 } 3561 }
3455 let m = k + 1; 3562 let m = k + 1;
3456 Some(m) 3563 Some(m)
3457}"##, 3564}
3565"#,
3458 ); 3566 );
3459 } 3567 }
3460 3568
@@ -3462,9 +3570,8 @@ fn $0fun_name() -> Option<i32> {
3462 fn try_result_with_return() { 3570 fn try_result_with_return() {
3463 check_assist( 3571 check_assist(
3464 extract_function, 3572 extract_function,
3465 r##" 3573 r#"
3466enum Result<T, E> { Ok(T), Err(E), } 3574//- minicore: result
3467use Result::*;
3468fn foo() -> Result<(), i64> { 3575fn foo() -> Result<(), i64> {
3469 let n = 1; 3576 let n = 1;
3470 $0let k = foo()?; 3577 $0let k = foo()?;
@@ -3474,10 +3581,9 @@ fn foo() -> Result<(), i64> {
3474 let m = k + 1;$0 3581 let m = k + 1;$0
3475 let h = 1 + m; 3582 let h = 1 + m;
3476 Ok(()) 3583 Ok(())
3477}"##, 3584}
3478 r##" 3585"#,
3479enum Result<T, E> { Ok(T), Err(E), } 3586 r#"
3480use Result::*;
3481fn foo() -> Result<(), i64> { 3587fn foo() -> Result<(), i64> {
3482 let n = 1; 3588 let n = 1;
3483 let m = fun_name()?; 3589 let m = fun_name()?;
@@ -3492,7 +3598,8 @@ fn $0fun_name() -> Result<i32, i64> {
3492 } 3598 }
3493 let m = k + 1; 3599 let m = k + 1;
3494 Ok(m) 3600 Ok(m)
3495}"##, 3601}
3602"#,
3496 ); 3603 );
3497 } 3604 }
3498 3605
@@ -3501,9 +3608,8 @@ fn $0fun_name() -> Result<i32, i64> {
3501 cov_mark::check!(external_control_flow_try_and_bc); 3608 cov_mark::check!(external_control_flow_try_and_bc);
3502 check_assist_not_applicable( 3609 check_assist_not_applicable(
3503 extract_function, 3610 extract_function,
3504 r##" 3611 r#"
3505enum Option<T> { None, Some(T) } 3612//- minicore: option
3506use Option::*;
3507fn foo() -> Option<()> { 3613fn foo() -> Option<()> {
3508 loop { 3614 loop {
3509 let n = Some(1); 3615 let n = Some(1);
@@ -3514,7 +3620,8 @@ fn foo() -> Option<()> {
3514 let r = n + k; 3620 let r = n + k;
3515 } 3621 }
3516 Some(()) 3622 Some(())
3517}"##, 3623}
3624"#,
3518 ); 3625 );
3519 } 3626 }
3520 3627
@@ -3523,9 +3630,8 @@ fn foo() -> Option<()> {
3523 cov_mark::check!(external_control_flow_try_and_return_non_err); 3630 cov_mark::check!(external_control_flow_try_and_return_non_err);
3524 check_assist_not_applicable( 3631 check_assist_not_applicable(
3525 extract_function, 3632 extract_function,
3526 r##" 3633 r#"
3527enum Result<T, E> { Ok(T), Err(E), } 3634//- minicore: result
3528use Result::*;
3529fn foo() -> Result<(), i64> { 3635fn foo() -> Result<(), i64> {
3530 let n = 1; 3636 let n = 1;
3531 $0let k = foo()?; 3637 $0let k = foo()?;
@@ -3535,7 +3641,8 @@ fn foo() -> Result<(), i64> {
3535 let m = k + 1;$0 3641 let m = k + 1;$0
3536 let h = 1 + m; 3642 let h = 1 + m;
3537 Ok(()) 3643 Ok(())
3538}"##, 3644}
3645"#,
3539 ); 3646 );
3540 } 3647 }
3541 3648
@@ -3543,7 +3650,7 @@ fn foo() -> Result<(), i64> {
3543 fn param_usage_in_macro() { 3650 fn param_usage_in_macro() {
3544 check_assist( 3651 check_assist(
3545 extract_function, 3652 extract_function,
3546 r" 3653 r#"
3547macro_rules! m { 3654macro_rules! m {
3548 ($val:expr) => { $val }; 3655 ($val:expr) => { $val };
3549} 3656}
@@ -3552,8 +3659,9 @@ fn foo() {
3552 let n = 1; 3659 let n = 1;
3553 $0let k = n * m!(n);$0 3660 $0let k = n * m!(n);$0
3554 let m = k + 1; 3661 let m = k + 1;
3555}", 3662}
3556 r" 3663"#,
3664 r#"
3557macro_rules! m { 3665macro_rules! m {
3558 ($val:expr) => { $val }; 3666 ($val:expr) => { $val };
3559} 3667}
@@ -3567,7 +3675,8 @@ fn foo() {
3567fn $0fun_name(n: i32) -> i32 { 3675fn $0fun_name(n: i32) -> i32 {
3568 let k = n * m!(n); 3676 let k = n * m!(n);
3569 k 3677 k
3570}", 3678}
3679"#,
3571 ); 3680 );
3572 } 3681 }
3573 3682
@@ -3575,7 +3684,8 @@ fn $0fun_name(n: i32) -> i32 {
3575 fn extract_with_await() { 3684 fn extract_with_await() {
3576 check_assist( 3685 check_assist(
3577 extract_function, 3686 extract_function,
3578 r#"fn main() { 3687 r#"
3688fn main() {
3579 $0some_function().await;$0 3689 $0some_function().await;$0
3580} 3690}
3581 3691
@@ -3585,7 +3695,7 @@ async fn some_function() {
3585"#, 3695"#,
3586 r#" 3696 r#"
3587fn main() { 3697fn main() {
3588 fun_name(); 3698 fun_name().await;
3589} 3699}
3590 3700
3591async fn $0fun_name() { 3701async fn $0fun_name() {
@@ -3603,7 +3713,8 @@ async fn some_function() {
3603 fn extract_with_await_in_args() { 3713 fn extract_with_await_in_args() {
3604 check_assist( 3714 check_assist(
3605 extract_function, 3715 extract_function,
3606 r#"fn main() { 3716 r#"
3717fn main() {
3607 $0function_call("a", some_function().await);$0 3718 $0function_call("a", some_function().await);$0
3608} 3719}
3609 3720
@@ -3613,7 +3724,7 @@ async fn some_function() {
3613"#, 3724"#,
3614 r#" 3725 r#"
3615fn main() { 3726fn main() {
3616 fun_name(); 3727 fun_name().await;
3617} 3728}
3618 3729
3619async fn $0fun_name() { 3730async fn $0fun_name() {