diff options
Diffstat (limited to 'comm/tools/lint/commlint')
-rw-r--r-- | comm/tools/lint/commlint/__init__.py | 111 | ||||
-rw-r--r-- | comm/tools/lint/commlint/l10n_lint.py | 16 |
2 files changed, 127 insertions, 0 deletions
diff --git a/comm/tools/lint/commlint/__init__.py b/comm/tools/lint/commlint/__init__.py new file mode 100644 index 0000000000..19d887e109 --- /dev/null +++ b/comm/tools/lint/commlint/__init__.py @@ -0,0 +1,111 @@ +# 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 os +from contextlib import contextmanager +from pathlib import Path + +from mozlint.pathutils import expand_exclusions +from mozlint.types import supported_types +from mozpack import path as mozpath + +COMM_EXCLUSION_FILES = [ + os.path.join("comm", "tools", "lint", "ThirdPartyPaths.txt"), + os.path.join("comm", "tools", "lint", "Generated.txt"), +] + +TASKCLUSTER_EXCLUDE_PATHS = (os.path.join("comm", "suite"),) + + +@contextmanager +def pushd(dest_path: Path): + """ + Sets the cwd within the context + :param Path dest_path: The path to the cwd + """ + origin = Path().absolute() + try: + os.chdir(dest_path) + yield + finally: + os.chdir(origin) + + +def _apply_global_excludes(root, config): + exclude = config.get("exclude", []) + + for path in COMM_EXCLUSION_FILES: + with open(os.path.join(root, path), "r") as fh: + exclude.extend([mozpath.join(root, f.strip()) for f in fh.readlines()]) + + if os.environ.get("MOZLINT_NO_SUITE", None): + # Ignore Seamonkey-only paths when run from Taskcluster + suite_excludes = [mozpath.join(root, path) for path in TASKCLUSTER_EXCLUDE_PATHS] + exclude.extend(suite_excludes) + + config["exclude"] = exclude + + +# This makes support file paths absolute, allowing lintpref to find StaticPrefList.yaml +def _expand_support_files(root, config): + support_files = config.get("support-files", []) + absolute_support_files = [mozpath.join(root, f) for f in support_files] + config["support-files"] = absolute_support_files + + +def eslint_wrapper(paths, config, **lintargs): + comm_root = Path(lintargs["root"]) / "comm" + with pushd(comm_root): + rv = lint_wrapper(paths, config, **lintargs) + + return rv + + +def stylelint_wrapper(paths, config, **lintargs): + comm_root = Path(lintargs["root"]) / "comm" + + ignore_file = str(comm_root / ".stylelintignore") + lintargs.setdefault("extra_args", []) + lintargs["extra_args"].extend(["--ignore-path", ignore_file]) + + with pushd(comm_root): + rv = lint_wrapper(paths, config, **lintargs) + + return rv + + +def black_lint(paths, config, fix=None, **lintargs): + from python.black import run_black + + files = list(expand_exclusions(paths, config, lintargs["root"])) + + # prepend "--line-length 99" to files, it will be processed as an argument + black_args = ["-l", "99"] + files + + return run_black( + config, + black_args, + fix=fix, + log=lintargs["log"], + virtualenv_bin_path=lintargs.get("virtualenv_bin_path"), + ) + + +def lint_wrapper(paths, config, **lintargs): + _apply_global_excludes(lintargs["root"], config) + _expand_support_files(lintargs["root"], config) + + payload = supported_types[config.get("wrappedType", config["type"])] + config["payload"] = config["wraps"] + del config["wraps"] + + if config.get("wrappedType", ""): + config["type"] = config["wrappedType"] + del config["wrappedType"] + + if config.get("commroot", False): + lintargs["root"] = os.path.join(lintargs["root"], "comm") + del config["commroot"] + + return payload(paths, config, **lintargs) diff --git a/comm/tools/lint/commlint/l10n_lint.py b/comm/tools/lint/commlint/l10n_lint.py new file mode 100644 index 0000000000..ad880d5cde --- /dev/null +++ b/comm/tools/lint/commlint/l10n_lint.py @@ -0,0 +1,16 @@ +# 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/. + +from python.l10n_lint import lint_strings, strings_repo_setup + +LOCALE = "comm-strings-quarantine" +STRINGS_REPO = "https://hg.mozilla.org/projects/comm-strings-quarantine" + + +def comm_strings_setup(**lint_args): + return strings_repo_setup(STRINGS_REPO, LOCALE) + + +def lint(paths, lintconfig, **lintargs): + return lint_strings(LOCALE, paths, lintconfig, **lintargs) |