diff options
author | Dan Winship <danw@gnome.org> | 2009-03-28 10:07:37 -0400 |
---|---|---|
committer | Colin Walters <walters@verbum.org> | 2009-08-24 15:19:28 -0400 |
commit | 7549c8053d0229a12d9196cc8abae54a01a555d0 (patch) | |
tree | 5bdc45428afe2bff2dae78b926f142a788c2129d | |
parent | 4ba8fa2f8a63bf658406f60e4d3a1f9cc5586ea4 (diff) | |
download | gobject-introspection-7549c8053d0229a12d9196cc8abae54a01a555d0.tar.gz |
Bug 556628 – (skip) annotation
Adds a (skip) option that can be added to the header of any doc comment
to cause that symbol to be skipped in the .gir output
-rw-r--r-- | giscanner/annotationparser.py | 7 | ||||
-rw-r--r-- | giscanner/ast.py | 1 | ||||
-rw-r--r-- | giscanner/girwriter.py | 3 | ||||
-rw-r--r-- | tests/scanner/foo.c | 21 | ||||
-rw-r--r-- | tests/scanner/foo.h | 7 |
5 files changed, 38 insertions, 1 deletions
diff --git a/giscanner/annotationparser.py b/giscanner/annotationparser.py index 79cbfe8a..1cedfb9c 100644 --- a/giscanner/annotationparser.py +++ b/giscanner/annotationparser.py @@ -63,6 +63,7 @@ OPT_TRANSFER = 'transfer' OPT_TYPE = 'type' OPT_CLOSURE = 'closure' OPT_DESTROY = 'destroy' +OPT_SKIP = 'skip' # Specific option values OPT_VAL_BITFIELD = 'bitfield' @@ -697,6 +698,7 @@ class AnnotationApplier(object): self._parse_version(node, block) self._parse_deprecated(node, block) self._parse_attributes(node, block) + self._parse_skip(node, block) def _parse_version(self, node, block): since_tag = self._get_tag(block, TAG_SINCE) @@ -725,6 +727,11 @@ class AnnotationApplier(object): for key, value in annos_tag.options.iteritems(): node.attributes.append((key, value.one())) + def _parse_skip(self, node, block): + if block is not None: + if OPT_SKIP in block.options: + node.skip = True + def _parse_rename_to_func(self, node, block): rename_to_tag = self._get_tag(block, TAG_RENAME_TO) if rename_to_tag is None: diff --git a/giscanner/ast.py b/giscanner/ast.py index 911cc2bc..5e2a010d 100644 --- a/giscanner/ast.py +++ b/giscanner/ast.py @@ -152,6 +152,7 @@ class Node(object): def __init__(self, name=None): self.name = name self.attributes = [] # (key, value)* + self.skip = False self.deprecated = None self.deprecated_version = None self.version = None diff --git a/giscanner/girwriter.py b/giscanner/girwriter.py index 7725a38d..7697a2df 100644 --- a/giscanner/girwriter.py +++ b/giscanner/girwriter.py @@ -96,7 +96,8 @@ and/or use gtk-doc annotations. ''') else: return cmp(a, b) for node in sorted(namespace.nodes, cmp=nscmp): - self._write_node(node) + if not node.skip: + self._write_node(node) def _write_node(self, node): if isinstance(node, Function): diff --git a/tests/scanner/foo.c b/tests/scanner/foo.c index 6cb1f3f4..e810b522 100644 --- a/tests/scanner/foo.c +++ b/tests/scanner/foo.c @@ -579,3 +579,24 @@ foo_buffer_some_method (FooBuffer *buffer) } #define FOO_DEFINE_SHOULD_NOT_BE_EXPOSED "should not be exposed" + +/** + * FooSkippable: (skip) + * @FOO_SKIPPABLE_ONE: a skippable enum value + * @FOO_SKIPPABLE_TWO: another skippable enum value + * + * Some type that is only interesting from C and should not be + * exposed to language bindings. + */ + +/** + * foo_skip_me: (skip) + * @fs: a #FooSkippable + * + * Does something that's only interesting from C and should not be + * exposed to language bindings. + */ +void +foo_skip_me (FooSkippable fs) +{ +} diff --git a/tests/scanner/foo.h b/tests/scanner/foo.h index be3a9554..2e018cea 100644 --- a/tests/scanner/foo.h +++ b/tests/scanner/foo.h @@ -363,4 +363,11 @@ typedef enum void foo_some_variant (guint x, va_list args); void foo_some_variant_ptr (guint x, va_list *args); +/* Should be skipped due to annotations */ +typedef enum { + FOO_SKIPPABLE_ONE, + FOO_SKIPPABLE_TWO +} FooSkippable; +void foo_skip_me (FooSkippable fs); + #endif /* __FOO_OBJECT_H__ */ |