1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-04-27 16:51:06 -07:00
Commit graph

13087 commits

Author SHA1 Message Date
Sean Whitton
bc763572a9 vc-find-backend-function: Require vc for default implementations
* lisp/vc/vc-hooks.el (vc-find-backend-function): Require vc for
default implementations (bug#80254).  Report and fix due to
Daniel Mendler <mail@daniel-mendler.de>.
2026-02-14 15:03:52 +00:00
Eli Zaretskii
114fab51c0 Fix 'eglot-imenu'
* lisp/progmodes/eglot.el (eglot--imenu-SymbolInformation): Fix
call to 'plist-get'.  Patch by Lester Longley <lester@ieee.org>.
(Bug#80367)

Copyright-paperwork-exempt: yes
2026-02-14 14:22:08 +02:00
João Távora
541040d4c8 Eglot: fix neocmakelsp invocation
See https://github.com/joaotavora/eglot/issues/1578

* lisp/progmodes/eglot.el (eglot-server-programs): Fix neocmakelsp
2026-02-13 11:28:44 +00:00
kobarity
06395ba77d Revert "Use 'project-name-cached' in 'python-shell-get-process-name'"
This reverts commit 482748592f.

Commit 583a112169 removed
'project-name-cached' and also resolved bug#80045.
2026-02-13 09:43:29 +02:00
Stefan Monnier
bc9a53616a make-mode.el: Avoid obsolete font-lock-*-face` variables
* lisp/progmodes/make-mode.el (makefile-make-font-lock-keywords)
(makefile-makepp-font-lock-keywords): Use `font-lock-*-face`
faces rather than variables.
2026-02-11 15:35:03 -05:00
Dmitry Gutov
d62370a0ec Improve project-vc-*cache-timeout docstrings
* lisp/progmodes/project.el: (project-vc-cache-timeout)
(project-vc-non-essential-cache-timeout): Improve docstrings (bug#78545).
2026-02-10 18:56:49 +02:00
Dmitry Gutov
583a112169 Do cache and timed invalidation in "VC-aware" project backend
* lisp/progmodes/project.el: Describe the new cache in Commentary,
the "VC-aware project" section.
(project-vc-cache-timeout)
(project-vc-non-essential-cache-timeout): New variables.
(project--get-cached, project--set-cached):
New functions.
(project-try-vc, project--value-in-dir): Use them.
(project--read-dir-locals): New function, extracted from the
above.  Return the full alist, to be saved to cache at once.
(project--clear-cache): New function.
(project-remember-projects-under)
(project-forget-zombie-projects, project-forget-projects-under):
Use it.
(project-uniquify-dirname-transform, project-mode-line-format):
Bind 'non-essential' to choose the longer caching strategy.
(project-name-cache-timeout, project-name-cached): Remove.
(project-mode-line-format): Switch to calling 'project-name'
directly, with the new caching in use.

Co-authored-by: Juri Linkov <juri@linkov.net>
2026-02-10 02:54:14 +02:00
Dmitry Gutov
8cb9aaec0f Amend previous to avoid remote call in project--remove-from-project-list
* lisp/progmodes/project.el (project--remove-from-project-list):
Don't call 'abbreviate-file-name', expect it to be abbreviated
already.  The file might be on an inaccessible filesystem.
(project-current): Call abbreviate-file-name here (bug#80340).
2026-02-10 02:54:14 +02:00
Dmitry Gutov
8ddf2d2925 project--delete-zombie-projects: Handle "Tramp failed to connect"
* lisp/progmodes/project.el (project--delete-zombie-projects):
Handle file-error when DIR is remote and unreachable (bug#80340).
2026-02-09 00:56:08 +02:00
Matthew Bauer
78fc5e2833 Eglot: Add "static-ls" to Haskell LSP list
This is an alternative language server for Haskell.  Intended to be
faster and not use as much memory as haskell-language-server.
Making it a backup with lower precedence if both exist.
* lisp/progmodes/eglot.el (eglot-server-programs): Add "static-ls".
(Bug#80351)
2026-02-08 08:38:08 +02:00
kobarity
3107c66c84 Change the type of 'python-eldoc-function-timeout' to number
* etc/NEWS: Announce the change.
* lisp/progmodes/python.el (python-eldoc-function-timeout):
Change the type.  (Bug#80045)
2026-02-07 14:44:27 +02:00
kobarity
482748592f Use 'project-name-cached' in 'python-shell-get-process-name'
* lisp/progmodes/python.el
(python-shell-get-project-name): New function.
(python-shell-get-process-name): Use it.  (Bug#80045)

Co-authored-by: Liu Hui <liuhui1610@gmail.com>
2026-02-07 14:41:48 +02:00
kobarity
3d7e78b810 Revert "Performance improvement of 'python-shell-get-process'"
This reverts commit 83b4f1ba26.
We concluded that it is better to use 'project-name-cached'.
(Bug#80045)
2026-02-07 14:41:10 +02:00
Dmitry Gutov
df517aa958 etags-regen--build-program-options: Expand the error message text
* lisp/progmodes/etags-regen.el (etags-regen--build-program-options):
Expand the error message text.
2026-02-07 02:07:30 +02:00
Dmitry Gutov
cc9fea52a3 etags--xref-backend: Move the definition to autoloads
* lisp/progmodes/etags.el (etags--xref-backend):
Move the definition to autoloads, so that etags.el doesn't have to
be loaded before it really is used.
2026-02-07 02:06:52 +02:00
Dmitry Gutov
90d3fdaffc Allow using xref-find-references without visiting a tags table
* lisp/progmodes/xref.el (xref-find-backend):
Allow returning nil (bug#43086).
(xref-backend-definitions, xref-backend-apropos):
Signal user-error when no backend is available.  The error text
suggests a few built-in Xref backends.
(xref-backend-identifier-completion-table): Default to nil.
(xref--no-backend-available): New helper function.

* lisp/progmodes/etags.el (etags--xref-backend):
Return nil when no tags table is visited.
2026-02-06 05:56:52 +02:00
João Távora
ec5479f0b5 Eglot: fix thinko in eglot--async-request
Just because a specific request of a specific "hint" is
cancelled doesn't mean we can cancel the other's too.  Also
eglot-advertise-cancellation = nil was subtly broken.

This manifested itself mostly in Eglot semantic tokens.

* lisp/progmodes/eglot.el (eglot--async-request): Fix thinkos.
2026-02-05 22:39:19 +00:00
Mattias Engdegård
ac07913bd8 ; * lisp/progmodes/elisp-mode.el: slightly better rescanning point
Suggested by Stefan Monnier.
2026-02-01 13:25:28 +01:00
Mattias Engdegård
385bcc6117 Fix lazy doc string fontify bug in elisp-byte-code-mode (bug#80292)
* lisp/progmodes/elisp-mode.el (elisp-byte-code-syntax-propertize):
Reset point to just after the start of the previous match so that we
don't skip past the end of the lazy string, which can happen if it's
zero-length; that could lead to an infinite loop.
2026-01-31 18:58:29 +01:00
João Távora
d0daaead22 Eglot: recall diagnostics froms unopened files on session start
This is exclusively for the benefit of rust-analyzer, which
sends publishDiagnostics for all project files upfront, and
never republishes them on 'didOpen'.

See https://github.com/joaotavora/eglot/issues/1531.

* lisp/progmodes/eglot.el (eglot--flymake-handle-push): Simplify.
Don't flymake-list-only-diagnostics here.
Save original diagnostic in flymake-list-only-diagnostics setting.
(eglot--on-shutdown): Cleanup flymake-list-only-diagnostics.
(eglot--flymake-report-push+pulled): Hack in data from
flymake-list-only-diagnostics.
2026-01-30 12:55:32 +00:00
Juri Linkov
077b33ef7d * lisp/progmodes/eglot.el (eglot-server-programs): Use "elp" for erlang-mode.
erlang_ls has been archived in favour of erlang-language-platform.
Suggested by Alan & Kim Zimmerman <alan.zimm@gmail.com> (bug#79943).
2026-01-30 09:53:30 +02:00
Dmitry Gutov
3937833fff xref-find-backend: Error instead of returning nil
* lisp/progmodes/xref.el (xref-find-backend):
Signal error when we can't find a backend to use (bug#80246).
2026-01-29 17:11:45 +02:00
Dmitry Gutov
dfc2a66ad8 xref-matches-in-directory and xref-matches-in-files: More consistency
* lisp/progmodes/xref.el (xref--parse-hits, xref--sort-hits):
Extract from xref-matches-in-directory and xref-matches-in-files.
Use in both for better consistency between these functions.
2026-01-28 23:48:04 +02:00
Dmitry Gutov
d44b855b0c xref-matches-in-directory: Don't error on "Binary file ... matches"
* lisp/progmodes/xref.el (xref-matches-in-directory):
Consider the "Binary file ... matches" message (bug#80246).
2026-01-28 22:10:34 +02:00
Daniel Mendler
32cffe1707 Customizable xref-references-in-directory backend
Optionally use find and grep directly instead of going through the
Semantic framework (bug#80246).

* lisp/progmodes/project.el (project--vc-ignores): Require 'vc' to
ensure that vc-default-ignore-completion-table is available.

* lisp/progmodes/xref.el (xref-references-in-directory-function):
New user option.
(xref-references-in-directory): Call it.
(xref-references-in-directory-grep): Implementation based on find/grep.
(xref-references-in-directory-semantic): Implementation using Semantic.
(xref-matches-in-directory): Add new argument DELIMITED.

Co-authored-by: Dmitry Gutov <dmitry@gutov.dev>
2026-01-28 04:38:58 +02:00
Philip Kaludercic
bff916d7f9
Have default 'compile-command' run make in parallel
* lisp/progmodes/compile.el (compile-command): Change default
value.

(Bug#80065)
2026-01-25 12:26:19 +01:00
Dmitry Gutov
3573116d3e ; Fix indentation in project.el 2026-01-24 06:48:29 +02:00
Dmitry Gutov
b7d4681908 Stop project-query-replace-regexp failing on directory symlinks
* lisp/progmodes/project.el (project--files-safe): New function.
(project-search, project-query-replace-regexp): Use it (bug#78209).
2026-01-24 06:45:32 +02:00
João Távora
f2250ba244 Eglot: simplify Imenu setup again
See https://github.com/joaotavora/eglot/issues/1569.

* lisp/progmodes/eglot.el (eglot--managed-mode): Tweak.

* etc/EGLOT-NEWS: Tweak.
2026-01-21 23:09:19 +00:00
João Távora
10b132006e Eglot: display more readable server-originated messages
* lisp/progmodes/eglot.el (eglot--format-server-message): New helper.
(eglot-handle-notification<window/showMessage>)
(eglot-handle-request<window/showMessageRequest>): Use it.
2026-01-21 23:08:39 +00:00
Juri Linkov
8063921808 Fix down-list navigation in python-ts-mode
* lisp/progmodes/python.el (python-ts-mode):
Set 'treesit-sexp-thing-down-list' to 'list' to override
sexp navigation with list navigation (bug#72478).

* lisp/emacs-lisp/lisp.el (up-list): Mention 'up-list-function' in docstring.
2026-01-21 20:02:56 +02:00
Binbin Ye
8ea6f6da77 Add JSON path utility command to json-ts-mode
* lisp/progmodes/json-ts-mode.el (json-ts--get-path-at-node)
(json-ts--path-to-jq, json-ts--path-to-python): New functions.
(json-ts-jq-path-at-point): New command for getting JSON path at point.

* test/lisp/progmodes/json-ts-mode-tests.el: New file.
Add tests for the utility command.

* etc/NEWS: Announce new command 'json-ts-jq-path-at-point' (bug#80190).
2026-01-21 19:27:03 +02:00
João Távora
9d8e1af6f4 Eglot: fix textDocument/prepareRename support
Can't send prepareRename requests willy-nilly.

See https://github.com/joaotavora/eglot/issues/1554.

* lisp/progmodes/eglot.el (eglot--rename-interactive): Fix.
(eglot-client-capabilities): Advertise "prepareSupport".

* etc/EGLOT-NEWS: Mention change.
2026-01-21 12:26:24 +00:00
João Távora
f643ad53c7 Eglot: set imenu-create-index-function without advice
See https://github.com/joaotavora/eglot/issues/1569.

* lisp/progmodes/eglot.el (eglot--managed-mode): Stomp on
imenu-create-index-function conditionally.
(eglot-imenu): Don't check eglot-server-capable here.

* etc/EGLOT-NEWS: Mention change.
2026-01-21 12:26:24 +00:00
João Távora
d3548aea96 Eglot: limit the number of file watches
Some language servers request file watching for a very large number of
directories (e.g. Python virtualenvs), which can exhaust system
resources and cause slow startup.

https://github.com/joaotavora/eglot/issues/1568

* lisp/progmodes/eglot.el (eglot-max-file-watches): New variable.
(eglot--count-file-watches): New function.
(eglot--watch-globs): Use them to limit watches.  Signal jsonrpc-error
when limit is reached.
(eglot-watch-files-outside-project-root): Fix docstring punctuation.

* etc/EGLOT-NEWS: Mention change.
2026-01-21 12:26:24 +00:00
João Távora
a3ea65a984 Eglot: support more complex workspace edits (create/rename/delete)
Advertise support for file resource operations in workspace edits.
Implement create, rename, and delete file operations.  Rework
confirmation UI to handle mixed operation types.

* lisp/progmodes/eglot.el (eglot--lsp-interface-alist): Add
CreateFile, RenameFile, DeleteFile interfaces.
(eglot-client-capabilities): Advertise resourceOperations and
failureHandling.
(eglot-handle-request<workspace/applyEdit>): Return failureReason.
(eglot--apply-text-edits): Tweak error message.
(eglot--propose-changes-as-diff): Adjust for new prepared format.
Return buffer.
(eglot--apply-workspace-edit): Rework.  Handle file operations.

* etc/EGLOT-NEWS: Mention change.
2026-01-21 12:26:24 +00:00
João Távora
f02a120f18 Eglot: overhaul eglot-confirm-server-edits defcustom
Now also accepts file operation kinds as keys in the alist form.

* lisp/progmodes/eglot.el (eglot-confirm-server-edits): Rework
default value, docstring and defcustom type.
(eglot--confirm-server-edits): Also check for operation-kind-based
entries.
2026-01-21 12:26:24 +00:00
João Távora
b40e89e523 Eglot: default eglot-advertise-cancellation to t
The current 2026 landscape suggests servers (especially gopls
and ocamllsp) take advantage of this, so let's give it to them
by default.

* lisp/progmodes/eglot.el (eglot-advertise-cancellation):
Default to t.

* etc/EGLOT-NEWS: Mention change.
2026-01-21 12:26:24 +00:00
João Távora
155f524f03 Eglot: handle user quits when applying server-initiated edits
If the user simply C-g's signal a 'jsonrpc-error' with code 32000 to
mean "no error", provide an LSP :failureReason and keep server chill.

* lisp/progmodes/eglot.el (eglot-handle-request<workspace/applyEdit>>):
2026-01-21 12:26:24 +00:00
João Távora
7216d7ff87 Eglot: ensure no timeout on remote command executions
Else, if the server asks us a question, the user has just 10
seconds to ponder, which is a bit silly.

* lisp/progmodes/eglot.el (eglot-execute): Pass timeout=nil to
eglot--request.
2026-01-21 12:26:24 +00:00
João Távora
0917169782 Eglot: slightly friendlier UI for server window/showMessageRequest
Previously, the default answer pre-filled in the minibuffer was
obscuring the other possible answers.

* lisp/progmodes/eglot.el
(eglot-handle-request<window/showMessageRequest>): Rework.
2026-01-21 12:26:24 +00:00
João Távora
ff5bab9552 Eglot: advertise cancellation on eglot--request quits
* lisp/progmodes/eglot.el (eglot--request): Pass CANCEL-ON-QUIT
to jsonrpc-request.
2026-01-21 12:26:24 +00:00
João Távora
81b7e8e927 Eglot: fix async request cancellation
It was completely broken, with a cancel being set for every sent (and
probably already received) async request, and no actual discarding
of the response of a cancelled request.

* lisp/progmodes/eglot.el (eglot--async-request): Fix cancellation
of async requests.
(eglot--semtok-request): Don't need 'buf' &aux anymore.
2026-01-21 12:26:24 +00:00
João Távora
977e354709 Eglot: treat code=0 JSONRPC errors as benign
* lisp/progmodes/eglot.el (eglot--request): Shoosh code=0 errors.
(eglot-mode-line-error): Check for code=0.
2026-01-21 12:26:24 +00:00
Elías Gabriel Pérez
ff64470139 hideshow: Use 'message' instead of 'user-error'. (Bug#80201)
Using 'user-error' in 'hs-minor-mode', prevents the major-mode
from initializing correctly when hideshow is not supported in
that mode, using 'message' instead fixes this.

* lisp/progmodes/hideshow.el (hs-minor-mode): Tweak.
2026-01-21 09:46:23 +02:00
Wilson Snyder
72a34eceb9 verilog-mode.el: Fix parameter replacements in AUTOINST.
* lisp/progmodes/verilog-mode.el (verilog-auto-inst-port): Fix
parameter replacements in AUTOINST (#1903).
2026-01-18 09:59:17 -05:00
kobarity
83b4f1ba26 Performance improvement of 'python-shell-get-process'
'python-shell-get-process' is frequently called from
'python-eldoc--get-doc-at-point' and etc., invoking
'project-current' unless there is a buffer-specific Inferior
Python process.  When the buffer is a remote buffer not
belonging to any project and has significant latency,
'project-current' may take a long time.  To avoid this,
implement a process cache in 'python-shell-get-process'.

* lisp/progmodes/python.el (python-shell--process-cache)
(python-shell--process-cache-valid): New variables.
(python-shell--invalidate-process-cache): New function.
(python-shell-make-comint): Add a call to the above function.
(python-shell-get-process): Add process cache.  (Bug#80045)
2026-01-17 18:09:03 +02:00
Jostein Kjønigsen
83f4e48106 csharp-mode.el: Fix indentation after preprocessor statements
* lisp/progmodes/csharp-mode.el (csharp-ts-mode--indent-rules):
Add rules for preprocessor statements.  (Bug#80202)
2026-01-17 17:34:16 +02:00
Pig Fang
023bf05816 Eglot: support 'wat-mode'
* lisp/progmodes/eglot.el (eglot-server-programs): Add wat_server.
(Bug#80188)

Copyright-paperwork-exempt: yes
2026-01-17 17:02:19 +02:00
USAMI Kenta
c68c5fbe14 ; Remove redundant cl-lib runtime dependencies across lisp/
* lisp/editorconfig-tools.el:
* lisp/emacs-lisp/shorthands.el:
* lisp/info-xref.el:
* lisp/international/quail.el:
* lisp/international/rfc1843.el:
* lisp/mail/ietf-drums.el:
* lisp/mail/rfc2047.el:
* lisp/mail/yenc.el:
* lisp/net/pop3.el:
* lisp/net/sasl-scram-sha256.el:
* lisp/net/shr-color.el:
* lisp/progmodes/grep.el:
* lisp/scroll-bar.el:
* lisp/textmodes/emacs-news-mode.el:
* lisp/textmodes/reftex-auc.el:
* lisp/textmodes/reftex-dcr.el:
* lisp/textmodes/reftex-global.el:
* lisp/textmodes/reftex-sel.el:
* lisp/url/url-dav.el:
* lisp/vc/vc-src.el:
* lisp/xwidget.el:
* lisp/yank-media.el: Remove redundant (require 'cl-lib).
(Bug#80129)
2026-01-17 15:32:15 +02:00