2016-09-30 01:36:27 +00:00
|
|
|
#!/usr/bin/env python
|
|
|
|
from __future__ import print_function
|
|
|
|
from functools import reduce
|
|
|
|
import subprocess
|
|
|
|
import os.path
|
|
|
|
import getopt
|
|
|
|
import sys
|
|
|
|
import re
|
|
|
|
import os
|
|
|
|
|
|
|
|
import gettext
|
|
|
|
_ = gettext.gettext
|
|
|
|
|
|
|
|
|
|
|
|
def fullshell(cmd):
|
|
|
|
process = subprocess.Popen(cmd,
|
|
|
|
stdout=subprocess.PIPE,
|
|
|
|
stderr=subprocess.PIPE,
|
|
|
|
universal_newlines=True)
|
|
|
|
(stdout, stderr) = process.communicate()
|
|
|
|
return (stdout, stderr, process.returncode)
|
|
|
|
|
|
|
|
|
|
|
|
def path_which(scriptname):
|
|
|
|
def is_executable(path):
|
|
|
|
return os.path.exists(path) and os.access(path, os.X_OK)
|
|
|
|
|
|
|
|
possibles = [path for path in
|
|
|
|
[os.path.join(path, scriptname)
|
|
|
|
for path in os.environ.get('PATH').split(':')]
|
|
|
|
if is_executable(path)]
|
|
|
|
|
|
|
|
return (len(possibles) and possibles.pop(0)) or False
|
|
|
|
|
|
|
|
|
|
|
|
def main(*args):
|
|
|
|
(opts, filenames) = getopt.getopt(args[1:], '', ['min=', 'max='])
|
|
|
|
options = {re.sub('^\-+', '', i[0]): i[1] for i in opts}
|
|
|
|
style = path_which('style')
|
|
|
|
if not style:
|
|
|
|
sys.exit(_('Could not find the style program'))
|
|
|
|
if len(filenames) == 0:
|
|
|
|
sys.exit(_('No files specifed to scan'))
|
|
|
|
(values, error, returncode) = fullshell([style, filenames[0]])
|
|
|
|
if returncode != 0:
|
|
|
|
print(error)
|
|
|
|
return returncode
|
|
|
|
kincaid = re.search(r'Kincaid:\s*([\d\.]+)', values, re.MULTILINE)
|
2016-09-30 19:10:52 +00:00
|
|
|
|
|
|
|
# Assumes an uncheckable issue, like an empty RST. Not unusual.
|
|
|
|
if not kincaid:
|
|
|
|
return 0
|
2016-09-30 01:36:27 +00:00
|
|
|
val = float(kincaid.group(1))
|
|
|
|
|
|
|
|
msg = ""
|
|
|
|
if options.get('min', None):
|
|
|
|
if val < int(options.get('min')):
|
|
|
|
msg = _('Readability too low')
|
|
|
|
if options.get('max', None):
|
|
|
|
if val > int(options.get('max')):
|
|
|
|
msg = _('Readability too high')
|
|
|
|
print(_("{}: {} {}").format(filenames[0], val, msg))
|
|
|
|
return (msg != "" and 1) or 0
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
import sys
|
|
|
|
sys.exit(main(*sys.argv))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|