/usr/share/pyshared/bike/query/getReferencesToModule.py is in bicyclerepair 0.9-6.1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | from __future__ import generators
from bike.query.common import Match, globalScanForMatches, getScopeForLine, MatchFinder
from getTypeOf import getTypeOf, getTypeOfExpr
import compiler
import re
def getReferencesToModule(root, fqn):
modulename = fqn.split(".")[-1]
moduleobj = getTypeOf(root, fqn)
moduleRefFinder = ModuleRefFinder(moduleobj)
for ref in globalScanForMatches(moduleRefFinder, modulename):
yield ref
class ModuleRefFinder(MatchFinder):
def __init__(self, targetmodule):
self.targetmodule = targetmodule
def visitName(self, node):
if node.name == self.targetmodule.name:
if getTypeOfExpr(self.scope, node) == self.targetmodule:
self.appendMatch(node.name)
self.popWordsUpTo(node.name)
def visitImport(self, node):
for name, alias in node.names:
if name.split(".")[-1] == self.targetmodule.name:
if getTypeOf(self.scope, name) == self.targetmodule:
self.appendMatch(self.targetmodule.name)
for nameelem in name.split("."):
self.popWordsUpTo(nameelem)
if alias is not None:
self.popWordsUpTo(alias)
def visitGetattr(self, node):
for c in node.getChildNodes():
self.visit(c)
if node.attrname == self.targetmodule.name:
if getTypeOfExpr(self.scope, node) == self.targetmodule:
self.appendMatch(self.targetmodule.name)
self.popWordsUpTo(node.attrname)
def visitFrom(self, node):
for elem in node.modname.split("."):
if elem == self.targetmodule.name:
getTypeOf(self.scope, elem) == self.targetmodule
self.appendMatch(self.targetmodule.name)
self.popWordsUpTo(elem)
for name, alias in node.names:
if name == self.targetmodule.name:
if alias and \
getTypeOf(self.scope, alias) == self.targetmodule:
self.appendMatch(self.targetmodule.name)
elif getTypeOf(self.scope, name) == self.targetmodule:
self.appendMatch(self.targetmodule.name)
if name != "*":
self.popWordsUpTo(name)
if alias is not None:
self.popWordsUpTo(alias)
|