From 9beefd0feb00dfd7ca63a1282d735b4790d9aa36 Mon Sep 17 00:00:00 2001 From: Sebastian Serth Date: Fri, 23 Oct 2020 22:23:57 +0200 Subject: [PATCH] Improve PyLint RegEx to match single lines * Also return more detailed results for further analysis --- lib/py_lint_adapter.rb | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/py_lint_adapter.rb b/lib/py_lint_adapter.rb index cd9adea4..dbe63ea1 100644 --- a/lib/py_lint_adapter.rb +++ b/lib/py_lint_adapter.rb @@ -1,6 +1,6 @@ class PyLintAdapter < TestingFrameworkAdapter REGEXP = /Your code has been rated at (-?\d+\.?\d*)\/(\d+\.?\d*)/ - ASSERTION_ERROR_REGEXP = /^.*?\(.*?,\ (.*?),.*?\)\ (.*?)$/m + ASSERTION_ERROR_REGEXP = /^.*?\([^,]*?,\ ([^,]*?),[^,]*?\)\ (.*?)$/ def self.framework_name 'PyLint' @@ -14,21 +14,22 @@ class PyLintAdapter < TestingFrameworkAdapter else captures = regex_match.captures.map(&:to_f) count = captures.second - passed = captures.first + passed = captures.first >= 0 ? captures.first : 0 failed = count - passed end begin assertion_error_matches = Timeout.timeout(2.seconds) do - output[:stdout].scan(ASSERTION_ERROR_REGEXP).map { |match| + output[:stdout].scan(ASSERTION_ERROR_REGEXP).map do |match| test = match.first.strip description = match.second.strip - "#{test}: #{description}" - }.flatten || [] + {test: test, description: description} + end || [] end rescue Timeout::Error assertion_error_matches = [] end - {count: count, failed: failed, error_messages: assertion_error_matches} + concatenated_errors = assertion_error_matches.map { |result| "#{result[:test]}: #{result[:description]}" }.flatten + {count: count, failed: failed, error_messages: concatenated_errors, detailed_linter_results: assertion_error_matches} end end