cookiecutter-hypermodern-python icon indicating copy to clipboard operation
cookiecutter-hypermodern-python copied to clipboard

Proposal: use ruff to replace flake8 and related extensions

Open cauliyang opened this issue 3 years ago • 15 comments

Now ruff is blazing fast linter than flake8. Its rules are self contained and it is evolving quickly so far. Currently it has covered most useful rules. I think we can keep an eye on it and move to ruff at proper time. What do you think?

cauliyang avatar Dec 27 '22 03:12 cauliyang

I strongly agree. Not only is it faster, the list of modules that would get replaced, AFAIK is:

  • bandit
  • flake8-bugbear
  • flake8-docstrings
  • flake8-rst-docstrings
  • isort
  • pep8-naming
  • pydocstyle
  • pyupgrade

In addition, there's more out-of-the-box functionality (e.g. pandas-vet for us pandas users).

joelb123 avatar Apr 05 '23 16:04 joelb123

@joelb123 @cauliyang do you know of any forks that use ruff? I have a fork at https://github.com/bmritz/cookiecutter-hypermodern-python that I was thinking about putting ruff into, but if there's a reference I could go off of, that would be helpful.

EDIT: here's one: https://github.com/dbatten5/cookiecutter-hypermodern-python. And here is the relevant commit: https://github.com/dbatten5/cookiecutter-hypermodern-python/commit/327b373ce1ffbb1ebfb13e9d3fa8b48a4fafe271

bmritz avatar Apr 26 '23 01:04 bmritz

Yes, I saw the @dbatten5 commit, but I haven't looked at it in detail. I did notice that this fork kept 'isort', which is a pity since getting rid of fighting with 'isort' is one of the many good things about ruff.

Because ruff is so performant and has '--fix' for many issues, it can enable checks/fixes with every save by the IDE (e.g., via the pycharm ruff plugin). This means more productivity for those who use ruff, but it also means more boilerplate in 'pyproject.toml'.

joelb123 avatar Apr 26 '23 02:04 joelb123

I couldn't really get ruff working without isort the same as when I had isort. Would be happy to get rid of it though and run everything through ruff - do you have an example config for ruff replacing the need for isort @joelb123 ?

EDIT: Got there in the end https://github.com/dbatten5/cookiecutter-hypermodern-python/commit/68dbd7d52e6215119aa6428f472b1ee44603c009 . Was having a little trouble with autodetection of first party imports so ended up having to go with src = ['src', 'tests'] under [tool.ruff].

dbatten5 avatar Apr 26 '23 07:04 dbatten5

Does anyone have ruff running succesfully and able to open a PR in this repo?

bosd avatar Feb 27 '24 20:02 bosd

I have it running in my fork https://github.com/dbatten5/cookiecutter-hypermodern-python. Should be able to open a PR in the near future

dbatten5 avatar Feb 28 '24 08:02 dbatten5

I think this would be a great change, not sure if anyone has put in a PR for it yet?

aeturrell avatar May 15 '24 07:05 aeturrell

I'm working on replacing all compatible linters with ruff on my fork. The only things I didn't replace yet are darglint and flake8-rst-docstrings. I'm not sure how to handle them. I also replaced black with ruff format.

Given darglint was archived, I wonder if it is still relevant. But there's an open issue for it on ruff repo. However, flake8-rst-docstrings don't have an open discussion there.

bruno-fs avatar May 28 '24 18:05 bruno-fs

There's darglint2 per https://softwarerecs.stackexchange.com/a/86925/61183, additionally, there's a pylint plugin with similar features. There's a similar flake8 integration in https://github.com/jsh9/pydoclint which is promised to be faster. The latter was actually offered in the issue mentioned above.

webknjaz avatar May 28 '24 21:05 webknjaz

@webknjaz Thanks for pointing that out! I'm impressed with pydoclint speed!

bruno-fs avatar May 28 '24 22:05 bruno-fs

@bruno-fs Your fork looks really interesting. Any plans to contribute and open a PR here? 🙏

bosd avatar Aug 09 '24 11:08 bosd

Thanks, @bosd. I'm using it in some projects.

I do plan to open a PR, but aaaaaaaaaall the documentation still needs to be updated and I have other priorities atm.

Also, I went a little bit further and stripped away flake8-rst-docstrings and replaced darglint with pydoclint, which might be seem as controversial moves.

Furthermore, I'm also on the verge of removing poetry.lock from the template, because it is a constant source of conflicts in my workflow, which relies on cruft .

bruno-fs avatar Aug 09 '24 14:08 bruno-fs

@bruno-fs Thanks, your fork looks really interesting. Specifically the cruft. Personally I like it, but it might be too opinionated for the projects i'm working with.

bosd avatar Aug 11 '24 19:08 bosd

@bosd cruft is not on the fork, I'm just using it to consume the template instead of using cookiecutter itself :D

But replacing linters with ruff already is an opinionated move. The author might not even accept a PR. What are your thoughts on this matter, @cjolowicz?

Would you accept a PR replacing python linters with ruff? If so, I could create a branch with a cleanup version of my fork, only replacing the linters. I'd probably need help from someone interested to also update the documentation. That part is lacking in my fork.

bruno-fs avatar Aug 12 '24 18:08 bruno-fs

I even want a step further. My fork is based on the one of bruon-fs. Replacing poetry with uv. https://github.com/bosd/cookiecutter-uv-hypermodern-python

bosd avatar Nov 27 '24 18:11 bosd