From db0060a03a6b14f7ca7eb77ce028c6a660766866 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20van=20Noord?= <13665637+DanielNoord@users.noreply.github.com> Date: Fri, 31 Dec 2021 13:51:30 +0100 Subject: Allow passing arguments if ``epylint`` entry point is used as function (#5616) --- ChangeLog | 2 +- doc/whatsnew/2.13.rst | 2 +- pylint/__init__.py | 8 ++++++-- pylint/epylint.py | 13 ++++++++----- tests/test_pylint_runners.py | 4 +++- 5 files changed, 19 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3dc350fb2..297d2f599 100644 --- a/ChangeLog +++ b/ChangeLog @@ -90,7 +90,7 @@ Release date: TBA Closes #5504 -* When invoking ``pylint``, ``symilar`` or ``pyreverse`` by importing them in a python file +* When invoking ``pylint``, ``epylint``, ``symilar`` or ``pyreverse`` by importing them in a python file you can now pass an ``arguments`` keyword besides patching ``sys.argv``. Closes #5320 diff --git a/doc/whatsnew/2.13.rst b/doc/whatsnew/2.13.rst index 5b16243cf..9db50635e 100644 --- a/doc/whatsnew/2.13.rst +++ b/doc/whatsnew/2.13.rst @@ -121,7 +121,7 @@ Other Changes Closes #5557 -* When invoking ``pylint``, ``symilar`` or ``pyreverse`` by importing them in a python file +* When invoking ``pylint``, ``epylint``, ``symilar`` or ``pyreverse`` by importing them in a python file you can now pass an ``arguments`` keyword besides patching ``sys.argv``. Closes #5320 diff --git a/pylint/__init__.py b/pylint/__init__.py index d758a0db0..16d81d903 100644 --- a/pylint/__init__.py +++ b/pylint/__init__.py @@ -31,10 +31,14 @@ def run_pylint(argv: Optional[Sequence[str]] = None): sys.exit(1) -def run_epylint(): +def run_epylint(argv: Optional[Sequence[str]] = None): + """Run epylint + + argv can be a list of strings normally supplied as arguments on the command line + """ from pylint.epylint import Run as EpylintRun - EpylintRun() + EpylintRun(argv) def run_pyreverse(argv: Optional[Sequence[str]] = None): diff --git a/pylint/epylint.py b/pylint/epylint.py index 98b11afd5..a7eec3302 100755 --- a/pylint/epylint.py +++ b/pylint/epylint.py @@ -64,6 +64,7 @@ import shlex import sys from io import StringIO from subprocess import PIPE, Popen +from typing import Optional, Sequence def _get_env(): @@ -185,15 +186,17 @@ def py_run(command_options="", return_std=False, stdout=None, stderr=None): return None -def Run(): - if len(sys.argv) == 1: +def Run(argv: Optional[Sequence[str]] = None): + if not argv and len(sys.argv) == 1: print(f"Usage: {sys.argv[0]} [options]") sys.exit(1) - elif not os.path.exists(sys.argv[1]): - print(f"{sys.argv[1]} does not exist") + + argv = argv or sys.argv[1:] + if not os.path.exists(argv[0]): + print(f"{argv[0]} does not exist") sys.exit(1) else: - sys.exit(lint(sys.argv[1], sys.argv[2:])) + sys.exit(lint(argv[0], argv[1:])) if __name__ == "__main__": diff --git a/tests/test_pylint_runners.py b/tests/test_pylint_runners.py index dbbea28db..88113cb2c 100644 --- a/tests/test_pylint_runners.py +++ b/tests/test_pylint_runners.py @@ -23,7 +23,9 @@ def test_runner(runner: Callable, tmpdir: LocalPath) -> None: assert err.value.code == 0 -@pytest.mark.parametrize("runner", [run_pylint, run_pyreverse, run_symilar]) +@pytest.mark.parametrize( + "runner", [run_epylint, run_pylint, run_pyreverse, run_symilar] +) def test_runner_with_arguments(runner: Callable, tmpdir: LocalPath) -> None: """Check the runners with arguments as parameter instead of sys.argv""" filepath = os.path.abspath(__file__) -- cgit v1.2.1