diff options
author | Andreas Rottmann <a.rottmann@gmx.at> | 2009-03-19 01:01:58 +0100 |
---|---|---|
committer | Andreas Rottmann <a.rottmann@gmx.at> | 2009-03-19 01:01:58 +0100 |
commit | 23e6fa6993c046de032598127ea48d4a7ee00935 (patch) | |
tree | 45cad6ff863aa10091f32c728f73f8b5e9ad87cf /giscanner/annotationparser.py | |
parent | 888566c41b4f0d73ec80307d0418ab1d44c7210c (diff) | |
download | gobject-introspection-23e6fa6993c046de032598127ea48d4a7ee00935.tar.gz |
Bug 556475 – support Shadows: annotation
Add support for the 'Rename To:' annotation for functions and methods.
Diffstat (limited to 'giscanner/annotationparser.py')
-rw-r--r-- | giscanner/annotationparser.py | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/giscanner/annotationparser.py b/giscanner/annotationparser.py index e94afa34..fae839f0 100644 --- a/giscanner/annotationparser.py +++ b/giscanner/annotationparser.py @@ -47,6 +47,7 @@ TAG_DEPRECATED = 'deprecated' TAG_RETURNS = 'returns' TAG_RETURNS_ALT = 'return value' TAG_ATTRIBUTES = 'attributes' +TAG_RENAME_TO = 'rename to' # Options - annotations for parameters and return values OPT_ALLOW_NONE = 'allow-none' @@ -103,6 +104,8 @@ class DocTag(object): self.options = {} self.comment = None + def __repr__(self): + return '<DocTag %r %r>' % (self.name, self.options) class Option(object): @@ -270,8 +273,10 @@ class AnnotationApplier(object): return block.get(tag_name) def parse(self, namespace): - for node in namespace.nodes: + self._namespace = namespace + for node in namespace.nodes[:]: self._parse_node(node) + del self._namespace # Boring parsing boilerplate. @@ -409,6 +414,7 @@ class AnnotationApplier(object): def _parse_function(self, func): block = self._blocks.get(func.symbol) self._parse_callable(func, block) + self._parse_rename_to_func(func, block) def _parse_signal(self, parent, signal): block = self._blocks.get('%s::%s' % (parent.type_name, signal.name)) @@ -646,6 +652,24 @@ class AnnotationApplier(object): for key, value in annos_tag.options.iteritems(): node.attributes.append((key, value.one())) + def _parse_rename_to_func(self, node, block): + rename_to_tag = self._get_tag(block, TAG_RENAME_TO) + if rename_to_tag is None: + return + new_name = rename_to_tag.value + + shadowed = [] + + def shadowed_filter(n): + if isinstance(n, Function) and n.symbol == new_name: + shadowed.append(n) + return False + return True + + self._namespace.remove_matching(shadowed_filter) + assert len(shadowed) == 1 + node.name = shadowed[0].name + def _guess_direction(self, node): if node.direction: return node.direction |