eglot
rust-analyzer
DISCONTINUED
Our great sponsors
eglot | rust-analyzer | |
---|---|---|
66 | 207 | |
2,161 | 9,320 | |
- | - | |
3.4 | 10.0 | |
9 days ago | almost 2 years ago | |
Emacs Lisp | Rust | |
GNU General Public License v3.0 only | GNU General Public License v3.0 or later |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
eglot
-
LSP could have been better
Recently I stumbled upon this issue:
https://github.com/joaotavora/eglot/discussions/1127
I don't know enough about emacs and LSP to see the full picture, but it seems that both eglot's and corfu's maintainers, assumably very competent programmers, can't find a solution for this.
I only skimmed the thread. My understanding is that LSP dumps a long list of completion candidates at once and they can't decide a cache strategy that works well with existing code...?
-
Using Quarto with Emacs
Eglot errors when I add new Python code blocks. The error disappears when I reconnect the language server, but the same happens again when I add a new code block. My "workaround" now is that before I start working on the .qmd file, I just add a bunch of Python code blocks (for which I also have a function) and then reconnect the language server again. This way I can start working for a while until I need to add more code blocks again.
-
Looking for help in improving Typescript Eglot, Corfu, Orderless performance
This discussion has helped with some performance issues: https://github.com/joaotavora/eglot/discussions/993.
-
joaotavora/breadcrumb: Emacs headerline indication of where you are in a large project
This is not by pure chance, João is the developer of the Eglot LSP client and the breadcrumbs from LSP-mode had been requested as a feature, but as far as I remember João thought rightfully that this could be an independent package, see https://github.com/joaotavora/eglot/discussions/988
-
Returning emacs user - what packages are common now?
A substantial section of the community is using corfu instead of company, but I wouldn't say company is out of date by any means. In emacs 29 eglot will be a built in, which might act as a replacement for lsp-mode depending on what functionality you need.
-
916 Days of Emacs
Yep. You can use flymake or flycheck for that in combination with eglot or lsp-mode.
-
Problems with eglot - configuration?
C-h R eglot RET fails to find anything - presumably it's the same Troubleshooting as at https://github.com/joaotavora/eglot (but that's not very helpful).
Honestly - I've had a fair crack at searching and reading on the topic, I'm not just sitting around whinging. Nothing about it at https://github.com/joaotavora/eglot nor when doing C-h f eglot-... so I'm thinking it's all a bit too hard for me.
-
Would you pay for an Emacs distro?
1) xref does not work properly with eglot in ESS. I want it to be able to work normally, and be able to find definitions in files that have not been loaded but are in the project directory. I think it's related to this
-
Emacs bankruptcy
Smart completion these days is done primarily through LSP. eglot is fairly minimal but built-in as of 29, also available via GNU Elpa. lsp-mode is another option with more integrations and a bit more fleshed out.
rust-analyzer
-
rust-analyzer changelog #164
I would like changes like https://github.com/rust-analyzer/rust-analyzer/pull/13799 to be listed in 'Breaking Changes' category, to приманка draw the users' attention.
-
Mun v0.4.0 released
For those of you who haven’t heard of Mun before, Mun is an embeddable programming language empowering creation through iteration. The idea to create Mun originated out of frustration with the Lua dynamic scripting language and a desire to have similar hot reloading functionality available in Rust. As such, it’s not a direct competitor with Rust, but instead is intended to be used with Rust (or C/C++) as a host/embedded language pairing. Actually, Mun is completely written in Rust, building on similar crates as rust-analyzer and rustc. Its key features include:
-
rust-analyzer changelog #159
#13728 upgrade chalk to make solver fuel work again (works around most trait solving hangs).
-
Does Rust need proc-macros 2.0?
Rust-analyzer has a good overview: https://github.com/rust-analyzer/rust-analyzer/blob/master/docs/dev/syntax.md
-
rust-analyzer changelog #134
#12517 (first contribution) fix completion for methods in trait generated by macro.
-
LSP Rust Analyzer keeps telling me `Error NO_RESULT_CALLBACK_FOUND`
-- all the opts to send to nvim-lspconfig -- these override the defaults set by rust-tools.nvim -- see https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#rust_analyzer server = { -- on_attach is a callback called when the language server attachs to the buffer -- on_attach = on_attach, settings = { -- to enable rust-analyzer settings visit: -- https://github.com/rust-analyzer/rust-analyzer/blob/master/docs/user/generated_config.adoc ["rust-analyzer"] = { -- enable clippy on save checkOnSave = { command = "clippy" }, assist = { importGranularity = "module", importPrefix = "self", }, cargo = { loadOutDirsFromCheck = true }, procMacro = { enable = true }, } } },
-
rust-analyzer changelog #130
#12349 publish universal VSIX to make Code happy.
Big fan of #12263!
-
Anyone have autocomplete working with rust-tools, nvm-cmp, etc.?
-- Provide some indication that rust-analyzer is busy! local lsp_status = require('lsp-status') lsp_status.register_progress() -- Basic rust/lsp/cmp settings from https://sharksforarms.dev/posts/neovim-rust/ local nvim_lsp = require('lspconfig') local opts = { tools = { -- rust-tools options autoSetHints = true, hover_with_actions = true, inlay_hints = { show_parameter_hints = false, parameter_hints_prefix = "", other_hints_prefix = "=> ", }, }, -- all the opts to send to nvim-lspconfig -- these override the defaults set by rust-tools.nvim -- see https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#rust_analyzer server = { -- on_attach is a callback called when the language server attachs to the buffer on_attach = lsp_status.on_attach, capabilities = lsp_status.capabilities, settings = { -- to enable rust-analyzer settings visit: -- https://github.com/rust-analyzer/rust-analyzer/blob/master/docs/user/generated_config.adoc -- and more: https://github.com/simrat39/rust-tools.nvim/wiki/Server-Configuration-Schema ["rust-analyzer"] = { -- enable clippy on save checkOnSave = { command = "clippy" }, } } }, } require('rust-tools').setup(opts) -- Setup Completion -- See https://github.com/hrsh7th/nvim-cmp#basic-configuration -- Used for super-tab functionality local has_words_before = function() local line, col = unpack(vim.api.nvim_win_get_cursor(0)) return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil end local feedkey = function(key, mode) vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes(key, true, true, true), mode, true) end local lspkind = require('lspkind') local cmp = require'cmp' cmp.setup({ completion = { autocomplete = true }, -- Enable LSP snippets snippet = { expand = function(args) vim.fn["vsnip#anonymous"](args.body) end, }, mapping = { [''] = cmp.mapping.select_prev_item(), [''] = cmp.mapping.select_next_item(), [''] = cmp.mapping.scroll_docs(-4), [''] = cmp.mapping.scroll_docs(4), [''] = cmp.mapping.complete(), [''] = cmp.mapping.close(), [''] = cmp.mapping.confirm({ behavior = cmp.ConfirmBehavior.Insert, select = true, }), -- Add tab support [""] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_next_item() elseif vim.fn["vsnip#available"](1) == 1 then feedkey("(vsnip-expand-or-jump)", "") elseif has_words_before() then cmp.complete() else fallback() -- The fallback function sends a already mapped key. In this case, it's probably ``. end end, { "i", "s" }), [""] = cmp.mapping(function() if cmp.visible() then cmp.select_prev_item() elseif vim.fn["vsnip#jumpable"](-1) == 1 then feedkey("(vsnip-jump-prev)", "") end end, { "i", "s" }), }, -- Installed sources sources = { { name = 'nvim_lsp' }, --, trigger_characters={'.', ":"} }, { name = 'vsnip' }, { name = 'path' }, { name = 'buffer' }, { name = 'nvim_lsp_signature_help' }, { name = 'nvim_lsp_document_symbol' }, }, -- Fancy symbols formatting = { format = lspkind.cmp_format({ mode = 'symbol_text', -- show both symbol & text for now maxwidth = 50, -- prevent the popup from showing more than provided characters (e.g 50 will not show more than 50 characters) -- The function below will be called before any actual modifications from lspkind -- so that you can provide more controls on popup customization. (See [#30](https://github.com/onsails/lspkind-nvim/pull/30)) --before = function (entry, vim_item) --... --return vim_item --end }) }, completion = { autocomplete = true }, })
What are some alternatives?
lsp-mode - Emacs client/library for the Language Server Protocol
vscode-rust - Rust extension for Visual Studio Code
dap-mode - Emacs :heart: Debug Adapter Protocol
Clippy - A bunch of lints to catch common mistakes and improve your Rust code. Book: https://doc.rust-lang.org/clippy/
intellij-rust - Rust plugin for the IntelliJ Platform
clangd - clangd language server
rustfmt - Format Rust code
rust - Empowering everyone to build reliable and efficient software.
coc.nvim - Nodejs extension host for vim & neovim, load extensions like VSCode and host language servers.
ale - Check syntax in Vim/Neovim asynchronously and fix files, with Language Server Protocol (LSP) support
web-mode - web template editing mode for emacs
company-mode - Modular in-buffer completion framework for Emacs