koxudaxi / ruff-pycharm-plugin

PyCharm plugin for ruff. This plugin provides reformat code using ruff.
MIT License
173 stars 6 forks source link

Wrong sorting of imports #422

Open hexvolt opened 2 months ago

hexvolt commented 2 months ago

Describe the bug The sorting of imports is not consistent with ruff CLI output.

The plugin is awesome but when it is enabled, it highlights the imports that are sorted properly by categories. If I reformat the code using the plugin, it rearranges the imports in some weird order (3rd party packages being mixed with the local code packages), which is totally different from what ruff check --select I --fix does. So if sort imports properly with the external command ruff check --select I --fix, then the plugin complains on my imports and tries to rearrange them back.

So in order to use the plugin I have to either cope with seeing yellow highlights on all (properly sorted) imports, or give up proper sorting and let plugin do the weird sorting.

To Reproduce Steps to reproduce the behavior:

  1. Open a python file of any project, that has imports of 3rd party packages, as well as Python built-ins, and imports of local code
  2. Reformat the code using the plugin.
  3. See how the order of imports are mixed up, and the categories are NOT maintained properly (built-ins, 3rd-party, local)
  4. Now in the CLI run the official ruff command for sorting imports ruff check --select I --fix
  5. See how the imports got sorted properly.

Expected behavior The plugin should yield the same results of imports sorting as the official ruff command ruff check --select I --fix.

Screenshots

image

You can see how imports sorted properly by the ruff check --select I --fix command are highlighted by the plugin with yellow, while it shouldn't.

image

And this is the order plugin thinks is correct but it's not.

Environments (please complete the following information):

Notes:

UPDATE Noteworthy is that if I remove the reference to the pyproject.toml file in the plugin settings, it does sorting correctly. But in that case it ignores all other settings like line length etc.

jellehierck commented 2 months ago

I had this issue when using ruff-lsp. Disabling that option in the plugin settings fixed this.

It seemed that somehow the lsp was not picking up (some of) the options which I set in my pyproject.toml file. I suspect the version of lsprotocol has to do with this, although I did not test this very extensively.

I had the following packages installed (managed by Poetry):

Perhaps this could give a starting point for fixing this bug.

hexvolt commented 2 months ago

Thanks. As to my setup, ruff-lsp is not used.

TimChild commented 1 month ago

I'm also seeing this behaviour. @hexvolt Did you find a workaround?

hexvolt commented 1 month ago

@TimChild Nope, unfortunately I have to live with yellow warning around every import block:( To me, this is clearly a pretty major bug, idk why it is not labeled as such yet

cm253 commented 3 weeks ago

Happens to me as well. Since my imports are now always out of order, I always have to use the command line as well to fix it before I commit any files :(