Skip to content

Commit 55fc0e8

Browse files
Treat match and case as soft keywords in lambda assignments (#4623)
1 parent 713dd2b commit 55fc0e8

File tree

3 files changed

+243
-1
lines changed

3 files changed

+243
-1
lines changed

parser/src/parser.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -604,6 +604,8 @@ match match:
604604
case 1: pass
605605
case 2:
606606
pass
607+
match = lambda query: query == event
608+
print(match(12))
607609
"#,
608610
"<test>",
609611
)

parser/src/snapshots/rustpython_parser__parser__tests__match_as_identifier.snap

Lines changed: 236 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1671,4 +1671,240 @@ expression: parse_ast
16711671
],
16721672
},
16731673
},
1674+
Located {
1675+
location: Location {
1676+
row: 21,
1677+
column: 0,
1678+
},
1679+
end_location: Some(
1680+
Location {
1681+
row: 21,
1682+
column: 36,
1683+
},
1684+
),
1685+
custom: (),
1686+
node: Assign {
1687+
targets: [
1688+
Located {
1689+
location: Location {
1690+
row: 21,
1691+
column: 0,
1692+
},
1693+
end_location: Some(
1694+
Location {
1695+
row: 21,
1696+
column: 5,
1697+
},
1698+
),
1699+
custom: (),
1700+
node: Name {
1701+
id: "match",
1702+
ctx: Store,
1703+
},
1704+
},
1705+
],
1706+
value: Located {
1707+
location: Location {
1708+
row: 21,
1709+
column: 8,
1710+
},
1711+
end_location: Some(
1712+
Location {
1713+
row: 21,
1714+
column: 36,
1715+
},
1716+
),
1717+
custom: (),
1718+
node: Lambda {
1719+
args: Arguments {
1720+
posonlyargs: [],
1721+
args: [
1722+
Located {
1723+
location: Location {
1724+
row: 21,
1725+
column: 15,
1726+
},
1727+
end_location: Some(
1728+
Location {
1729+
row: 21,
1730+
column: 20,
1731+
},
1732+
),
1733+
custom: (),
1734+
node: ArgData {
1735+
arg: "query",
1736+
annotation: None,
1737+
type_comment: None,
1738+
},
1739+
},
1740+
],
1741+
vararg: None,
1742+
kwonlyargs: [],
1743+
kw_defaults: [],
1744+
kwarg: None,
1745+
defaults: [],
1746+
},
1747+
body: Located {
1748+
location: Location {
1749+
row: 21,
1750+
column: 22,
1751+
},
1752+
end_location: Some(
1753+
Location {
1754+
row: 21,
1755+
column: 36,
1756+
},
1757+
),
1758+
custom: (),
1759+
node: Compare {
1760+
left: Located {
1761+
location: Location {
1762+
row: 21,
1763+
column: 22,
1764+
},
1765+
end_location: Some(
1766+
Location {
1767+
row: 21,
1768+
column: 27,
1769+
},
1770+
),
1771+
custom: (),
1772+
node: Name {
1773+
id: "query",
1774+
ctx: Load,
1775+
},
1776+
},
1777+
ops: [
1778+
Eq,
1779+
],
1780+
comparators: [
1781+
Located {
1782+
location: Location {
1783+
row: 21,
1784+
column: 31,
1785+
},
1786+
end_location: Some(
1787+
Location {
1788+
row: 21,
1789+
column: 36,
1790+
},
1791+
),
1792+
custom: (),
1793+
node: Name {
1794+
id: "event",
1795+
ctx: Load,
1796+
},
1797+
},
1798+
],
1799+
},
1800+
},
1801+
},
1802+
},
1803+
type_comment: None,
1804+
},
1805+
},
1806+
Located {
1807+
location: Location {
1808+
row: 22,
1809+
column: 0,
1810+
},
1811+
end_location: Some(
1812+
Location {
1813+
row: 22,
1814+
column: 16,
1815+
},
1816+
),
1817+
custom: (),
1818+
node: Expr {
1819+
value: Located {
1820+
location: Location {
1821+
row: 22,
1822+
column: 0,
1823+
},
1824+
end_location: Some(
1825+
Location {
1826+
row: 22,
1827+
column: 16,
1828+
},
1829+
),
1830+
custom: (),
1831+
node: Call {
1832+
func: Located {
1833+
location: Location {
1834+
row: 22,
1835+
column: 0,
1836+
},
1837+
end_location: Some(
1838+
Location {
1839+
row: 22,
1840+
column: 5,
1841+
},
1842+
),
1843+
custom: (),
1844+
node: Name {
1845+
id: "print",
1846+
ctx: Load,
1847+
},
1848+
},
1849+
args: [
1850+
Located {
1851+
location: Location {
1852+
row: 22,
1853+
column: 6,
1854+
},
1855+
end_location: Some(
1856+
Location {
1857+
row: 22,
1858+
column: 15,
1859+
},
1860+
),
1861+
custom: (),
1862+
node: Call {
1863+
func: Located {
1864+
location: Location {
1865+
row: 22,
1866+
column: 6,
1867+
},
1868+
end_location: Some(
1869+
Location {
1870+
row: 22,
1871+
column: 11,
1872+
},
1873+
),
1874+
custom: (),
1875+
node: Name {
1876+
id: "match",
1877+
ctx: Load,
1878+
},
1879+
},
1880+
args: [
1881+
Located {
1882+
location: Location {
1883+
row: 22,
1884+
column: 12,
1885+
},
1886+
end_location: Some(
1887+
Location {
1888+
row: 22,
1889+
column: 14,
1890+
},
1891+
),
1892+
custom: (),
1893+
node: Constant {
1894+
value: Int(
1895+
12,
1896+
),
1897+
kind: None,
1898+
},
1899+
},
1900+
],
1901+
keywords: [],
1902+
},
1903+
},
1904+
],
1905+
keywords: [],
1906+
},
1907+
},
1908+
},
1909+
},
16741910
]

parser/src/soft_keywords.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,15 @@ where
5959
let mut nesting = 0;
6060
let mut first = true;
6161
let mut seen_colon = false;
62+
let mut seen_lambda = false;
6263
while let Some(Ok((_, tok, _))) = self.underlying.peek() {
6364
match tok {
6465
Tok::Newline => break,
66+
Tok::Lambda if nesting == 0 => seen_lambda = true,
6567
Tok::Colon if nesting == 0 => {
66-
if !first {
68+
if seen_lambda {
69+
seen_lambda = false;
70+
} else if !first {
6771
seen_colon = true;
6872
}
6973
}

0 commit comments

Comments
 (0)