diff options
author | Jasper St. Pierre <jstpierre@mecheye.net> | 2012-02-12 18:52:20 -0500 |
---|---|---|
committer | Jasper St. Pierre <jstpierre@mecheye.net> | 2012-02-13 10:59:07 -0500 |
commit | c58b33abfa936296c76b182dee75dc947c931389 (patch) | |
tree | c976533ccf47c40b61428590ec197a990f8298b7 | |
parent | 717eced32ac5f2f8f5800cc1f56ead7953255b17 (diff) | |
download | gobject-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.py | 25 | ||||
-rw-r--r-- | tests/warn/unknown-parameter.h | 12 |
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 /** |