From 172381260ee73930feb4d158bcbd9cfc3bb7ff36 Mon Sep 17 00:00:00 2001 From: Jessica Clarke Date: Mon, 11 Jan 2021 04:52:29 +0000 Subject: [PATCH] Fix pyflakes tests for recent pyflakes versions Summary: Since 2.1.0 (commit 75bc0c03c145), pyflakes has included the Python version and platform in its version output, so ignore it if present. Since 2.2.0 (commit 6ba3f8e0b59b), pyflakes has included the column number in its messages, so update the parser to include it and drop the column number from the (only) test in order to work with both old and new versions. Whilst here, assign names to the capture groups to make the code clearer. Test Plan: Ran arc unit Reviewers: epriestley, joshuaspence, #blessed_reviewers Reviewed By: epriestley, #blessed_reviewers Subscribers: Korvin Differential Revision: https://secure.phabricator.com/D21504 --- src/lint/linter/ArcanistPyFlakesLinter.php | 13 +++++++++---- .../linter/__tests__/pyflakes/pyflakes.lint-test | 6 +++--- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/lint/linter/ArcanistPyFlakesLinter.php b/src/lint/linter/ArcanistPyFlakesLinter.php index e8a37a79..6f73ecf4 100644 --- a/src/lint/linter/ArcanistPyFlakesLinter.php +++ b/src/lint/linter/ArcanistPyFlakesLinter.php @@ -35,7 +35,8 @@ final class ArcanistPyFlakesLinter extends ArcanistExternalLinter { list($stdout) = execx('%C --version', $this->getExecutableCommand()); $matches = array(); - if (preg_match('/^(?P\d+\.\d+\.\d+)$/', $stdout, $matches)) { + $pattern = '/^(?P\d+\.\d+\.\d+)( Python.*)?$/'; + if (preg_match($pattern, $stdout, $matches)) { return $matches['version']; } else { return false; @@ -52,7 +53,8 @@ final class ArcanistPyFlakesLinter extends ArcanistExternalLinter { $messages = array(); foreach ($lines as $line) { $matches = null; - if (!preg_match('/^(.*?):(\d+): (.*)$/', $line, $matches)) { + $pattern = '/^(?.*?):(?\d+):(?\d*) (?.*)$/'; + if (!preg_match($pattern, $line, $matches)) { continue; } foreach ($matches as $key => $match) { @@ -60,7 +62,7 @@ final class ArcanistPyFlakesLinter extends ArcanistExternalLinter { } $severity = ArcanistLintSeverity::SEVERITY_WARNING; - $description = $matches[3]; + $description = $matches['message']; $error_regexp = '/(^undefined|^duplicate|before assignment$)/'; if (preg_match($error_regexp, $description)) { @@ -69,7 +71,10 @@ final class ArcanistPyFlakesLinter extends ArcanistExternalLinter { $message = new ArcanistLintMessage(); $message->setPath($path); - $message->setLine($matches[2]); + $message->setLine($matches['line']); + if ($matches['column'] != '') { + $message->setChar($matches['column']); + } $message->setCode($this->getLinterName()); $message->setName($this->getLinterName()); $message->setDescription($description); diff --git a/src/lint/linter/__tests__/pyflakes/pyflakes.lint-test b/src/lint/linter/__tests__/pyflakes/pyflakes.lint-test index 58765cd4..35d0afea 100644 --- a/src/lint/linter/__tests__/pyflakes/pyflakes.lint-test +++ b/src/lint/linter/__tests__/pyflakes/pyflakes.lint-test @@ -2,6 +2,6 @@ import sys, os x += 1 ~~~~~~~~~~ -warning:1:0 -warning:1:0 -error:3:0 +warning:1: +warning:1: +error:3: