Options for linting Cython code

Question:

I have a Cython module that I would like to lint PEP8 style, however pylint syntax errors on Cython cdef syntax. Does anyone have a suggestion about how to maintain Python coding standards for Cython code?

Asked By: Rich

||

Answers:

Although not command-line based, PyCharm claims to have Cython support. Unfortunately, it’s only available on the paid-version “Professional Edition”.

Answered By: pepoluan

I use Sublime Text editor with SublimeLinter Flake8 package.

My Flake8 config is:

"flake8": {
            "@disable": false,
            "args": [
                "--doctests"
            ],
            "builtins": "",
            "excludes": [],
            "ignore": "",
            "ignore_match": {
                "pyx": [
                    "SyntaxError"
                ]
            },
            "jobs": "1",
            "max-complexity": 7,
            "max-line-length": null,
            "select": "",
            "show-code": false
        },

“ignore_match” key is used to define regular expressions that ignore some reported errors by a linter.

In this case I used it to ignore syntaxis errors in .pyx files. You can define new expressions to meet your needs.

Sorry because it’s not a Cython linter, it’s just a trick to make Python linter useful.

More info in sublimelinter official docs.

Answered By: J. Mulet

Extending off @j-mulet’s answer, a useful example is that Pandas keeps its own cython.cfg file as Cython-specific rules to search for across .pyx files.

[flake8]
filename = *.pyx,*.pxd
select = E501,E302,E203,E111, ...

You can then call tell flake8 where this lives:

$ flake8 -config <path-to-cython.cfg>
Answered By: Brad Solomon

As of 2022, you can use cython-lint

Install with

$ pip install cython-lint

Or use as pre-commit hook:

-   repo: https://github.com/MarcoGorelli/cython-lint
    rev: v0.10.1
    hooks:
    -   id: cython-lint
Answered By: ignoring_gravity
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.