mirror of https://github.com/python/cpython
Script to print undocumented symbols found in Python header files.
This commit is contained in:
parent
52a17becbc
commit
3e77423a64
|
@ -0,0 +1,99 @@
|
|||
# Thomas Heller, 11/2001
|
||||
|
||||
"""This script prints out a list of undocumented symbols found in
|
||||
Python include files, prefixed by their tag kind.
|
||||
|
||||
First, a temporary file is written which contains all Python include
|
||||
files, with DL_IMPORT simply removed. This file is passed to ctags,
|
||||
and the output is parsed into a dictionary mapping symbol names to tag
|
||||
kinds.
|
||||
|
||||
Then, the .tex files from Python docs are read into a giant string.
|
||||
|
||||
Finally all symbols not found in the docs are written to standard
|
||||
output, prefixed with their tag kind.
|
||||
"""
|
||||
|
||||
# Which kind of tags do we need?
|
||||
TAG_KINDS = "dpt"
|
||||
|
||||
# Doc sections to use
|
||||
DOCSECTIONS = ["api", "ext"]
|
||||
|
||||
# Only print symbols starting with this prefix
|
||||
# to get all symbols, use an empty string
|
||||
PREFIX = "Py"
|
||||
|
||||
# end of customization section
|
||||
|
||||
|
||||
# Tested with EXUBERANT CTAGS
|
||||
# see http://ctags.sourceforge.net
|
||||
#
|
||||
# ctags fields are separated by tabs.
|
||||
# The first field is the name, the last field the type:
|
||||
# d macro definitions (and #undef names)
|
||||
# e enumerators
|
||||
# f function definitions
|
||||
# g enumeration names
|
||||
# m class, struct, or union members
|
||||
# n namespaces
|
||||
# p function prototypes and declarations
|
||||
# s structure names
|
||||
# t typedefs
|
||||
# u union names
|
||||
# v variable definitions
|
||||
# x extern and forward variable declarations
|
||||
|
||||
import os, glob, re, sys, tempfile
|
||||
|
||||
def findnames(file, prefix=""):
|
||||
names = {}
|
||||
for line in file.readlines():
|
||||
if line[0] == '!':
|
||||
continue
|
||||
fields = line.split()
|
||||
name, tag = fields[0], fields[-1]
|
||||
if tag == 'd' and name.endswith('_H'):
|
||||
continue
|
||||
if name.startswith(prefix):
|
||||
names[name] = tag
|
||||
return names
|
||||
|
||||
def print_undoc_symbols(prefix):
|
||||
incfile = tempfile.mktemp(".h")
|
||||
|
||||
fp = open(incfile, "w")
|
||||
|
||||
for file in glob.glob(os.path.join(INCDIR, "*.h")):
|
||||
text = open(file).read()
|
||||
# remove all DL_IMPORT, they will confuse ctags
|
||||
text = re.sub("DL_IMPORT", "", text)
|
||||
fp.write(text)
|
||||
fp.close()
|
||||
|
||||
docs = []
|
||||
|
||||
for sect in DOCSECTIONS:
|
||||
for file in glob.glob(os.path.join(DOCDIR, sect, "*.tex")):
|
||||
docs.append(open(file).read())
|
||||
|
||||
docs = "\n".join(docs)
|
||||
|
||||
fp = os.popen("ctags --c-types=%s -f - %s" % (TAG_KINDS, incfile))
|
||||
dict = findnames(fp, prefix)
|
||||
names = dict.keys()
|
||||
names.sort()
|
||||
for name in names:
|
||||
if docs.find(name) == -1:
|
||||
print dict[name], name
|
||||
os.remove(incfile)
|
||||
|
||||
if __name__ == '__main__':
|
||||
global INCDIR
|
||||
global DOCDIR
|
||||
SRCDIR = os.path.dirname(sys.argv[0])
|
||||
INCDIR = os.path.normpath(os.path.join(SRCDIR, "../../Include"))
|
||||
DOCDIR = os.path.normpath(os.path.join(SRCDIR, ".."))
|
||||
|
||||
print_undoc_symbols(PREFIX)
|
Loading…
Reference in New Issue