Files
codeocean/lib/py_lint_adapter.rb
Sebastian Serth 9beefd0feb Improve PyLint RegEx to match single lines
* Also return more detailed results for further analysis
2020-10-23 22:23:57 +02:00

36 lines
1.1 KiB
Ruby

class PyLintAdapter < TestingFrameworkAdapter
REGEXP = /Your code has been rated at (-?\d+\.?\d*)\/(\d+\.?\d*)/
ASSERTION_ERROR_REGEXP = /^.*?\([^,]*?,\ ([^,]*?),[^,]*?\)\ (.*?)$/
def self.framework_name
'PyLint'
end
def parse_output(output)
regex_match = REGEXP.match(output[:stdout])
if regex_match.blank?
count = 0
failed = 0
else
captures = regex_match.captures.map(&:to_f)
count = captures.second
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 do |match|
test = match.first.strip
description = match.second.strip
{test: test, description: description}
end || []
end
rescue Timeout::Error
assertion_error_matches = []
end
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