mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2025-02-23 14:40:51 +01:00
helper script to highlight undocumented members
This commit is contained in:
parent
4895d8288c
commit
560450f2fb
1 changed files with 74 additions and 0 deletions
74
scripts/maint/locatemissingdoxygen.py
Executable file
74
scripts/maint/locatemissingdoxygen.py
Executable file
|
@ -0,0 +1,74 @@
|
|||
#!/usr/bin/python
|
||||
|
||||
"""
|
||||
This script parses the stderr output of doxygen and looks for undocumented
|
||||
stuff. By default, it just counts the undocumented things per file. But with
|
||||
the -A option, it rewrites the files to stick in /*DOCDOC*/ comments
|
||||
to highlight the undocumented stuff.
|
||||
"""
|
||||
|
||||
import os
|
||||
import re
|
||||
import shutil
|
||||
import sys
|
||||
|
||||
warning_pattern = re.compile(r'^([^:]+):(\d+): warning: (.*) is not documented')
|
||||
|
||||
def readDoxygenOutput(f):
|
||||
" yields (cfilename, lineno, thingname) "
|
||||
for line in f:
|
||||
m = warning_pattern.match(line)
|
||||
if m:
|
||||
yield m.groups()
|
||||
|
||||
warnings = {}
|
||||
|
||||
def buildWarnings():
|
||||
for fn, lineno, what in list(readDoxygenOutput(sys.stdin)):
|
||||
warnings.setdefault(fn, []).append( (int(lineno), what) )
|
||||
|
||||
def count(fn):
|
||||
if os.path.abspath(fn) not in warnings:
|
||||
print "0\t%s"%fn
|
||||
else:
|
||||
n = len(warnings[os.path.abspath(fn)])
|
||||
print "%d\t%s"%(n,fn)
|
||||
|
||||
def getIndentation(line):
|
||||
s = line.lstrip()
|
||||
return line[:len(line)-len(s)]
|
||||
|
||||
def annotate(filename):
|
||||
if os.path.abspath(filename) not in warnings:
|
||||
return
|
||||
with open(filename) as f:
|
||||
lines = f.readlines()
|
||||
w = warnings[os.path.abspath(filename)][:]
|
||||
w.sort()
|
||||
w.reverse()
|
||||
|
||||
for lineno, what in w:
|
||||
lineno -= 1 # list is 0-indexed.
|
||||
if 'DOCDOC' in lines[lineno]:
|
||||
continue
|
||||
ind = getIndentation(lines[lineno])
|
||||
lines.insert(lineno, "%s/* DOCDOC %s */\n"%(ind,what))
|
||||
|
||||
shutil.copy(filename, filename+".orig")
|
||||
with open(filename, 'w') as f:
|
||||
for l in lines:
|
||||
f.write(l)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
if len(sys.argv) == 1:
|
||||
print "Usage: locatemissingdoxygen.py [-A] filename... <doxygen_log"
|
||||
sys.exit(1)
|
||||
buildWarnings()
|
||||
if sys.argv[1] == '-A':
|
||||
del sys.argv[1]
|
||||
func = annotate
|
||||
else:
|
||||
func = count
|
||||
for fname in sys.argv[1:]:
|
||||
func(fname)
|
Loading…
Add table
Reference in a new issue