Mercurial > hg
diff i18n/check-translation.py @ 43076:2372284d9457
formatting: blacken the codebase
This is using my patch to black
(https://github.com/psf/black/pull/826) so we don't un-wrap collection
literals.
Done with:
hg files 'set:**.py - mercurial/thirdparty/** - "contrib/python-zstandard/**"' | xargs black -S
# skip-blame mass-reformatting only
# no-check-commit reformats foo_bar functions
Differential Revision: https://phab.mercurial-scm.org/D6971
author | Augie Fackler <augie@google.com> |
---|---|
date | Sun, 06 Oct 2019 09:45:02 -0400 |
parents | 19fc5a986669 |
children | c102b704edb5 |
line wrap: on
line diff
--- a/i18n/check-translation.py Sat Oct 05 10:29:34 2019 -0400 +++ b/i18n/check-translation.py Sun Oct 06 09:45:02 2019 -0400 @@ -10,12 +10,15 @@ scanners = [] checkers = [] + def scanner(): def decorator(func): scanners.append(func) return func + return decorator + def levelchecker(level, msgidpat): def decorator(func): if msgidpat: @@ -25,8 +28,10 @@ checkers.append((func, level)) func.match = match return func + return decorator + def match(checker, pe): """Examine whether POEntry "pe" is target of specified checker or not """ @@ -39,11 +44,14 @@ return return True + #################### + def fatalchecker(msgidpat=None): return levelchecker('fatal', msgidpat) + @fatalchecker(r'\$\$') def promptchoice(pe): """Check translation of the string given to "ui.promptchoice()" @@ -70,7 +78,10 @@ if [c for c, i in indices if len(c) == i + 1]: yield "msgstr has invalid '&' followed by none" + deprecatedpe = None + + @scanner() def deprecatedsetup(pofile): pes = [p for p in pofile if p.msgid == '(DEPRECATED)' and p.msgstr] @@ -78,6 +89,7 @@ global deprecatedpe deprecatedpe = pes[0] + @fatalchecker(r'\(DEPRECATED\)') def deprecated(pe): """Check for DEPRECATED @@ -109,16 +121,20 @@ ... msgstr= 'something (DETACERPED, foo bar)') >>> match(deprecated, pe) """ - if not ('(DEPRECATED)' in pe.msgstr or - (deprecatedpe and - deprecatedpe.msgstr in pe.msgstr)): + if not ( + '(DEPRECATED)' in pe.msgstr + or (deprecatedpe and deprecatedpe.msgstr in pe.msgstr) + ): yield "msgstr inconsistently translated (DEPRECATED)" + #################### + def warningchecker(msgidpat=None): return levelchecker('warning', msgidpat) + @warningchecker() def taildoublecolons(pe): """Check equality of tail '::'-ness between msgid and msgstr @@ -141,6 +157,7 @@ if pe.msgid.endswith('::') != pe.msgstr.endswith('::'): yield "tail '::'-ness differs between msgid and msgstr" + @warningchecker() def indentation(pe): """Check equality of initial indentation between msgid and msgstr @@ -159,13 +176,15 @@ if idindent != strindent: yield "initial indentation width differs betweeen msgid and msgstr" + #################### + def check(pofile, fatal=True, warning=False): - targetlevel = { 'fatal': fatal, 'warning': warning } - targetcheckers = [(checker, level) - for checker, level in checkers - if targetlevel[level]] + targetlevel = {'fatal': fatal, 'warning': warning} + targetcheckers = [ + (checker, level) for checker, level in checkers if targetlevel[level] + ] if not targetcheckers: return [] @@ -176,19 +195,22 @@ errors = [] for checker, level in targetcheckers: if match(checker, pe): - errors.extend((level, checker.__name__, error) - for error in checker(pe)) + errors.extend( + (level, checker.__name__, error) for error in checker(pe) + ) if errors: detected.append((pe, errors)) return detected + ######################################## if __name__ == "__main__": import sys import optparse - optparser = optparse.OptionParser("""%prog [options] pofile ... + optparser = optparse.OptionParser( + """%prog [options] pofile ... This checks Mercurial specific translation problems in specified '*.po' files. @@ -207,32 +229,44 @@ # no-foo-check msgid = "....." msgstr = "....." -""") - optparser.add_option("", "--warning", - help="show also warning level problems", - action="store_true") - optparser.add_option("", "--doctest", - help="run doctest of this tool, instead of check", - action="store_true") +""" + ) + optparser.add_option( + "", + "--warning", + help="show also warning level problems", + action="store_true", + ) + optparser.add_option( + "", + "--doctest", + help="run doctest of this tool, instead of check", + action="store_true", + ) (options, args) = optparser.parse_args() if options.doctest: import os + if 'TERM' in os.environ: del os.environ['TERM'] import doctest + failures, tests = doctest.testmod() sys.exit(failures and 1 or 0) detected = [] warning = options.warning for f in args: - detected.extend((f, pe, errors) - for pe, errors in check(polib.pofile(f), - warning=warning)) + detected.extend( + (f, pe, errors) + for pe, errors in check(polib.pofile(f), warning=warning) + ) if detected: for f, pe, errors in detected: for level, checker, error in errors: - sys.stderr.write('%s:%d:%s(%s): %s\n' - % (f, pe.linenum, level, checker, error)) + sys.stderr.write( + '%s:%d:%s(%s): %s\n' + % (f, pe.linenum, level, checker, error) + ) sys.exit(1)