summaryrefslogtreecommitdiff
path: root/lisp/progmodes/eglot.el
Commit message (Collapse)AuthorAgeFilesLines
...
* Eglot: fix M-x eglot-show-workspace-configuration (bug#61866)João Távora2023-03-011-35/+31
| | | | | | | | | | | | | | | | | | | | Now consult .dir-locals.el every time the workspace configuration is needed: - workspace/configuration server request - workspace/didChangeConfiguration signal - M-x eglot-show-workspace-configuration The major-mode/hack-dir-local-variables-non-file-buffer trick is used. When there is more than one, the server connection's "main" major mode is used to find the relevant .dir-locals.el section. * lisp/progmodes/eglot.el (eglot--lookup-mode): Fix docstring. (eglot--connect): Simplify. (eglot-show-workspace-configuration): Fix. (eglot--workspace-configuration): Remove. (eglot--workspace-configuration-plist): Rework. (eglot-handle-request): Simplify.
* Eglot: support multiple labels in same inlay hintJoão Távora2023-02-271-15/+25
| | | | | | | | | Mainly the rust-analyzer LSP server uses this. There are still more things we could support, like tooltips and stuff. * lisp/progmodes/eglot.el (lsp-interface-alist): Add InlayHintLabelPart. (eglot--update-hints-1): Support multiple labels for same hint.
* Eglot: don't paint hints outside requested region (bug#61812)João Távora2023-02-271-1/+2
| | | | | | * lisp/progmodes/eglot.el (eglot--lambda): Add cl-block. (eglot--update-hints-1): Return early if hint is outside the requested inlay hint range.
* Eglot: protect against unintended field text motion (bug#61726)João Távora2023-02-271-12/+16
| | | | | | | | | | | Suggested-by: Augusto Stoffel <arstoffel@gmail.com> * lisp/progmodes/eglot.el (eglot--bol): New helper. (eglot-utf-8-linepos, eglot-utf-16-linepos) (eglot-utf-32-linepos, eglot-move-to-utf-8-linepos) (eglot-move-to-utf-16-linepos, eglot-move-to-utf-32-linepos) (eglot-handle-notification, eglot--xref-make-match) (eglot-completion-at-point): Use it.
* ; And yet another fix to eglot-current-linepos-function's docstringJoão Távora2023-02-271-5/+9
| | | | | | | bug#61726 * lisp/progmodes/eglot.el (eglot-current-linepos-function): Another fix.
* ; Another doc fix in eglot.elEli Zaretskii2023-02-261-5/+6
| | | | | * lisp/progmodes/eglot.el (eglot-current-linepos-function): Another doc fix.
* ; Fix last changeJoão Távora2023-02-261-1/+1
| | | | | | bug#61726 * lisp/progmodes/eglot.el (eglot-current-linepos-function): Fix docstring.
* ; Fix last changeEli Zaretskii2023-02-261-8/+8
| | | | | | | | * lisp/progmodes/eglot.el (eglot-current-linepos-function) (eglot-utf-8-linepos, eglot-utf-16-linepos) (eglot-utf-32-linepos, eglot-move-to-linepos-function) (eglot-move-to-utf-8-linepos, eglot-move-to-utf-32-linepos): Doc fixes. (Bug#61726)
* Eglot: rename and redocument encoding-related functions (bug#61726)João Távora2023-02-261-60/+76
| | | | | | | | | | | | | | | | | | | | | | * lisp/progmodes/eglot.el (eglot-current-column): Obsolete. (eglot-lsp-abiding-column): Obsolete. (eglot-current-column-function): Obsolete. (eglot-current-linepos-function): Rename from eglot-current-column-function. (eglot-utf-8-linepos): Rename from eglot-bytewise-column. (eglot-utf-16-linepos): Rename from eglot-lsp-abiding-column. (eglot-utf-32-linepos): Rename from eglot-current-column. (eglot-move-to-current-column): Obsolete. (eglot-move-to-lsp-abiding-column): Obsolete. (eglot-move-to-column-function): Obsolete. (eglot-move-to-linepos-function): Rename from eglot-move-to-column-function. (eglot-move-to-utf-8-linepos): Rename from eglot-move-to-bytewise-column. (eglot-move-to-utf-16-linepos): Rename from eglot-move-to-lsp-abiding-column. (eglot-move-to-utf-32-linepos): Rename from eglot-move-to-current-column. (eglot--managed-mode): Adjust. (eglot-client-capabilities): Trim whitespace. * test/lisp/progmodes/eglot-tests.el (eglot-test-lsp-abiding-column) (eglot-test-lsp-abiding-column-1): Use new function/variable names.
* Eglot: support positionEncoding LSP capability (bug#61726)Augusto Stoffel2023-02-261-0/+28
| | | | | | | | * lisp/progmodes/eglot.el(eglot-client-capabilities): Announce the new capability. (eglot-bytewise-column, eglot-move-to-bytewise-column): New functions. (eglot--managed-mode): Set 'eglot-current-column-function' and 'eglot-move-to-bytewise-column' appropriately.
* Eglot: use faster strategy for moving to LSP positions (bug#61726)Eli Zaretskii2023-02-261-13/+10
| | | | | | | | Turns out we don't need encode-coding-region after all. * lisp/progmodes/eglot.el (eglot-move-to-lsp-abiding-column): Rewrite. Co-authored-by: Augusto Stoffel <arstoffel@gmail.com>
* Eglot: fix jit-lock inlay hint bugsJoão Távora2023-02-241-6/+25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | One of the bugs was straightforward. The timer function of eglot--update-hints must set the correct buffer. The other is much more odd. When using Eglot on Emacs's own src/coding.c, the jit-lock code starts calling its jit-functions over and over again with the same sequence of arguments, like so: ====================================================================== 1 -> (eglot--update-hints 63551 65051) 1 <- eglot--update-hints: [nil 25592 52026 4 ====================================================================== 1 -> (eglot--update-hints 65051 66551) 1 <- eglot--update-hints: [nil 25592 52026 4 ====================================================================== 1 -> (eglot--update-hints-1 63551 66551) 1 <- eglot--update-hints-1: nil ====================================================================== 1 -> (eglot--update-hints 63551 65051) 1 <- eglot--update-hints: [nil 25592 52026 4 ====================================================================== 1 -> (eglot--update-hints 65051 66551) 1 <- eglot--update-hints: [nil 25592 52026 5 ====================================================================== 1 -> (eglot--update-hints-1 63551 66551) 1 <- eglot--update-hints-1: nil This continues forever at a very fast rate and saturates the LSP channel. At first I thought that it was because eglot--update-hints-1 is actually causing the buffer to be modified with overlays sometime in the future, but it is not so! It seems that merely calling (goto-char (eglot--lsp-position-to-point position)) (from the LSP request handler in eglot--update-hints-1) will cause this bug. * lisp/progmodes/eglot.el (eglot--update-hints): Fix bugs.
* Eglot: fix inlay hint with label collection instead of stringJoão Távora2023-02-241-1/+2
| | | | | | | Reported by Chinmay Dalal <dalal.chinmay.0101@gmail.com> * lisp/progmodes/eglot.el (eglot--update-hints-1): Fix bug when inlay hint contains collection of labels.
* Eglot: simplify inlay hints implementation with jit-lockJoão Távora2023-02-241-79/+35
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This implementation is much simpler than the one based on windows-scroll-functions. It's also supposedly safer, as long as jit-lock guarantees refontification of affected regions. It's not _trivially_ simple though, as simply adding 'eglot--update-hints-1' to jit-lock-functions, while possible, is going to request inlay hints from the LSP server for many small regions of the buffer, depending on what jit-lock thinks is best. So we keep coalescing these into a larger region until the time is suitable for a more bandwidth-efficient request. To do this, we use a jit-lock implementation detail, jit-lock-context-unfontify-pos, which is a proxy for knowing that the jit-lock-context-timer has run. Not sure how brittle it is, but it seems to work reasonably. We also get rid of the previous "get hints for entire buffer" implementation. * doc/misc/eglot.texi (Eglot Variables): Remove mention to deleted eglot-lazy-inlay-hints. * lisp/progmodes/eglot.el (eglot-lazy-inlay-hints) (eglot--inlay-hints-after-scroll) (eglot--inlay-hints-fully) (eglot--inlay-hints-lazily): Remove. (eglot--update-hints): Add function. (eglot-inlay-hints-mode): Simplify.
* Eglot: update inlay hints on window configuration changesJoão Távora2023-02-231-0/+7
| | | | | | * lisp/progmodes/eglot.el (eglot--inlay-hints-after-window-config-change): New helper. (eglot-inlay-hints-mode): Use it.
* ; Fix recently-added doc strings in eglot.elEli Zaretskii2023-02-231-6/+6
| | | | | * lisp/progmodes/eglot.el (eglot-lazy-inlay-hints) (eglot-inlay-hints-mode): Doc fixes.
* Eglot: display completion label when safeJoão Távora2023-02-231-8/+12
| | | | | | | | | | | | | | | | | | | | Originally reported in https://github.com/joaotavora/eglot/discussions/1141 by "Mintsoup". Eglot doesn't always show the LSP :label property of a CompletionItem in the completion candidates. That is because label is sometimes not what should be inserted in the buffer in the end, the :insertText property supercedes it. But the label is usually more suitable for display nevertheless and if the LSP CompletionItem contains either a snippet or a textEdit, it's safe to display the label, since :exit-function will guarantee that a suitable buffer insertion is performed. This change reflects that awareness that when a textEdit is available, it's acceptable to show the label. * lisp/progmodes/eglot.el (eglot-completion-at-point): Adjust.
* Eglot: implement inlay hints (bug#61412, bug#61066)João Távora2023-02-221-6/+139
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Inlay hints are small text annotations to specific parts of the whole buffer, not unlike diagnostics, but designed to help readability instead of indicating problems. For example, a C++ LSP server can serve hints about positional parameter names in function calls and a variable's automatically deduced type. Emacs can display these hints in many little 0-length overlays with an 'before-string property, thus helping the user remember those types and parameter names. Since inlay hints are potentially a large amount of data to request from the LSP server, the implementation strives to be as parsimonious as possible with these requests. So, by default, inlay hints are only requested for the visible portions of the buffer across windows showing this buffer. This is done by leveraging the 'window-scroll-functions' variable, making for a reasonably complex implementation involving per-window timers. When scrolling a window, it may take a short amount of time for inlay hints to "pop in". The new user variable 'eglot-lazy-inlay-hints' can be used to exert some control over this. Specifically, if the variable's value is set to 'nil', then inlay hints are greedily fetched for the whole buffer every time a change occurs. This is a much simpler mode of operation which may avoid problems, but is also likely much slower in large buffers. Also, because the inlay feature is probably visually suprising to some, it is turned OFF by default, which is not the usual practice of Eglot (at least not when the necessary infrastructure is present). This decision may be changed soon. Here's a good one-liner for enabling it by default in every Eglot-managed buffer: (add-hook 'eglot-managed-mode-hook #'eglot-inlay-hints-mode) I haven't tested inlay hints extensively across many LSP servers, so I would appreciate any testing, both for functional edge cases and regarding performance. There are possibly more optimization oportunities in the "lazy" mode of operation, like more aggressively deleting buffer overlays that are not in visible parts of the buffer. Though I ended up writing this one from scratch, I want to thank Dimitry Bolopopsky <dimitri@belopopsky.com> and Chinmay Dala <dalal.chinmay.0101@gmail.com> for suggestions and early patches. * lisp/progmodes/eglot.el (eglot--lsp-interface-alist): Define InlayHint. (eglot-client-capabilities): Announce 'inlayHint' capability. (eglot-ignored-server-capabilities): Add :inlayHintProvider. (eglot--document-changed-hook): New helper hook. (eglot--after-change): Use it. (eglot-inlay-hint-face, eglot-type-hint-face) (eglot-parameter-hint-face): New faces. (eglot--update-hints-1, eglot--inlay-hints-after-scroll) (eglot--inlay-hints-fully, eglot--inlay-hints-lazily): New helpers. (eglot-lazy-inlay-hints): New user variable. (eglot-inlay-hints-mode): New minor mode. (eglot--maybe-activate-editing-mode): Try to activate eglot-inlay-hints-mode. (eglot--before-change): Remove overlays immediately in the area being changed. (eglot--managed-mode-off): Remove overlays. * doc/misc/eglot.texi (Eglot Features): Mention inlay hints. (Eglot Variables): Mention eglot-lazy-inlay-hints.
* Eglot: run eglot-managed-mode-hook after LSP didOpenJoão Távora2023-02-221-4/+5
| | | | | | | | | | This allows using the hook for interacting with the LSP server using the current buffer as the subject of that interaction ("document" in LSP parlance). * lisp/progmodes/eglot.el (eglot--maybe-activate-editing-mode): Run eglot-managed-mode-hook here. (eglot--managed-mode): Not here.
* Eglot: restore eldoc-documentation-functions on shutdownJoão Távora2023-02-221-0/+2
| | | | | * lisp/progmodes/eglot.el (eglot--managed-mode): Restore eldoc-documentation-functions when shutting down eglot.
* Eglot: simplify capability-checking codeJoão Távora2023-02-221-18/+20
| | | | | | | | | * lisp/progmodes/eglot.el (eglot--server-capable-or-lose): New helper. (eglot--signal-textDocument/willSave) (eglot--signal-textDocument/didSave): Tweak docstring. (eglot--workspace-symbols, xref-backend-identifier-at-point) (eglot-format, eglot-completion-at-point, eglot-rename) (eglot-code-actions): Use new eglot--server-capable-or-lose.
* Eglot: go back to setting eldoc-documentation-strategy againJoão Távora2023-02-221-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commits reverts part of commit e83c78b8c7784254c2c6f043530ab325c2fa7f16 Author: João Távora <joaotavora@gmail.com> Date: Mon Feb 20 22:43:50 2023 +0000 Eglot: respect user's Eldoc configuration by default In that commit, I did what many longstanding issues and users were suggesting and removed Eglot's override of two Eldoc user configuration varibles. I verified that Eglot's behaviour would stay mostly unaltered but my tests were very incomplete. In short there is no way that Eglot can work acceptably with the default setting of 'eldoc-documentation-strategy', which is 'eldoc-documentation-default'. So it must be changed, either globally or locally in Eglot's minor mode. This is true for any situation where both synchronous and asynchronous documentation sources are present. In Eglot's case there are two asynchronous sources which have more importance than the synchronous source. So any other strategy except the 'eldoc-documentation-default' makes sense. * lisp/progmodes/eglot.el (eglot--managed-mode): Set eldoc-documentation-strategy to eldoc-documentation-compose.
* Eglot: respect user's Eldoc configuration by defaultJoão Távora2023-02-201-6/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This change addresses the problems reported in many Elglot reports dating back to early 2021 at least: https://github.com/joaotavora/eglot/issues/648 https://github.com/joaotavora/eglot/issues/894 https://github.com/joaotavora/eglot/issues/920 https://github.com/joaotavora/eglot/issues/1031 https://github.com/joaotavora/eglot/issues/1171 In one form or another, the reports point out that the multiple pieces of information about the "thing at point" made available by the LSP server are not all being considered by the ElDoc system. The reason for this is Eglot setting/trampling the variables 'eldoc-documentation-strategy' and 'eldoc-documentation-functions' in its minor more entry function. The reason it did that is historical and is partially described in the issues above. But, evidently, it never made much sense, because so many people want to override it, which requires setting 'eldoc-documentation-strategy' to the non-default value 'eldoc-documentation-compose'. The problem was made worse by the fact that setting it as usual in either the Customize menu or their init file didn't work, requiring a fairly complex Elisp snippet. That is now solved as of this commit. If the user does not do any setting, then Eglot works basically the same as before (i.e. shows only one piece of information). It is arguable that the default value for 'eldoc-documentation-strategy' should change globally to 'eldoc-documentation-compose', but that has other subtle implications and is not part of this commit. * lisp/progmodes/eglot.el (eglot--managed-mode): Don't set Eldoc variables greedily.
* Eglot: improve treatment of completion items without :sortText (bug#61532)Theodor Thornhill2023-02-191-4/+3
| | | | | | | | Previously, defaulting to the empty string put candidates without :sortText to the top of the list. since string-lessp is safe with nil arguments, this makes them sort to the end instead. * lisp/progmodes/eglot.el (eglot-completion-at-point): Simplify.
* Eglot: check server capability before sending didSave (bug#61478)~kby2023-02-141-7/+8
| | | | | | | * lisp/progmodes/eglot.el (eglot--signal-textDocument/didSave): check server capability. Copyright-paperwork-exempt: Yes
* Fix Scala entry in Eglot's DB of LSP serversEli Zaretskii2023-02-091-1/+2
| | | | | * lisp/progmodes/eglot.el (eglot-server-programs): Support Scala LSP named "metals", in addition to "metals-emacs". (Bug#61312)
* (eglot-completion-at-point): Return correct values in :company-kindDmitry Gutov2023-02-071-1/+4
| | | | | | | * lisp/progmodes/eglot.el (eglot-completion-at-point): Return the correct values in :company-kind for "EnumMember" and "TypeParameter". The convention is to use kebab case rather than plain downcasing. Reported in https://github.com/company-mode/company-mode/issues/1370.
* Work around package.el transitive dependency bugBasil L. Contovounesios2023-01-271-2/+2
| | | | | | | | | | | Eglot already depends transitively on Xref 1.4.0 via Project, but package.el doesn't pick up on this in Emacs 28 (which has Xref 1.3.0). * lisp/progmodes/eglot.el (Version): Bump to 1.11. (Package-Requires): Explicitly require Xref 1.4.0, which is the version already required by Project, for the benefit of Emacs 28 (bug#61048).
* ; Avoid byte-compiler warning in eglot.elEli Zaretskii2023-01-161-2/+2
| | | | | * lisp/progmodes/eglot.el (eglot): Rename INTERACTIVE to avoid byte-compiler warning. Update the doc string. (Bug#60557)
* ; * lisp/progmodes/eglot.el: Remove stray space.Eli Zaretskii2023-01-161-1/+1
|
* Fix M-x eglot prompt when connection already exists (bug#60557)João Távora2023-01-161-10/+10
| | | | | | | | | | | | | | | | | | | | | | Before this change, if a current connection existed at the time of M-x eglot, user would be first asked to enter into M-x eglot's interactive spec details about new command line arguments, and only afterwards be prompted about what to do with the current connection (which could be to reconnect to it using the same arguments, or tear it down and make a new one). This is very confusing, as users may not be fully aware of the distinction between "reconnect" vs "disconnect-and-connect". They might not know if any new command line arguments provided are taking effect or not. This change simplifies this and removes the option to "reconnect instead" from M-x eglot (users can do that at any time via M-x eglot-reconnect). It also ensures that users are informed about a current connection before asking to enter new command line arguments and not the other way round. * lisp/progmodes/eglot.el (eglot): Rework.
* Eglot: don't use "nil" as minibuffer initial inputEshel Yaron2023-01-141-1/+2
| | | | | | | | | | | | Doing M-x eglot in a buffer for which buffer-file-name is nil, prompts the user for a major mode to manage by invoking completing-read. The way completing-read was called would end up with the string "nil" as the initial minibuffer input, which is not very useful nor is it a valid input. * lisp/progmodes/eglot.el (eglot--guess-contact): Tweak prompt for major mode. (Bug#60379) Copyright-paperwork-exempt: yes
* Add ruby-ts-modePerry Smith2023-01-021-1/+1
| | | | | | | | | | | | | * etc/NEWS: Mention the new mode. * lisp/progmodes/ruby-ts-mode.el: New file. * test/lisp/progmodes/ruby-ts-mode-tests.el: New file. * lisp/progmodes/eglot.el (eglot-server-programs): Add ruby-ts-mode to the Ruby entry. Co-authored-by: Dmitry Gutov <dgutov@yandex.ru>
* ; Add 2023 to copyright years.Eli Zaretskii2023-01-011-1/+1
|
* Eglot: eglot--servers-by-xrefed-file doesn't need to be value-weakJoão Távora2022-12-221-2/+1
| | | | | * lisp/progmodes/eglot.el (eglot--servers-by-xrefed-file): Doesn't need to be weak.
* Prevent stale servers when using eglot-extend-to-xrefJoão Távora2022-12-221-3/+6
| | | | | | | | | | | | | | | | | | | | | | | A weak-valued hash-table is not enough to guarantee that a reference to a zombie server in eglot--servers-by-xrefed-file variable won't survive long enough to confuse the next call to eglot--current-server in some buffers. So, before this fix it was common to get "Process EGLOT ... not running" errors if some xref-extended buffers (like system libraries) were open and M-x eglot-reconnect was issued. This should be prevented now. Note however, that even after this the eglot-extend-to-xref logic is still flawed. For example, if a buffer for the xref-extended buffer happens to be already visited by the time M-. is issued to navigate to it, Eglot won't be activated. A half-decent workaround is to kill the buffer and re-visit it. * lisp/progmodes/eglot.el (eglot--servers-by-xrefed-file): Move up. (eglot--on-shutdown): Make sure to cleanup eglot--servers-by-xrefed-file.
* eglot.el: Add vscode-json-languageserver to eglot-server-programsBrian Leung2022-12-201-0/+1
| | | | | * lisp/progmodes/eglot.el (eglot-server-programs): Add the alternative name of the vcscode JSON server. (Bug#60198)
* Add rust-ts-mode (Bug#60136)Randy Taylor2022-12-171-1/+1
| | | | | | | * etc/NEWS: Mention it. * lisp/progmodes/eglot.el (eglot-server-programs): Add it. * lisp/progmodes/rust-ts-mode.el: New major mode with tree-sitter support.
* Add yaml-ts-mode (Bug#60105)Randy Taylor2022-12-161-1/+1
| | | | | | | | | * admin/notes/tree-sitter/build-module/batch.sh: * admin/notes/tree-sitter/build-module/build.sh: Add yaml support. * etc/NEWS: Mention it. * lisp/textmodes/yaml-ts-mode.el: New major mode with tree-sitter support. * lisp/progmodes/eglot.el (eglot-server-programs): Add it.
* Bump Eglot version to 1.10João Távora2022-12-161-2/+2
| | | | | * lisp/progmodes/eglot.el (Version): Bump to 1.10 (Package-Requires): Bump required versions of jsonrpc and project.
* Eglot: fix discrepant eglot-guess-contact/eglot-command-historyJoão Távora2022-12-161-1/+1
| | | | | | | | | | | | | | | | Due to a typo, the defvar eglot--command-history wasn't actually used in eglot-guess-contact as intended. That function used a single-dash-name version of the variable instead. This worked fine, except that two variables were created instead of one, and the one actually being used didn't have any docstring. Rename the variable to eglot-command-history to fix this. It's better than renaming the reference in eglot-guess-contact which would lose user's history for M-x eglot. * lisp/progmodes/eglot.el (eglot-command-history): Rename from eglot--command-history.
* eglot: Add support for new language server csharp-lsJostein Kjønigsen2022-12-161-1/+3
| | | | | | | | C# has two popular language servers: Omnisharp Roslyn (already supported) and csharp-ls (newer, more performant). * lisp/progmodes/eglot.el: Add new C# language server csharp-ls. (Bug#60089)
* Add go-ts-mode and go-mod-ts-mode (Bug#60025)Randy Taylor2022-12-151-1/+2
| | | | | | | | | * admin/notes/tree-sitter/build-module/batch.sh: * admin/notes/tree-sitter/build-module/build.sh: Add go-mod support. * etc/NEWS: Mention them. * lisp/progmodes/eglot.el (eglot-server-programs): Add them. * lisp/progmodes/go-ts-mode.el: New major modes with tree-sitter support.
* Add cmake-ts-modeRandy Taylor2022-12-121-1/+1
| | | | | | | | | * admin/notes/tree-sitter/build-module/batch.sh: * admin/notes/tree-sitter/build-module/build.sh: Add cmake support. * etc/NEWS: Mention it. * lisp/progmodes/cmake-ts-mode.el: New major mode with tree-sitter support. * lisp/progmodes/eglot.el (eglot-server-programs): Add it.
* Eglot: allow skipping compile-time warnings about LSP interfacesJoão Távora2022-12-111-3/+6
| | | | | * lisp/progmodes/eglot.el (eglot-strict-mode): Add 'no-unknown-interfaces'. (eglot--check-object): Honour new eglot-strict-mode value.
* Add dockerfile-ts-mode (Bug#59894)Randy Taylor2022-12-091-1/+1
| | | | | | | | | | * admin/notes/tree-sitter/build-module/batch.sh: Add dockerfile support. * admin/notes/tree-sitter/build-module/build.sh: Support different namespaces and add dockerfile support. * etc/NEWS: Mention it. * lisp/progmodes/dockerfile-ts-mode.el: New major mode with tree-sitter support. * lisp/progmodes/eglot.el (eglot-server-programs): Add it.
* Eglot: Handle LSP progress with Emacs progress reporters (bug#59149)dannyfreeman2022-12-091-0/+30
| | | | | | | | | | | | | | | | | | | | | | | | | Co-authored-by: João Távora <joaotavora@gmail.com> * lisp/progmodes/eglot.el (eglot-report-progress): New custom variable. (eglot-lsp-server): New slot for tracking active progress reporters. (eglot-handle-notification (eql $/progress)): New method. The LSP spec describes methods for reporting progress on long running jobs to the client: https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#progress https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#workDoneProgress This change reports those notifications in the minibuffer as they come in. It shows a percent indicator (if the server provides theme), or a spinner. This change could open the door for writing a "cancel long running request" command, which are identified by these progress notifications. See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#window_workDoneProgress_cancel * doc/misc/eglot.texi (Customizing Eglot): Describe new variable.
* Eglot: cleanup whitespace and indentationdannyfreeman2022-12-091-42/+42
| | | | | | Co-authored-by: João Távora <joaotavora@gmail.com> * lisp/progmodes/eglot: Misc whitespace fixes.
* Use new external-completion.el in EglotJoão Távora2022-12-071-51/+9
| | | | | | | | | | | This refactor simplifies Eglot's source code. * lisp/progmodes/eglot.el: (Package-Requires): Require external-completion. (external-completion): Require it. (xref-backend-identifier-completion-table): Use external-completion-table. (completion-category-overrides): No longer set it. ("Backend Completion"): Delete section.
* Eglot: fix setting of flymake-list-only-diagnostics (bug#59824)João Távora2022-12-071-2/+3
| | | | | | | | | | | | When Eglot receives diagnostics for a file not yet visited in Emacs, it stores them in flymake-list-only-diagnostics, which feed M-x flymake-show-project-diagnostics. If the file is eventually visited in a buffer and Eglot starts receibing diagnostics for it, the flymake-list-only-diagnostics database has to be updated accordingly, since the previous diagnostics are now stale. * lisp/progmodes/eglot.el (eglot-handle-notification): Reset flymake-list-only-diagnostics