Remove async
function Has Fix
Description
The async
keyword in Python is used to define asynchronous functions that can be await
ed.
In this example, we want to remove the async
keyword from a function definition and replace it with a synchronous version of the function. We also need to remove the await
keyword from the function body.
By default, ast-grep will not apply overlapping replacements. This means await
keywords will not be modified because they are inside the async function body.
However, we can use the rewriter
to apply changes inside the matched function body.
YAML
yaml
id: remove-async-def
language: python
rule:
# match async function definition
pattern:
context: 'async def $FUNC($$$ARGS): $$$BODY'
selector: function_definition
rewriters:
# define a rewriter to remove the await keyword
remove-await-call:
pattern: 'await $$$CALL'
fix: $$$CALL # remove await keyword
# apply the rewriter to the function body
transform:
REMOVED_BODY:
rewrite:
rewriters: [remove-await-call]
source: $$$BODY
fix: |-
def $FUNC($$$ARGS):
$REMOVED_BODY
Example
python
async def main3():
await somecall(1, 5)
Diff
python
async def main3():
await somecall(1, 5)
def main3():
somecall(1, 5)
Contributed by
Inspired by the ast-grep issue #1185