Skip to main content

pylint-sonarjson-catlab

This project is a fork of pylint-sonarjson, which is not maintained anymore.

With authorization of the original owners, we are now pushing updates on PyPI begining at pylint-sonarjson 2.0.0.

A PyLint plugin that can output to SonarQube-importable JSON with configurable issue severity, effort, and type.

This is useful because when importing PyLint's parsable output via SonarQube mechanism for third-party issues all the severities are set to MAJOR. With pylint-sonarjson-catlab you can configure the issue severity per PyLint message ID, and import that as generic JSON in SonarQube.

Usage

pylint \
    --load-plugins=pylint_sonarjson \
    --output-format=sonarjson \
    --sonar-rules=<msg_id>:<severity>[:<effort>[:<type>]],... \
    --sonar-default-severity=<severity> \
    --sonar-default-effort=<effort> \
    --sonar-default-type=<type> \
    --only-enable-sonar-rules=<y or n> \
    --halt-on-invalid-sonar-rules=<y or n> \
    [...]

The plugin provides a new option sonar-rules that can configure the severity, effort, and type of the issue as it would appear in SonarQube. The option takes a comma-separated list whose items are of the form <msg_id>:<severity>:<effort>:<type>. The effort and type are optional and may be omitted.

In addition, the default severity, effort, and type for messages that are not listed in sonar-rules can respectively be set with sonar-default-severity, sonar-default-effort, sonar-default-type. They default to MINOR, 5, and CODE_SMELL respectively.

Setting the option only-enable-sonar-rules to y disables all messages except for those specified in sonar-rules. It is equivalent to --disable=all --enable=<msg_id>,... where <msg_id>,... are the message IDs specified in sonar-rules. The default value of only-enable-sonar-rules is n.

Lastly, enabling the option halt-on-invalid-sonar-rules will cause the plugin to raise an exception when a rule given in sonar-rules does not exist in Pylint and halt. Disabling this option will instead only report the invalid rule on stderr but will otherwise ignore the invalid rule. The default value of halt-on-invalid-sonar-rules is y.`

For example:

pylint \
    --load-plugins=pylint_sonarjson \
    --output-format=sonarjson \
    --sonar-rules=C0114:INFO:10,C0328:MINOR:1 \
    my_file.py

Output:

{
    "issues": [
        {
            "engineId": "PYLINT",
            "ruleId": "C0114",
            "type": "CODE_SMELL",
            "primaryLocation": {
                "message": "Missing module docstring",
                "filePath": "my_file.py",
                "textRange": {
                    "startLine": 1,
                    "startColumn": 0
                }
            },
            "severity": "INFO",
            "effortMinutes": 10
        }
    ]
}

This output, when saved to a file, can be imported into SonarQube as follows:

sonar-scanner -Dsonar.externalIssuesReportPaths=<path_to_pylint_sonarjson_catlab_log>

Installation

pip install pylint-sonarjson-catlab

Configuration via pylintrc or pyproject.toml

Instead of via the command line, the plugin can be configured via a pylintrc file or via pyproject.toml,
as described in the Pylint documentation. Here is an exampe pylintrc file, generated with the --generate-rcfile command line option:

[MAIN]

load-plugins=pylint_sonarjson


[REPORTS]

output-format=sonarjson


[SONARQUBE JSON OUTPUT]

# If enabled, an exception will be raised if a non-existing rule is given in
# --sonar-rules and the  plugin will halt. When disabled, non-existing rules
# will be reported on stderr but are otherwise ignored.
halt-on-invalid-sonar-rules=yes

# Only enable messages specified in --sonar-rules.
only-enable-sonar-rules=no

# Number of effort minutes for rules not specified in --sonar-rules.
sonar-default-effort=5

# Issue severity for rules not specified in --sonar-rules.
sonar-default-severity=MINOR

# Type of SonarQube issue for rules not specified in --sonar-rules.
sonar-default-type=CODE_SMELL

# Comma-separated list of rules, their severity, and the minutes of efforts to
# fix the issues. The syntax is <message id>:<severity>[:<effort
# minutes>[:<type>]].
sonar-rules=C0114:INFO:10,C0328:MINOR:1

Similar output for pyproject.toml can be generated with the --generate-toml-config command line option.

Metadata

Release files for pylint-sonarjson 2.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pylint-sonarjson 2.0.1
File Size Uploaded
pylint_sonarjson-2.0.1.tar.gz 8.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pylint-sonarjson 2.0.1
File Interpreter ABI Platform
pylint_sonarjson-2.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 17.1 kB

Release files / pylint_sonarjson-2.0.1.tar.gz

Download URL pylint_sonarjson-2.0.1.tar.gz
Size 8.0 kB
Tags Source
SHA-256 checksum
How to use checksums
cb95e89e2a6e72c40d8e852842be35803227d3dacddfc3fbb89c6d786f296204
BLAKE2b-256 checksum
How to use checksums
e53d9c2f6f4c920491eec056300cab3b2b36b42ef67e8c5f79409a59e0aa4780
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.20

Release files / pylint_sonarjson-2.0.1-py3-none-any.whl

Download URL pylint_sonarjson-2.0.1-py3-none-any.whl
Size 9.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
10ab4046f3b75ea336ca8786931c8dcfc2c6e52d4ac9bd72814d6ee3017e6061
BLAKE2b-256 checksum
How to use checksums
8068d76e02037fc0e43b1ad2c26dcf49fa3eabb8f3d446032f7c5e8e28ad8ed1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.20

Release history Release notifications | RSS feed

This release

2.0.1 This release

2 release files

2.0.0

2 release files

1.0.6

1 release file

1.0.5

1 release file

1.0.4

1 release file

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page