Add German translations for PyLint adapter with basic spec

This commit is contained in:
Sebastian Serth
2020-11-08 01:04:39 +01:00
parent d089fd91b7
commit 5fdfb12e62
6 changed files with 283 additions and 1 deletions

View File

@ -27,5 +27,9 @@ class Assessor
end
end
def translate_linter(result)
@testing_framework_adapter.translate_linter(result)
end
class Error < RuntimeError; end
end

View File

@ -39,4 +39,44 @@ class PyLintAdapter < TestingFrameworkAdapter
concatenated_errors = assertion_error_matches.map { |result| "#{result[:name]}: #{result[:result]}" }.flatten
{count: count, failed: failed, error_messages: concatenated_errors, detailed_linter_results: assertion_error_matches}
end
def self.translate_linter(assessment)
# The message will be translated once the results were stored in the database
# See SubmissionScoring for actual function call
assessment[:detailed_linter_results].map! do |message|
severity = message[:severity]
name = message[:name]
message[:severity] = I18n.t("linter.#{severity}.severity_name", locale: :de, default: message[:severity])
message[:name] = I18n.t("linter.#{severity}.#{name}.name", locale: :de, default: message[:name])
regex = I18n.t("linter.#{severity}.#{name}.regex", locale: :de, default: nil)&.strip
if regex.present?
captures = message[:result].match(Regexp.new(regex)).named_captures.symbolize_keys
replacement = captures.each do |key, value|
value&.replace I18n.t("linter.#{severity}.#{name}.#{key}.#{value}", default: value, locale: :de)
end
else
replacement = {}
end
replacement.merge!(locale: :de, default: message[:result])
message[:result] = I18n.t("linter.#{severity}.#{name}.replacement", replacement)
message
end
assessment[:error_messages] = assessment[:detailed_linter_results].map do |message|
"#{message[:name]}: #{message[:result]}"
end
assessment
rescue StandardError => e
# A key was not defined or something really bad happened
Raven.extra_context(assessment)
Raven.capture_exception(e)
assessment
end
end

View File

@ -11,4 +11,8 @@ class PyUnitAndPyLintAdapter < TestingFrameworkAdapter
PyUnitAdapter.new.parse_output(output)
end
end
def translate_linter(result)
PyLintAdapter.translate_linter(result)
end
end