From b44c24678cefcb6fce1d519c41980746a4000f3b Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Sun, 23 Jun 2024 17:07:55 -0700 Subject: [PATCH] Refactored flake8 linting to use subprocess module instead of modifying sys.argv and sys.stdout. --- aider/linter.py | 50 ++++++++++++++++++++----------------------------- 1 file changed, 20 insertions(+), 30 deletions(-) diff --git a/aider/linter.py b/aider/linter.py index 9e900d501..1e9a819ee 100644 --- a/aider/linter.py +++ b/aider/linter.py @@ -124,39 +124,29 @@ class Linter: def flake8_lint(self, rel_fname): fatal = "E9,F821,F823,F831,F406,F407,F701,F702,F704,F706" - flake8 = f"flake8 --select={fatal} --show-source --isolated" + flake8_cmd = [ + sys.executable, + "-m", + "flake8", + f"--select={fatal}", + "--show-source", + "--isolated", + rel_fname, + ] - original_argv = sys.argv - original_stdout = sys.stdout - - sys.argv = flake8.split() + [rel_fname] - sys.stdout = io.TextIOWrapper(io.BytesIO(), encoding="utf-8") - - text = f"## Running: {' '.join(sys.argv)}\n\n" - - original_stdout.write("text:") - original_stdout.write(text) - original_stdout.write("\n") + text = f"## Running: {' '.join(flake8_cmd)}\n\n" try: - runpy.run_module("flake8", run_name="__main__") - except SystemExit as e: - dump(e.code) - if e.code == 0: - errors = None - else: - dump("wtf") - #sys.stdout.seek(0) - dump("wtf1") - errors = sys.stdout.read() - - sys.stdout = original_stdout - sys.argv = original_argv - finally: - sys.stdout = original_stdout - sys.argv = original_argv - - dump(errors) + result = subprocess.run( + flake8_cmd, + cwd=self.root, + capture_output=True, + text=True, + check=False, + ) + errors = result.stdout + result.stderr + except Exception as e: + errors = f"Error running flake8: {str(e)}" if not errors: return