[gobject-introspection] transformer: Warn on unnamed params in declarations



commit 06f2eb7c305bb717edeec84ebf39b113bf3481a5
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Sun Feb 3 10:39:36 2013 -0500

    transformer: Warn on unnamed params in declarations
    
    These params are unannotatable and undocumentable. They really
    should not be allowed.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=693098

 giscanner/transformer.py       |   14 +++++++++-----
 tests/warn/unknown-parameter.h |   20 ++++++++++++++++++++
 2 files changed, 29 insertions(+), 5 deletions(-)
---
diff --git a/giscanner/transformer.py b/giscanner/transformer.py
index ba7afb9..25857b7 100644
--- a/giscanner/transformer.py
+++ b/giscanner/transformer.py
@@ -410,7 +410,7 @@ raise ValueError."""
         # Drop functions that start with _ very early on here
         if symbol.ident.startswith('_'):
             return None
-        parameters = list(self._create_parameters(symbol.base_type))
+        parameters = list(self._create_parameters(symbol, symbol.base_type))
         return_ = self._create_return(symbol.base_type.base_type)
         try:
             name = self._strip_symbol(symbol)
@@ -478,11 +478,11 @@ raise ValueError."""
 
         return value
 
-    def _create_parameters(self, base_type):
+    def _create_parameters(self, symbol, base_type):
         # warn if we see annotations for unknown parameters
         param_names = set(child.ident for child in base_type.child_list)
         for child in base_type.child_list:
-            yield self._create_parameter(child)
+            yield self._create_parameter(symbol, child)
 
     def _synthesize_union_type(self, symbol, parent_symbol):
         # Synthesize a named union so that it can be referenced.
@@ -695,11 +695,15 @@ raise ValueError."""
             return container
         return ast.Type(ctype=ctype, is_const=is_const, complete_ctype=complete_ctype)
 
-    def _create_parameter(self, symbol):
+    def _create_parameter(self, parent_symbol, symbol):
         if symbol.type == CSYMBOL_TYPE_ELLIPSIS:
             ptype = ast.Varargs()
         else:
             ptype = self._create_type_from_base(symbol.base_type, is_parameter=True)
+
+        if symbol.ident is None and symbol.base_type and symbol.base_type.type != CTYPE_VOID:
+            message.warn_symbol(parent_symbol, "missing parameter name; undocumentable")
+
         return ast.Parameter(symbol.ident, ptype)
 
     def _create_return(self, source_type):
@@ -835,7 +839,7 @@ raise ValueError."""
         return self._create_compound(ast.Union, symbol, anonymous)
 
     def _create_callback(self, symbol, member=False):
-        parameters = list(self._create_parameters(symbol.base_type.base_type))
+        parameters = list(self._create_parameters(symbol, symbol.base_type.base_type))
         retval = self._create_return(symbol.base_type.base_type.base_type)
 
         # Mark the 'user_data' arguments
diff --git a/tests/warn/unknown-parameter.h b/tests/warn/unknown-parameter.h
index 3d339b3..384704d 100644
--- a/tests/warn/unknown-parameter.h
+++ b/tests/warn/unknown-parameter.h
@@ -46,3 +46,23 @@ void test_param_missing(void);
 void test_param_varargs(int i, ...);
 
 // Should not warn
+
+/**
+ * test_undocumentable_param:
+ */
+void test_undocumentable_param(int);
+
+// EXPECT:53: Warning: Test: symbol='test_undocumentable_param': missing parameter name; undocumentable
+
+void test_undocumentable_param_2(int a, int);
+
+// EXPECT:57: Warning: Test: symbol='test_undocumentable_param_2': missing parameter name; undocumentable
+
+void test_undocumentable_param_3(int, int);
+
+// EXPECT:61: Warning: Test: symbol='test_undocumentable_param_3': missing parameter name; undocumentable
+// EXPECT:61: Warning: Test: symbol='test_undocumentable_param_3': missing parameter name; undocumentable
+
+void test_void(void);
+
+// Should not warn


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]