# HG changeset patch # User Pierre-Yves David # Date 1268765580 -3600 # Node ID 3be9ae49b62884ce8a91bae951f1ef55d679a554 # Parent f18c37fd624f52e02d220ba3d8ba8dfa2c1b4087 code-code: Add a logfunc argument to checkfile This helps external tool customisation. The logfunc argument must be a function called to report errors. A new logger class is also added to keep the old behaviour by default. diff -r f18c37fd624f -r 3be9ae49b628 contrib/check-code.py --- a/contrib/check-code.py Tue Mar 16 19:52:58 2010 +0100 +++ b/contrib/check-code.py Tue Mar 16 19:53:00 2010 +0100 @@ -133,8 +133,40 @@ ('test script', r'(.*/)?test-[^.~]*$', testfilters, testpats), ('c', r'.*\.c$', cfilters, cpats), ] -def checkfile(f, maxerr=None): - """checks style and portability of a given file""" + +class norepeatlogger(object): + def __init__(self): + self._lastseen = None + + def log(self, fname, lineno, line, msg): + """print error related a to given line of a given file. + + The faulty line will also be printed but only once in the case + of multiple errors. + + :fname: filename + :lineno: line number + :line: actual content of the line + :msg: error message + """ + msgid = fname, lineno, line + if msgid != self._lastseen: + print "%s:%d:" % (fname, lineno) + print " > %s" % line + self._lastseen = msgid + print " " + msg + +_defaultlogger = norepeatlogger() + +def checkfile(f, logfunc=_defaultlogger.log, maxerr=None): + """checks style and portability of a given file + + :f: filepath + :logfunc: function used to report error + logfunc(filename, linenumber, linecontent, errormessage) + :maxerr: number of error to display before arborting. + Set to None (default) to report all errors + """ for name, match, filters, pats in checks: fc = 0 if not re.match(match, f): @@ -149,14 +181,9 @@ for n, l in z: if "check-code" + "-ignore" in l[0]: continue - lc = 0 for p, msg in pats: if re.search(p, l[1]): - if not lc: - print "%s:%d:" % (f, n + 1) - print " > %s" % l[0] - print " %s" % msg - lc += 1 + logfunc(f, n+1, l[0], msg) fc += 1 if maxerr is not None and fc >= maxerr: print " (too many errors, giving up)"