summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJasper St. Pierre <jstpierre@mecheye.net>2012-02-12 18:52:20 -0500
committerJasper St. Pierre <jstpierre@mecheye.net>2012-02-13 10:59:07 -0500
commitc58b33abfa936296c76b182dee75dc947c931389 (patch)
treec976533ccf47c40b61428590ec197a990f8298b7
parent717eced32ac5f2f8f5800cc1f56ead7953255b17 (diff)
downloadgobject-introspection-c58b33abfa936296c76b182dee75dc947c931389.tar.gz
giscanner: Add better errors for unknown param names
Exclude the names we've already matched up from the "should be one of..." list
-rw-r--r--giscanner/maintransformer.py25
-rw-r--r--tests/warn/unknown-parameter.h12
2 files changed, 25 insertions, 12 deletions
diff --git a/giscanner/maintransformer.py b/giscanner/maintransformer.py
index ad04bffd..3a35b0e7 100644
--- a/giscanner/maintransformer.py
+++ b/giscanner/maintransformer.py
@@ -684,33 +684,36 @@ usage is void (*_gtk_reserved1)(void);"""
self._apply_annotations_param_ret_common(parent, return_, tag)
def _apply_annotations_params(self, parent, params, block):
- allparams = []
+ declparams = set([])
if parent.instance_parameter:
- allparams.append(parent.instance_parameter.argname)
+ declparams.add(parent.instance_parameter.argname)
for param in params:
if block:
tag = block.get(param.argname)
else:
tag = None
self._apply_annotations_param(parent, param, tag)
- allparams.append(param.argname)
+ declparams.add(param.argname)
if not block:
return
- docparams = block.params[:]
- for doc_name in docparams:
- if doc_name in allparams:
- continue
+ docparams = set(block.params)
+
+ unknown = docparams - declparams
+ unused = declparams - docparams
+
+ for doc_name in unknown:
# Skip varargs, see #629759
if doc_name.lower() in ['...', 'varargs', TAG_RETURNS]:
continue
- if len(allparams) == 0:
+ if len(unused) == 0:
text = ''
- elif len(allparams) == 1:
- text = ', should be %r' % (allparams[0], )
+ elif len(unused) == 1:
+ (param, ) = unused
+ text = ', should be %r' % (param, )
else:
text = ', should be one of %s' % (
- ', '.join(repr(p) for p in allparams), )
+ ', '.join(repr(p) for p in unused), )
tag = block.get(doc_name)
message.warn(
diff --git a/tests/warn/unknown-parameter.h b/tests/warn/unknown-parameter.h
index 8d68dbbc..3d339b32 100644
--- a/tests/warn/unknown-parameter.h
+++ b/tests/warn/unknown-parameter.h
@@ -19,13 +19,23 @@ void test_param_mismatch2(int a, int *out2);
// EXPECT:14: Warning: Test: test_param_mismatch2: unknown parameter 'wrong_name2' in documentation comment, should be one of 'a', 'out2'
/**
+ * test_param_mismatch3:
+ * @a: an integer
+ * @wrong_name3: (out):
+ *
+ */
+void test_param_mismatch3(int a, int *out3);
+
+// EXPECT:24: Warning: Test: test_param_mismatch3: unknown parameter 'wrong_name3' in documentation comment, should be 'out3'
+
+/**
* test_param_missing:
* @missing: (out):
*
*/
void test_param_missing(void);
-// EXPECT:23: Warning: Test: test_param_missing: unknown parameter 'missing' in documentation comment
+// EXPECT:33: Warning: Test: test_param_missing: unknown parameter 'missing' in documentation comment
/**