right now I am working on a project for a university course. I got some random functions and most of them have a if-raise-statement in the code somewhere.
I try to find those, but only those 1 or 2 lines. I transform the functions into an AST and then visit it using libcst. I extend the visitor class, search for if-nodes and then match for raise-nodes. However this also matches and saves statements that are like if-if-raise or if-else-raise.
I hope someone can help me on how to modify the matcher to only match if-nodes directly followed by 1 raise node. (Sequence wildcard matchers would be awesome, but as far as I understand it they cannot be matched to find sequences of nodes.)
import libcst as cst
import libcst.matchers as m
class FindIfRaise(cst.CSTVisitor):
if_raise = []
# INIT
def __init__(self):
self.if_raise = []
def visit_If(self, node: cst.If):
try:
if m.findall(node, m.Raise()):
self.if_raise.append(node)
Thanks in advance for any help.