Remove async function Has Fix
Description
The async keyword in Python is used to define asynchronous functions that can be awaited.
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_BODYExample
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