mirror of https://github.com/python/cpython
Added the -X/--no-docstrings flag which takes a filename containing a
list of files to not extract docstrings from when the -D option is given. This isn't optimal, but I didn't want to change the semantics of -D, and it's bad form to allow optional switch arguments. Bumping __version__ to 1.4. TokenEater.__init__(): Initialize __curfile to None. __waiting(): In order to extract docstrings from the module, both the -D flag should be set, and the __curfile should not be named in the -X filename (i.e. it isn't in opts.nodocstrings). set_filename(): Fixed a bug where once the first module docstring is extracted, no subsequent module docstrings will be extracted. The bug was that the first extraction set __freshmodule to 0, but that flag was never reset back to 1. set_filename() is always called when the next file is being processed, so use it to reset the __freshmodule flag. main(): Add support for -X/--no-docstring.
This commit is contained in:
parent
702d08ec05
commit
63ce5af496
|
@ -1,5 +1,5 @@
|
|||
#! /usr/bin/env python
|
||||
# Originally written by Barry Warsaw <barry@digicool.com>
|
||||
# Originally written by Barry Warsaw <barry@zope.com>
|
||||
#
|
||||
# Minimally patched to make it even more xgettext compatible
|
||||
# by Peter Funk <pf@artcom-gmbh.de>
|
||||
|
@ -49,11 +49,11 @@ Options:
|
|||
|
||||
-a
|
||||
--extract-all
|
||||
Extract all strings
|
||||
Extract all strings.
|
||||
|
||||
-d name
|
||||
--default-domain=name
|
||||
Rename the default output file from messages.pot to name.pot
|
||||
Rename the default output file from messages.pot to name.pot.
|
||||
|
||||
-E
|
||||
--escape
|
||||
|
@ -63,11 +63,11 @@ Options:
|
|||
--docstrings
|
||||
Extract module, class, method, and function docstrings. These do not
|
||||
need to be wrapped in _() markers, and in fact cannot be for Python to
|
||||
consider them docstrings.
|
||||
consider them docstrings. (See also the -X option).
|
||||
|
||||
-h
|
||||
--help
|
||||
print this help message and exit
|
||||
Print this help message and exit.
|
||||
|
||||
-k word
|
||||
--keyword=word
|
||||
|
@ -128,8 +128,13 @@ Options:
|
|||
extracted from the input files. Each string to be excluded must
|
||||
appear on a line by itself in the file.
|
||||
|
||||
If `inputfile' is -, standard input is read.
|
||||
-X filename
|
||||
--no-docstrings=filename
|
||||
Specify a file that contains a list of files (one per line) that
|
||||
should not have their docstrings extracted. This is only useful in
|
||||
conjunction with the -D option above.
|
||||
|
||||
If `inputfile' is -, standard input is read.
|
||||
"""
|
||||
|
||||
import os
|
||||
|
@ -146,7 +151,7 @@ try:
|
|||
except ImportError:
|
||||
def _(s): return s
|
||||
|
||||
__version__ = '1.3'
|
||||
__version__ = '1.4'
|
||||
|
||||
default_keywords = ['_']
|
||||
DEFAULTKEYWORDS = ', '.join(default_keywords)
|
||||
|
@ -155,8 +160,8 @@ EMPTYSTRING = ''
|
|||
|
||||
|
||||
|
||||
# The normal pot-file header. msgmerge and EMACS' po-mode work better if
|
||||
# it's there.
|
||||
# The normal pot-file header. msgmerge and Emacs's po-mode work better if it's
|
||||
# there.
|
||||
pot_header = _('''\
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR ORGANIZATION
|
||||
|
@ -247,6 +252,7 @@ class TokenEater:
|
|||
self.__data = []
|
||||
self.__lineno = -1
|
||||
self.__freshmodule = 1
|
||||
self.__curfile = None
|
||||
|
||||
def __call__(self, ttype, tstring, stup, etup, line):
|
||||
# dispatch
|
||||
|
@ -256,8 +262,9 @@ class TokenEater:
|
|||
self.__state(ttype, tstring, stup[0])
|
||||
|
||||
def __waiting(self, ttype, tstring, lineno):
|
||||
opts = self.__options
|
||||
# Do docstring extractions, if enabled
|
||||
if self.__options.docstrings:
|
||||
if opts.docstrings and not opts.nodocstrings.get(self.__curfile):
|
||||
# module docstring?
|
||||
if self.__freshmodule:
|
||||
if ttype == tokenize.STRING:
|
||||
|
@ -270,7 +277,7 @@ class TokenEater:
|
|||
if ttype == tokenize.NAME and tstring in ('class', 'def'):
|
||||
self.__state = self.__suiteseen
|
||||
return
|
||||
if ttype == tokenize.NAME and tstring in self.__options.keywords:
|
||||
if ttype == tokenize.NAME and tstring in opts.keywords:
|
||||
self.__state = self.__keywordseen
|
||||
|
||||
def __suiteseen(self, ttype, tstring, lineno):
|
||||
|
@ -318,6 +325,7 @@ class TokenEater:
|
|||
|
||||
def set_filename(self, filename):
|
||||
self.__curfile = filename
|
||||
self.__freshmodule = 1
|
||||
|
||||
def write(self, fp):
|
||||
options = self.__options
|
||||
|
@ -383,12 +391,12 @@ def main():
|
|||
try:
|
||||
opts, args = getopt.getopt(
|
||||
sys.argv[1:],
|
||||
'ad:DEhk:Kno:p:S:Vvw:x:',
|
||||
'ad:DEhk:Kno:p:S:Vvw:x:X:',
|
||||
['extract-all', 'default-domain=', 'escape', 'help',
|
||||
'keyword=', 'no-default-keywords',
|
||||
'add-location', 'no-location', 'output=', 'output-dir=',
|
||||
'style=', 'verbose', 'version', 'width=', 'exclude-file=',
|
||||
'docstrings',
|
||||
'docstrings', 'no-docstrings',
|
||||
])
|
||||
except getopt.error, msg:
|
||||
usage(1, msg)
|
||||
|
@ -410,6 +418,7 @@ def main():
|
|||
width = 78
|
||||
excludefilename = ''
|
||||
docstrings = 0
|
||||
nodocstrings = {}
|
||||
|
||||
options = Options()
|
||||
locations = {'gnu' : options.GNU,
|
||||
|
@ -456,6 +465,16 @@ def main():
|
|||
usage(1, _('--width argument must be an integer: %s') % arg)
|
||||
elif opt in ('-x', '--exclude-file'):
|
||||
options.excludefilename = arg
|
||||
elif opt in ('-X', '--no-docstrings'):
|
||||
fp = open(arg)
|
||||
try:
|
||||
while 1:
|
||||
line = fp.readline()
|
||||
if not line:
|
||||
break
|
||||
options.nodocstrings[line[:-1]] = 1
|
||||
finally:
|
||||
fp.close()
|
||||
|
||||
# calculate escapes
|
||||
make_escapes(options.escape)
|
||||
|
|
Loading…
Reference in New Issue