89 lines
2.9 KiB
Python
89 lines
2.9 KiB
Python
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
import argparse
|
|
import os
|
|
|
|
from compare_locales.lint.linter import L10nLinter
|
|
from compare_locales.lint.util import (
|
|
default_reference_and_tests,
|
|
mirror_reference_and_tests,
|
|
l10n_base_reference_and_tests,
|
|
)
|
|
from compare_locales import mozpath
|
|
from compare_locales import paths
|
|
from compare_locales import parser
|
|
from compare_locales import version
|
|
|
|
|
|
epilog = """\
|
|
moz-l10n-lint checks for common mistakes in localizable files. It tests for
|
|
duplicate entries, parsing errors, and the like. Optionally, it can compare
|
|
the strings to an external reference with strings and warn if a string might
|
|
need to get a new ID.
|
|
"""
|
|
|
|
|
|
def main():
|
|
p = argparse.ArgumentParser(
|
|
description="Validate localizable strings",
|
|
epilog=epilog,
|
|
)
|
|
p.add_argument("l10n_toml")
|
|
p.add_argument("--version", action="version", version="%(prog)s " + version)
|
|
p.add_argument("-W", action="store_true", help="error on warnings")
|
|
p.add_argument(
|
|
"--l10n-reference",
|
|
dest="l10n_reference",
|
|
metavar="PATH",
|
|
help="check for conflicts against an l10n-only reference repository "
|
|
"like gecko-strings",
|
|
)
|
|
p.add_argument(
|
|
"--reference-project",
|
|
dest="ref_project",
|
|
metavar="PATH",
|
|
help="check for conflicts against a reference project like " "android-l10n",
|
|
)
|
|
args = p.parse_args()
|
|
if args.l10n_reference:
|
|
l10n_base, locale = os.path.split(os.path.abspath(args.l10n_reference))
|
|
if not locale or not os.path.isdir(args.l10n_reference):
|
|
p.error("Pass an existing l10n reference")
|
|
else:
|
|
l10n_base = "."
|
|
locale = None
|
|
pc = paths.TOMLParser().parse(args.l10n_toml, env={"l10n_base": l10n_base})
|
|
if locale:
|
|
pc.set_locales([locale], deep=True)
|
|
files = paths.ProjectFiles(locale, [pc])
|
|
get_reference_and_tests = default_reference_and_tests
|
|
if args.l10n_reference:
|
|
get_reference_and_tests = l10n_base_reference_and_tests(files)
|
|
elif args.ref_project:
|
|
get_reference_and_tests = mirror_reference_and_tests(files, args.ref_project)
|
|
linter = L10nLinter()
|
|
results = linter.lint(
|
|
(f for f, _, _, _ in files.iter_reference() if parser.hasParser(f)),
|
|
get_reference_and_tests,
|
|
)
|
|
rv = 0
|
|
if results:
|
|
rv = 1
|
|
if all(r["level"] == "warning" for r in results) and not args.W:
|
|
rv = 0
|
|
for result in results:
|
|
print(
|
|
"{} ({}:{}): {}".format(
|
|
mozpath.relpath(result["path"], "."),
|
|
result.get("lineno", 0),
|
|
result.get("column", 0),
|
|
result["message"],
|
|
)
|
|
)
|
|
return rv
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|