summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJasper St. Pierre <jstpierre@mecheye.net>2013-02-03 10:39:36 -0500
committerJasper St. Pierre <jstpierre@mecheye.net>2013-02-07 04:29:15 -0500
commit06f2eb7c305bb717edeec84ebf39b113bf3481a5 (patch)
tree7f2dbc53e1eff336939ed26f697064c24edb86f4
parente9887d2a856a963c93ddbfdf1f8d40910555b78b (diff)
downloadgobject-introspection-06f2eb7c305bb717edeec84ebf39b113bf3481a5.tar.gz
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
-rw-r--r--giscanner/transformer.py14
-rw-r--r--tests/warn/unknown-parameter.h20
2 files changed, 29 insertions, 5 deletions
diff --git a/giscanner/transformer.py b/giscanner/transformer.py
index ba7afb93..25857b73 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 3d339b32..384704df 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