#! /usr/bin/python3

"""
The csdiff tool doesn't support the Pylint's JSON output yet.  So this just a
trivial wrapper which reads Pylint's report and transforms it to JSON which is
supported by csdiff.

The script accepts the same parameters as pylint itself.
"""

import sys
import json
import subprocess

PYLINT = ["pylint", "-rn", "--score=no", "--output-format=json"]


def _main():
    pylint_command = PYLINT + sys.argv[1:]

    # pylint: disable=subprocess-run-check
    pylint_result = subprocess.run(pylint_command, capture_output=True)
    data = json.loads(pylint_result.stdout)
    csdiff_data = []
    for defect in data:
        message = defect["obj"] + ": " if defect["obj"] else ""
        message += defect["message"]

        csdiff_data.append({
            "checker": "PYLINT_WARNING",
            "events": [{
                "file_name": defect["path"],
                "line": defect["line"],
                "column": defect["column"],
                "event": "{}[{}]".format(defect["message-id"],
                                         defect["symbol"]),
                "message": message,
            }],
        })

    print(json.dumps({"defects": csdiff_data}, indent=2))
    return pylint_result.returncode


if __name__ == "__main__":
    sys.exit(_main())
