diff options
| author | Sylvain Thénault <sylvain.thenault@logilab.fr> | 2013-06-18 18:18:45 +0200 |
|---|---|---|
| committer | Sylvain Thénault <sylvain.thenault@logilab.fr> | 2013-06-18 18:18:45 +0200 |
| commit | 97c3f5dddd151494effe5150663f83c71e77354c (patch) | |
| tree | 566cbe4ef5dfc41a23d8af3824c059b15cbe6e6a /manager.py | |
| parent | fc02b9e6bc453e0413e324c7a458b5871277744c (diff) | |
| download | astroid-git-97c3f5dddd151494effe5150663f83c71e77354c.tar.gz | |
[transforms] allow transformation functions on any nodes, not only modules
Diffstat (limited to 'manager.py')
| -rw-r--r-- | manager.py | 13 |
1 files changed, 10 insertions, 3 deletions
@@ -83,7 +83,7 @@ class AstroidManager(OptionsProviderMixIn): # NOTE: cache entries are added by the [re]builder self.astroid_cache = {} self._mod_file_cache = {} - self.transformers = [] + self.transforms = {} def astroid_from_file(self, filepath, modname=None, fallback=True, source=False): """given a module name, return the astroid object""" @@ -263,8 +263,15 @@ class AstroidManager(OptionsProviderMixIn): project.add_module(astroid) return project - def register_transformer(self, transformer): - self.transformers.append(transformer) + def register_transform(self, node_class, transform, predicate=None): + """Register `transform(node)` function to be applied on the given + Astroid's `node_class` if `predicate` is None or return a true value + when called with the node as argument. + + The transform function may return a value which is then used to + substitute the original node in the tree. + """ + self.transforms.setdefault(node_class, []).append( (transform, predicate) ) class Project: """a project handle a set of modules / packages""" |
