[gobject-introspection] giscanner: Add better errors for unknown param names



commit c58b33abfa936296c76b182dee75dc947c931389
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Sun Feb 12 18:52:20 2012 -0500

    giscanner: Add better errors for unknown param names
    
    Exclude the names we've already matched up from the "should be one of..." list

 giscanner/maintransformer.py   |   25 ++++++++++++++-----------
 tests/warn/unknown-parameter.h |   12 +++++++++++-
 2 files changed, 25 insertions(+), 12 deletions(-)
---
diff --git a/giscanner/maintransformer.py b/giscanner/maintransformer.py
index ad04bff..3a35b0e 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 8d68dbb..3d339b3 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
 
 
 /**



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