Add filter for unknown PyLint messages

This commit is contained in:
Sebastian Serth
2020-11-13 22:52:56 +01:00
parent c9e5d60dfb
commit 5fe1590b39
2 changed files with 39 additions and 1 deletions

View File

@ -13,6 +13,7 @@ de:
# d. replacement: A fix replacement translation which is used instead of the # d. replacement: A fix replacement translation which is used instead of the
# original English output. It may refer to one of the named capture # original English output. It may refer to one of the named capture
# groups to include dynamic content from the English original # groups to include dynamic content from the English original
# e. log_missing: Specifies whether missing translations should be logged to Sentry
# 4. Optionally a named capture group from the regex # 4. Optionally a named capture group from the regex
# 5. A list of fix translations for _values / matches_ of the named capture group # 5. A list of fix translations for _values / matches_ of the named capture group
# #
@ -23,11 +24,13 @@ de:
name: Falsche Import-Position name: Falsche Import-Position
regex: .*"(?<import>.*)".* regex: .*"(?<import>.*)".*
replacement: Der Import von "%{import}" sollte am Anfang der Datei stehen replacement: Der Import von "%{import}" sollte am Anfang der Datei stehen
log_missing: false
bad-whitespace: bad-whitespace:
example: No space allowed before bracket example: No space allowed before bracket
name: Inkorrektes Leerzeichen name: Inkorrektes Leerzeichen
regex: (?<what>Exactly one space required|No space allowed) (?<where>after|before|around) (?<when>.*) regex: (?<what>Exactly one space required|No space allowed) (?<where>after|before|around) (?<when>.*)
replacement: "%{where} %{when} %{what}" replacement: "%{where} %{when} %{what}"
log_missing: true
what: what:
No space allowed: sollte kein Leerzeichen stehen No space allowed: sollte kein Leerzeichen stehen
Exactly one space required: sollte genau ein Leerzeichen stehen Exactly one space required: sollte genau ein Leerzeichen stehen
@ -47,11 +50,13 @@ de:
name: Mehrere Anweisungen name: Mehrere Anweisungen
regex: .* regex: .*
replacement: Mehr als eine Anweisung in einer Zeile replacement: Mehr als eine Anweisung in einer Zeile
log_missing: false
superfluous-parens: superfluous-parens:
example: Unnecessary parens after 'if' keyword example: Unnecessary parens after 'if' keyword
name: Überflüssige Klammer name: Überflüssige Klammer
regex: .*'(?<keyword>.*)'.* regex: .*'(?<keyword>.*)'.*
replacement: Nach dem Schlüsselwort '%{keyword}' ist keine Klammer notwendig replacement: Nach dem Schlüsselwort '%{keyword}' ist keine Klammer notwendig
log_missing: false
error: error:
severity_name: Fehler severity_name: Fehler
function-redefined: function-redefined:
@ -59,17 +64,20 @@ de:
name: Funktionsdefinition überschrieben name: Funktionsdefinition überschrieben
regex: .*line (?<line>\d*).* regex: .*line (?<line>\d*).*
replacement: Eine Funktion mit demselben Namen wurde bereits in Zeile %{line} definiert replacement: Eine Funktion mit demselben Namen wurde bereits in Zeile %{line} definiert
log_missing: false
import-error: import-error:
example: Unable to import 'turtel' example: Unable to import 'turtel'
name: Import-Fehler name: Import-Fehler
regex: .*'(?<import>.*)'.* regex: .*'(?<import>.*)'.*
replacement: Der Import von '%{import} ist fehlgeschlagen replacement: Der Import von '%{import} ist fehlgeschlagen
log_missing: false
syntax-error: syntax-error:
example: EOL while scanning string literal (<unknown>, line 1) example: EOL while scanning string literal (<unknown>, line 1)
name: Syntax-Fehler name: Syntax-Fehler
regex: | regex: |
(?<what>invalid syntax|EOL while scanning string literal|EOF while scanning triple-quoted string literal|cannot assign to|expected an indented block|Missing parentheses in call to|closing parenthesis|expression cannot contain assignment, perhaps you meant|f-string expression part cannot include a backslash|f-string:|invalid character in identifier|invalid decimal literal|trailing comma not allowed without surrounding parentheses|unexpected EOF while parsing|unexpected character after line continuation character|unexpected indent|unindent does not match any outer indentation level|unmatched) ?(?<what_exactly>function call|literal|operator|set display|empty expression not allowed|single|unmatched)? ?(?:'(?<actual>[^'"]*)'\.*)? ?(?:(?<explanation>Did you mean|does not match opening parenthesis|is not allowed)(?: ')?)?(?:(?<suggestion>.*)(?:\?|'|"))? ?\((?<context>.*), line (?<line>\d*)\).* (?<what>invalid syntax|EOL while scanning string literal|EOF while scanning triple-quoted string literal|cannot assign to|expected an indented block|Missing parentheses in call to|closing parenthesis|expression cannot contain assignment, perhaps you meant|f-string expression part cannot include a backslash|f-string:|invalid character in identifier|invalid decimal literal|trailing comma not allowed without surrounding parentheses|unexpected EOF while parsing|unexpected character after line continuation character|unexpected indent|unindent does not match any outer indentation level|unmatched) ?(?<what_exactly>function call|literal|operator|set display|empty expression not allowed|single|unmatched)? ?(?:'(?<actual>[^'"]*)'\.*)? ?(?:(?<explanation>Did you mean|does not match opening parenthesis|is not allowed)(?: ')?)?(?:(?<suggestion>.*)(?:\?|'|"))? ?\((?<context>.*), line (?<line>\d*)\).*
replacement: "%{what}%{what_exactly}%{actual}%{explanation}%{suggestion}" # unused: context, line replacement: "%{what}%{what_exactly}%{actual}%{explanation}%{suggestion}" # unused: context, line
log_missing: true
what: what:
invalid syntax: Ungültige Syntax invalid syntax: Ungültige Syntax
EOL while scanning string literal: Ein String wurde nicht geschlossen EOL while scanning string literal: Ein String wurde nicht geschlossen
@ -116,16 +124,19 @@ de:
name: Undefinierter Bezeichner name: Undefinierter Bezeichner
regex: .*'(?<name>.*)'.* regex: .*'(?<name>.*)'.*
replacement: Der Name '%{name}' ist unbekannt replacement: Der Name '%{name}' ist unbekannt
log_missing: false
used-before-assignment: used-before-assignment:
example: Using variable 'kleidung' before assignment example: Using variable 'kleidung' before assignment
name: Verwendung vor Zuweisung name: Verwendung vor Zuweisung
regex: .*'(?<name>.*)'.* regex: .*'(?<name>.*)'.*
replacement: Die Variable '%{name}' wird vor ihrer erstmaligen Zuweisung verwendet replacement: Die Variable '%{name}' wird vor ihrer erstmaligen Zuweisung verwendet
log_missing: false
return-outside-function: return-outside-function:
example: Return outside function example: Return outside function
name: Return außerhalb einer Funktion name: Return außerhalb einer Funktion
regex: .* regex: .*
replacement: Ein Return kann nur innerhalb einer Funktion verwendet werden replacement: Ein Return kann nur innerhalb einer Funktion verwendet werden
log_missing: false
refactor: refactor:
severity_name: Überarbeitung empfohlen severity_name: Überarbeitung empfohlen
comparison-with-itself: comparison-with-itself:
@ -133,16 +144,19 @@ de:
name: Vergleich mit sich selbst name: Vergleich mit sich selbst
regex: .* - (?<comparison>.*) regex: .* - (?<comparison>.*)
replacement: Der Vergleich ist überflüssig - %{comparison} replacement: Der Vergleich ist überflüssig - %{comparison}
log_missing: false
inconsistent-return-statements: inconsistent-return-statements:
example: Either all return statements in a function should return an expression, or none of them should. example: Either all return statements in a function should return an expression, or none of them should.
name: Uneinheitliche Rückgabewerte name: Uneinheitliche Rückgabewerte
regex: .* regex: .*
replacement: Entweder sollten alle return Anweisungen in einer Funktion ein Ergebnis zurückgeben oder keine Anweisung sollte einen Rückgabewert haben replacement: Entweder sollten alle return Anweisungen in einer Funktion ein Ergebnis zurückgeben oder keine Anweisung sollte einen Rückgabewert haben
log_missing: false
redefined-argument-from-local: redefined-argument-from-local:
example: Redefining argument with the local name 'Wort' example: Redefining argument with the local name 'Wort'
name: Überschreiben eines Arguments name: Überschreiben eines Arguments
regex: .*'(?<name>.*)'.* regex: .*'(?<name>.*)'.*
replacement: Das Argument '%{name}' wird überschrieben replacement: Das Argument '%{name}' wird überschrieben
log_missing: false
warning: warning:
severity_name: Warnung severity_name: Warnung
bad-indentation: bad-indentation:
@ -150,68 +164,82 @@ de:
name: Ungültige Einrückung name: Ungültige Einrückung
regex: .*(?<actual>\d+).*(?<expected>\d+).* regex: .*(?<actual>\d+).*(?<expected>\d+).*
replacement: Statt %{actual} Leerzeichen wurden %{expected} Leerzeichen erwartet replacement: Statt %{actual} Leerzeichen wurden %{expected} Leerzeichen erwartet
log_missing: false
duplicate-key: duplicate-key:
example: Duplicate key 100 in dictionary example: Duplicate key 100 in dictionary
name: Doppelter Schlüssel name: Doppelter Schlüssel
regex: Duplicate key (?<key>.*) in dictionary regex: Duplicate key (?<key>.*) in dictionary
replacement: Der Schlüssel '%{key}' ist im Dictionary doppelt vorhanden replacement: Der Schlüssel '%{key}' ist im Dictionary doppelt vorhanden
log_missing: false
duplicate-except: duplicate-except:
example: Catching previously caught exception type ValueError example: Catching previously caught exception type ValueError
name: Doppeltes Except name: Doppeltes Except
regex: Catching previously caught exception type (?<exception>.*) regex: Catching previously caught exception type (?<exception>.*)
replacement: Die zuvor bereits aufgefangene Exception '%{exception}' wird erneut behandelt replacement: Die zuvor bereits aufgefangene Exception '%{exception}' wird erneut behandelt
log_missing: false
mixed-indentation: mixed-indentation:
example: Found indentation with tabs instead of spaces example: Found indentation with tabs instead of spaces
name: Gemischte Einrückung name: Gemischte Einrückung
regex: .* regex: .*
replacement: Es wurde eine Einrückung mit Tabs anstelle von Leerzeichen entdeckt replacement: Es wurde eine Einrückung mit Tabs anstelle von Leerzeichen entdeckt
log_missing: false
pointless-statement: pointless-statement:
example: Statement seems to have no effect example: Statement seems to have no effect
name: sinnlose Anweisung name: sinnlose Anweisung
regex: .* regex: .*
replacement: Die Anweisung scheint keine Auswirkungen zu haben replacement: Die Anweisung scheint keine Auswirkungen zu haben
log_missing: false
pointless-string-statement: pointless-string-statement:
example: String statement has no effect example: String statement has no effect
name: sinnloser String name: sinnloser String
regex: .* regex: .*
replacement: Ein einzelner String ohne Zuweisung hat keine Auswirkung replacement: Ein einzelner String ohne Zuweisung hat keine Auswirkung
log_missing: false
redefined-builtin: redefined-builtin:
example: Redefining built-in 'print' example: Redefining built-in 'print'
name: Überschreiben name: Überschreiben
regex: .*'(?<builtin>.*)'.* regex: .*'(?<builtin>.*)'.*
replacement: Der interne Bezeichner '%{builtin}' wird überschrieben replacement: Der interne Bezeichner '%{builtin}' wird überschrieben
log_missing: false
redefined-outer-name: redefined-outer-name:
example: Redefining name 'name' from outer scope (line 1) example: Redefining name 'name' from outer scope (line 1)
name: Überschreiben name: Überschreiben
regex: .*'(?<name>.*)'.*\(line (?<line>\d*)\).* regex: .*'(?<name>.*)'.*\(line (?<line>\d*)\).*
replacement: Der Bezeichner '%{name}', der bereits in Zeile %{line} definiert wurde, wird überschrieben replacement: Der Bezeichner '%{name}', der bereits in Zeile %{line} definiert wurde, wird überschrieben
log_missing: false
self-assigning-variable: self-assigning-variable:
example: Assigning the same variable 'kleidung' to itself example: Assigning the same variable 'kleidung' to itself
name: Selbstzuweisung name: Selbstzuweisung
regex: .*'(?<name>.*)'.* regex: .*'(?<name>.*)'.*
replacement: Die Variable '%{name}' wird sich selbst zugewiesen replacement: Die Variable '%{name}' wird sich selbst zugewiesen
log_missing: false
unreachable: unreachable:
example: Unreachable code example: Unreachable code
name: Unerreichbar name: Unerreichbar
regex: .* regex: .*
replacement: Die Anweisung wird nie ausgeführt replacement: Die Anweisung wird nie ausgeführt
log_missing: false
undefined-loop-variable: undefined-loop-variable:
example: Using possibly undefined loop variable 'i' example: Using possibly undefined loop variable 'i'
name: Unbekannte Schleifenvariable name: Unbekannte Schleifenvariable
regex: .*'(?<name>.*)'.* regex: .*'(?<name>.*)'.*
replacement: Die Schleifenvariable '%{name}' ist möglicherweise nicht definiert replacement: Die Schleifenvariable '%{name}' ist möglicherweise nicht definiert
log_missing: false
unnecessary-semicolon: unnecessary-semicolon:
example: Unnecessary semicolon example: Unnecessary semicolon
name: Unnötiges Semikolon name: Unnötiges Semikolon
regex: .* regex: .*
replacement: Am Ende einer Zeile sollte kein Semikolon stehen replacement: Am Ende einer Zeile sollte kein Semikolon stehen
log_missing: false
unused-argument: unused-argument:
example: Unused argument 'laenge' example: Unused argument 'laenge'
name: Unbenutztes Argument name: Unbenutztes Argument
regex: .*'(?<name>.*)'.* regex: .*'(?<name>.*)'.*
replacement: Das Argument '%{name}' wird nicht verwendet replacement: Das Argument '%{name}' wird nicht verwendet
log_missing: false
unused-variable: unused-variable:
example: Unused variable 'i' example: Unused variable 'i'
name: Unbenutzte Variable name: Unbenutzte Variable
regex: .*'(?<name>.*)'.* regex: .*'(?<name>.*)'.*
replacement: Die Variable '%{name}' wird nicht verwendet replacement: Die Variable '%{name}' wird nicht verwendet
log_missing: false

View File

@ -83,8 +83,18 @@ class PyLintAdapter < TestingFrameworkAdapter
end end
def self.get_t(key, default) def self.get_t(key, default)
# key might be "linter.#{severity}.#{name}.#{key}.#{value}"
# or something like "linter.#{severity}.#{name}.replacement"
translation = I18n.t(key, locale: :de, default: default) translation = I18n.t(key, locale: :de, default: default)
Raven.capture_message({key: key, default: default}.to_json) if translation == default keys = key.split('.')
final_key = keys.pop
if %w[severity_name name regex replacement].exclude? final_key
keys.pop # second last key, e.g. #{key}
log_missing = I18n.t(keys.append('log_missing').join('.'), locale: :de, default: true)
else
log_missing = true
end
Raven.capture_message({key: key, default: default}.to_json) if translation == default && log_missing
translation translation
end end
end end