Allow a default_extension to be provided

When a file is found without an extension allow a CLI
provided default_extension to be used in these cases
so that files without extensions can be classified as
known file extension types.

Change-Id: I115ccc92ccd51a7018672b98b639ade30869f939
This commit is contained in:
Joshua Harlow 2014-09-11 15:36:25 -07:00
parent f2ec6f2550
commit 3912dca016
3 changed files with 27 additions and 6 deletions

View File

@ -27,8 +27,8 @@ Command line usage
$ doc8 -h
usage: doc8 [-h] [--config path] [--allow-long-titles] [--ignore code]
[--no-sphinx] [--ignore-path path] [--max-line-length int]
[-e extension] [-v]
[--no-sphinx] [--ignore-path path] [--default-extension extension]
[--max-line-length int] [-e extension] [-v] [--version]
[path [path ...]]
Check documentation for simple style requirements.
@ -56,12 +56,16 @@ Command line usage
--no-sphinx do not ignore sphinx specific false positives
--ignore-path path ignore the given directory or file (globs are
supported)
--default-extension extension
Default file extension to use when a file is found
without a file extension.
--max-line-length int
maximum allowed line length (default: 79)
-e extension, --extension extension
check file extensions of the given type (default:
.rst, .txt)
-v, --verbose run in verbose mode
--version Show the version and exit.
Ini file usage
**************
@ -101,6 +105,7 @@ of conflicts.
Option Overrides Merges
===================== =========== ========
``allow-long-titles`` Yes No
``default-extension`` Yes No
``extension`` No Yes
``ignore-path`` No Yes
``ignore`` No Yes

View File

@ -109,6 +109,10 @@ def extract_config(args):
cfg['verbose'] = parser.getboolean("doc8", "verbose")
except (configparser.NoSectionError, configparser.NoOptionError):
pass
try:
cfg['default_extension'] = parser.get("doc8", "default-extension")
except (configparser.NoSectionError, configparser.NoOptionError):
pass
try:
extensions = parser.get("doc8", "extensions")
extensions = extensions.split(",")
@ -155,13 +159,16 @@ def scan(cfg):
files_ignored = 0
file_iter = utils.find_files(cfg.get('paths', []),
cfg.get('extension', []), ignored_paths)
default_extension = cfg.get('default_extension')
for filename, ignoreable in file_iter:
if ignoreable:
files_ignored += 1
if cfg.get('verbose'):
print(" Ignoring '%s'" % (filename))
else:
files.append(file_parser.parse(filename))
f = file_parser.parse(filename,
default_extension=default_extension)
files.append(f)
if cfg.get('verbose'):
print(" Selecting '%s'" % (filename))
return (files, files_ignored)
@ -263,6 +270,11 @@ def main():
parser.add_argument("--ignore-path", action="append", default=[],
help="Ignore the given directory or file (globs"
" are supported).", metavar='path')
parser.add_argument("--default-extension", action="store",
help="Default file extension to use when a file is"
" found without a file extension.",
default='', dest='default_extension',
metavar='extension')
parser.add_argument("--max-line-length", action="store", metavar="int",
type=int,
help="Maximum allowed line"

View File

@ -29,7 +29,7 @@ import six
class ParsedFile(object):
FALLBACK_ENCODING = 'utf-8'
def __init__(self, filename, encoding=None):
def __init__(self, filename, encoding=None, default_extension=''):
self._filename = filename
self._content = None
self._raw_content = None
@ -40,6 +40,8 @@ class ParsedFile(object):
self._has_read = False
self._extension = os.path.splitext(filename)[1]
self._read_lock = threading.Lock()
if not self._extension:
self._extension = default_extension
@property
def errors(self):
@ -129,7 +131,9 @@ class ParsedFile(object):
len(list(self.lines_iter())))
def parse(filename, encoding=None):
def parse(filename, encoding=None, default_extension=''):
if not os.path.isfile(filename):
raise IOError(errno.ENOENT, 'File not found', filename)
return ParsedFile(filename, encoding=encoding)
return ParsedFile(filename,
encoding=encoding,
default_extension=default_extension)