dot_files/vim-plugins/bundle/python-mode/pymode/libs/pylama/main.py
2017-10-08 12:00:02 +01:00

101 lines
2.5 KiB
Python

"""Pylama's shell support."""
from __future__ import absolute_import, with_statement
import sys
from os import walk, path as op
from .config import parse_options, CURDIR, setup_logger
from .core import LOGGER, run
from .async import check_async
def check_path(options, rootdir=None, candidates=None, code=None):
"""Check path.
:param rootdir: Root directory (for making relative file paths)
:param options: Parsed pylama options (from pylama.config.parse_options)
:returns: (list) Errors list
"""
if not candidates:
candidates = []
for path_ in options.paths:
path = op.abspath(path_)
if op.isdir(path):
for root, _, files in walk(path):
candidates += [op.relpath(op.join(root, f), CURDIR) for f in files]
else:
candidates.append(path)
if rootdir is None:
rootdir = path if op.isdir(path) else op.dirname(path)
paths = []
for path in candidates:
if not options.force and not any(l.allow(path) for _, l in options.linters):
continue
if not op.exists(path):
continue
paths.append(path)
if options.async:
return check_async(paths, options, rootdir)
errors = []
for path in paths:
errors += run(path=path, code=code, rootdir=rootdir, options=options)
return errors
def shell(args=None, error=True):
"""Endpoint for console.
Parse a command arguments, configuration files and run a checkers.
:return list: list of errors
:raise SystemExit:
"""
if args is None:
args = sys.argv[1:]
options = parse_options(args)
setup_logger(options)
LOGGER.info(options)
# Install VSC hook
if options.hook:
from .hook import install_hook
return install_hook(options.path)
return process_paths(options, error=error)
def process_paths(options, candidates=None, error=True):
"""Process files and log errors."""
errors = check_path(options, rootdir=CURDIR, candidates=candidates)
pattern = "%(filename)s:%(lnum)s:%(col)s: %(text)s"
if options.format == 'pylint':
pattern = "%(filename)s:%(lnum)s: [%(type)s] %(text)s"
for er in errors:
if options.abspath:
er._info['filename'] = op.abspath(er.filename)
LOGGER.warning(pattern, er._info)
if error:
sys.exit(int(bool(errors)))
return errors
if __name__ == '__main__':
shell()
# pylama:ignore=F0001