this post was submitted on 04 Sep 2024
14 points (100.0% liked)

Python

99 readers
3 users here now

Welcome to the Python community on the programming.dev Lemmy instance!

πŸ“… Events

PastNovember 2023

October 2023

July 2023

August 2023

September 2023

🐍 Python project:
πŸ’“ Python Community:
✨ Python Ecosystem:
🌌 Fediverse
Communities
Projects
Feeds

founded 1 year ago
MODERATORS
 

Hi, folks!

I'd like to set up my emacs with lsp-mode and lsp-ui, but I am finding myself in some analysis paralysis. Ruling out the Palantir language server because it's deprecated and because it's Palantir, that still leaves me with five language server recommendations from lsp-mode.

Anybody have any opinions they'd like to share? Any really bad experiences I should avoid? How do I configure your favorite? (Feel free to assume I know very little about configuring emacs.)

If it makes a difference, I am a poetry user and a religious mypy --strict user.

Thanks in advance!

top 3 comments
sorted by: hot top controversial new old
[–] FizzyOrange@programming.dev 3 points 2 months ago (1 children)

In VSCode the best answer by far is Pylance, which uses Pyright under the hood for type analysis.

Unfortunately while Pyright is open source, Pylance isn't (part of Microsoft's strategy to maintain control over VSCode), so you can't use it in Emacs.

Still, I would give the Pyright LSP server a try. I haven't used it but I would guess it will give you type error squiggles but maybe not code completion / go-to-definition.

Ruff is really a different thing - it is a linter like Pylint, so it only gives you some hints and fixits. You can maybe install it in addition to Pyright if you can be bothered.

Btw Pyright is far superior to Mypy - even with --strict. I would ditch Mypy asap.

load more comments (1 replies)
[–] Fred@programming.dev 2 points 2 months ago

I'm using pylsp (python-language-server). My reason being a process of elimination. I also use mypy for type-checking, so even without considering the danger of allowing MS to entrench itself into my tooling, it didn't make much sense to use a tool built around pyright.

The ruff-lsp seems to only do the things that ruff is good at: linting, code formatting, auto-fix of certain issues, and I wanted more.

Since I saw that pylsp uses Jedi under the hood, and offered a mypy plugin, I felt that pylsp offer a superset of the features that the Jedi LSP has. In the end I'm happy with pylsp, and never tried Jedi LSP.

However: with the mypy plugin for pylsp, the memory usage kept growing to ridiculous amounts and getting killed, so I ended up disabling it. I had a look in their bug tracker Instead, I'm using flymake that triggers mypy on save, and that seems to work well. (I have a few changes on top of com4/flymake-mypy.el, because it leaves behind plenty of temporary files.)

That offers me:

  • jump to definition (using Jedi under the hood)
  • rename symbol (and then Jedi goes and rename uses of that symbol)
  • smart completion (eg. offers only variables in scope, or after a . only the instance members, etc.)
  • short documentation on hover
  • squiggly lines for errors found by flake8 or mypy
  • and a few more that I don't really notice

One thing I struggled with: where do you install the LSP? Using pipx for a user installation, or in a per-project venv? I did the latter, which works for me because I work on a small number of projects. That also means that mypy finds all the relevant third-party libraries in that venv. I wrote a bit of elisp that allow emacs to find the right mypy binary to check code.

[–] fossphi@lemm.ee 2 points 2 months ago* (last edited 2 months ago)

Another recommendation for pylsp. Ruff is good, but it doesn't provide lookups and completions. For now, think of it as just a linter/formatter to augment pylsp