| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- """Pylama's core functionality.
- Prepare params, check a modeline and run the checkers.
- """
- import os.path as op
- from pathlib import Path
- from typing import List
- from pylama.config import CURDIR, LOGGER, Namespace
- from pylama.context import RunContext
- from pylama.errors import Error, default_sorter, remove_duplicates
- from pylama.lint import LINTERS, LinterV2
- def run(
- path: str, code: str = None, rootdir: Path = CURDIR, options: Namespace = None
- ) -> List[Error]:
- """Run code checkers with the given params.
- :param path: (str) A file's path.
- """
- path = op.relpath(path, rootdir)
- with RunContext(path, code, options) as ctx:
- if ctx.skip:
- LOGGER.info("Skip checking for path: %s", path)
- else:
- for lname in ctx.linters or LINTERS:
- linter_cls = LINTERS.get(lname)
- if not linter_cls:
- continue
- linter = linter_cls()
- LOGGER.info("Run [%s] %s", lname, path)
- if isinstance(linter, LinterV2):
- linter.run_check(ctx)
- else:
- for err_info in linter.run(
- ctx.temp_filename, code=ctx.source, params=ctx.get_params(lname)
- ):
- ctx.push(source=lname, **err_info)
- if not ctx.errors:
- return ctx.errors
- errors = list(remove_duplicates(ctx.errors))
- sorter = default_sorter
- if options and options.sort:
- sort = options.sort
- sorter = lambda err: (sort.get(err.etype, 999), err.lnum) # pylint: disable=C3001
- return sorted(errors, key=sorter)
- # pylama:ignore=R0912,D210,F0001,C3001
|