Author: esr
Date: Fri Apr  6 07:42:09 2007
New Revision: 16620

URL: http://svn.gna.org/viewcvs/wesnoth?rev=16620&view=rev
Log:
More rfactoring in macroscope.  References are now objects.

Modified:
    trunk/data/tools/macroscope

Modified: trunk/data/tools/macroscope
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/data/tools/macroscope?rev=16620&r1=16619&r2=16620&view=diff
==============================================================================
--- trunk/data/tools/macroscope (original)
+++ trunk/data/tools/macroscope Fri Apr  6 07:42:09 2007
@@ -34,6 +34,16 @@
 
     return (datafiles, cfgfiles, utilsfiles)
 
+class reference:
+    "Describes a location in the data tree."
+    def __init__(self, filename, line=None):
+        self.filename = filename
+        self.line = line
+    def __str__(self):
+        if self.line:
+            return self.filename + ":" + `self.line`
+        else:
+            return self.filebame
 
 class macro_cross_reference:
     def __init__(self, filelist):
@@ -47,10 +57,11 @@
                 if line.startswith("#define"):
                     tokens = line.split()
                     name = tokens[1]
+                    here = reference(filename, n+1)
                     if name in self.xref:
-                        print >>sys.stderr, "*** Warning: duplicate definition 
of %s from %s:%d at %s:%d\n" \
-                              % (name, self.xref[name][0], self.xref[name][1], 
filename, n+1)
-                    self.xref[name] = (filename, n+1, {})
+                        print >>sys.stderr, "*** Warning: duplicate definition 
of %s from %s, at %s\n" \
+                              % (name, self.xref[name][0], here)
+                    self.xref[name] = (here, {})
             dfp.close()
         return self.xref
     def check_macro_references(self, filelist):
@@ -64,20 +75,23 @@
                 for match in re.finditer(r"\{([A-Z][A-Z0-9_]+)\b", line):
                     name = match.group(1)
                     if name in self.xref:
-                        namedict = self.xref[name][2]
+                        namedict = self.xref[name][1]
                         if filename not in namedict:
                             namedict[filename] = []
                         namedict[filename].append(n+1)
                     else:
-                        self.unresolved.append((name, filename, n+1))
+                        self.unresolved.append((name, reference(filename,n+1)))
             rfp.close()
     def xrefdump(self, threshold=9999):
         "Report resolved references."
-        for (name, (filename, n, references)) in self.xref.items():
+        for (name, (defloc, references)) in self.xref.items():
             nrefs = len(references)
             if nrefs > threshold:
                 continue
-            print "Macro %s is defined at %s:%d, used in %d files:" % (name, 
filename, n, nrefs)
+            if nrefs == 0:
+                print "Macro %s defined at %s is unused" % (name, defloc)
+            else:
+                print "Macro %s defined at %s is used in %d files:" % (name, 
defloc, nrefs)
             for (file, linenumbers) in references.items():
                  print "    %s: %s" % (file, `linenumbers`[1:-1])
     def unrefdump(self):
@@ -86,8 +100,8 @@
             print "# No unresolved references"
         else:
             print "# Dangling references:"
-            for (name, filename, n) in self.unresolved:
-                print "%s at %s:%d" % (name, filename, n)
+            for (name, reference) in self.unresolved:
+                print "%s at %s" % (name, reference)
 
 if __name__ == "__main__":
     print "# Macroscope reporting on %s" % time.ctime() 
@@ -99,10 +113,13 @@
             print "# Checking macro definitions from anywhere"
             print "# against macro references from anywhere."
             print "# Output will list unused macros and undefined references."
+            print "# Unused macros:"
             (datafiles, cfgfiles, utilsfiles) = initialize(verbose)
             xref = macro_cross_reference(cfgfiles)
             xref.check_macro_references(cfgfiles)
-            xref.xrefdump(threshold=0)
+            for (name, (defloc, references)) in xref.xref.items():
+                if len(references) == 0:
+                    print "%s at %s" % (name, defloc)
             xref.unrefdump()
             sys.exit(0)
         elif (switch == '-u'):


_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits

Reply via email to