
Reiz.io est un moteur de recherche de code source structurel pour Python. Par rapport aux alternatives populaires (par exemple, la recherche de code GitHub), il exécute des requêtes sur les arbres de syntaxe (au lieu du code source brut) et essaie de récupérer les connaissances structurelles (aucune sémantique appliquée). Pour plus d'informations, veuillez consulter les documents.
Reiz est le cadre de recherche de code sur lequel Reiz.io est construit un haut. En raison de sa nature, il fonctionne uniquement avec les AST et évite intentionnellement de faire un travail sémantique.
Some ASTs attach a bit of contextual knowledge (e.g `Name(ctx=...)`
on python) which can be queried through simple matcher queries but
reiz.io doesn't include them when comparing references (see
matchers#reference-matcher for details).
Voici une simple requête Reizql qui recherche une fonction qui se termine par une instruction TRY où nous renvoyons un appel à une fonction qui a le même nom que la fonction dans laquelle nous nous trouvons.
FunctionDef ( ~ func , body = [ * ..., Try ( body = [ Return ( Call ( Name ( ~ func )))])])qui correspondrait à ce qui suit;
def foo ( spam ):
eggs = bar ()
try :
return foo ( spam + eggs )
except ValueError :
return NoneDans le sens très basique, il génère l'AST du code ci-dessus et vérifie s'il s'adapte au modèle (reizql requête) ou non.
FunctionDef (
name = 'foo' ,
args = arguments (
posonlyargs = [],
args = [ arg ( arg = 'spam' , annotation = None , type_comment = None )],
vararg = None ,
kwonlyargs = [],
kw_defaults = [],
kwarg = None ,
defaults = [],
),
body = [
Assign (
targets = [ Name ( id = 'eggs' , ctx = Store ())],
value = Call (
func = Name ( id = 'bar' , ctx = Load ()),
args = [],
keywords = [],
),
type_comment = None ,
),
Try (
body = [
Return (
value = Call (
func = Name ( id = 'foo' , ctx = Load ()),
args = [
BinOp (
left = Name ( id = 'spam' , ctx = Load ()),
op = Add (),
right = Name ( id = 'eggs' , ctx = Load ()),
),
],
keywords = [],
),
),
],
handlers = [
ExceptHandler (
type = Name ( id = 'ValueError' , ctx = Load ()),
name = None ,
body = [
Return (
value = Constant ( value = None , kind = None ),
),
],
),
],
orelse = [],
finalbody = [],
),
],
decorator_list = [],
returns = None ,
type_comment = None ,
)