MCPcopy Index your code
hub / github.com/python/cpython / _ModuleBrowser

Class _ModuleBrowser

Lib/pyclbr.py:185–265  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

183
184
185class _ModuleBrowser(ast.NodeVisitor):
186 def __init__(self, module, path, file, tree, inpackage):
187 self.path = path
188 self.tree = tree
189 self.file = file
190 self.module = module
191 self.inpackage = inpackage
192 self.stack = []
193
194 def visit_ClassDef(self, node):
195 bases = []
196 for base in node.bases:
197 name = ast.unparse(base)
198 if name in self.tree:
199 # We know this super class.
200 bases.append(self.tree[name])
201 elif len(names := name.split(".")) > 1:
202 # Super class form is module.class:
203 # look in module for class.
204 *_, module, class_ = names
205 if module in _modules:
206 bases.append(_modules[module].get(class_, name))
207 else:
208 bases.append(name)
209
210 parent = self.stack[-1] if self.stack else None
211 class_ = Class(self.module, node.name, bases, self.file, node.lineno,
212 parent=parent, end_lineno=node.end_lineno)
213 if parent is None:
214 self.tree[node.name] = class_
215 self.stack.append(class_)
216 self.generic_visit(node)
217 self.stack.pop()
218
219 def visit_FunctionDef(self, node, *, is_async=False):
220 parent = self.stack[-1] if self.stack else None
221 function = Function(self.module, node.name, self.file, node.lineno,
222 parent, is_async, end_lineno=node.end_lineno)
223 if parent is None:
224 self.tree[node.name] = function
225 self.stack.append(function)
226 self.generic_visit(node)
227 self.stack.pop()
228
229 def visit_AsyncFunctionDef(self, node):
230 self.visit_FunctionDef(node, is_async=True)
231
232 def visit_Import(self, node):
233 if node.col_offset != 0:
234 return
235
236 for module in node.names:
237 try:
238 try:
239 _readmodule(module.name, self.path, self.inpackage)
240 except ImportError:
241 _readmodule(module.name, [])
242 except (ImportError, SyntaxError):

Callers 1

_create_treeFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…