Revision control
Copy as Markdown
Other Tools
# 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
import copy
import os
import sys
from mozfile import load_source
from mach.decorators import Command
from mozbuild.base import BuildEnvironmentNotFoundException
HERE = os.path.abspath(os.path.dirname(__file__))
def setup_argument_parser():
    from mozlint import cli
    return cli.MozlintParser()
@Command(
    "commlint",
    category="thunderbird",
    description="Run linters with Thunderbird configurations.",
    parser=setup_argument_parser,
    virtualenv_name="lint",
)
def lint(command_context, *runargs, **lintargs):
    """Run linters."""
    command_context.activate_virtualenv()
    mach_lint = load_source(
        "mach_lint", os.path.join(command_context.topsrcdir, "tools/lint/mach_commands.py")
    )
    from mozlint import cli, parser
    try:
        buildargs = {}
        buildargs["substs"] = copy.deepcopy(dict(command_context.substs))
        buildargs["defines"] = copy.deepcopy(dict(command_context.defines))
        buildargs["topobjdir"] = command_context.topobjdir
        lintargs.update(buildargs)
    except BuildEnvironmentNotFoundException:
        pass
    lintargs.setdefault("root", command_context.topsrcdir)
    if lintargs["extra_args"] is None:
        lintargs["extra_args"] = []
    lintargs["exclude"] = mach_lint.get_global_excludes(**lintargs)
    # Add the linter code from gecko to sys.path. Normally handled by "config_paths"
    sys.path.insert(0, mach_lint.here)
    lintargs["config_paths"].insert(0, HERE)
    lintargs["virtualenv_bin_path"] = command_context.virtualenv_manager.bin_path
    lintargs["virtualenv_manager"] = command_context.virtualenv_manager
    if mach_lint.REPORT_WARNINGS and lintargs.get("show_warnings") is None:
        lintargs["show_warnings"] = "soft"
    for path in mach_lint.EXCLUSION_FILES:
        parser.GLOBAL_SUPPORT_FILES.append(os.path.join(command_context.topsrcdir, path))
    setupargs = {
        "mach_command_context": command_context,
    }
    return cli.run(*runargs, setupargs=setupargs, **lintargs)