summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Winship <danw@gnome.org>2009-03-28 10:07:37 -0400
committerColin Walters <walters@verbum.org>2009-08-24 15:19:28 -0400
commit7549c8053d0229a12d9196cc8abae54a01a555d0 (patch)
tree5bdc45428afe2bff2dae78b926f142a788c2129d
parent4ba8fa2f8a63bf658406f60e4d3a1f9cc5586ea4 (diff)
downloadgobject-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.py7
-rw-r--r--giscanner/ast.py1
-rw-r--r--giscanner/girwriter.py3
-rw-r--r--tests/scanner/foo.c21
-rw-r--r--tests/scanner/foo.h7
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__ */