Commit graph

11077 commits

Author SHA1 Message Date
Alan Mackenzie
a42f4a775b CC Mode: Fix fontification problems shown by test file templates-20.cc
Also fix one problem evident in test file decls-10.cc.

* lisp/progmodes/cc-engine.el (c-brace-stack-at): Bind
c-record-type-identifiers to nil to prevent called functions recording
identifiers spuriously.
(c-forward-<>-arglist-recur): Revert the ill-advised optimization from autumn
2022 which attempted to avoid re-marking c-type text properties inside angle
bracket arglists.
(c-forward-decl-or-cast-1): Accept the semicolon at the end of "t8 * id;" as
sufficient evidence to fontify as a declaration (not a multiplication).

* lisp/progmodes/cc-fonts.el (c-font-lock-c++-using): No longer fontify the
last component of foo::bar with c-reference-face-name.
2023-04-05 13:02:12 +00:00
Wilhelm H Kirschbaum
8678708ad1
Improve sigil fontification for elixir-ts-mode
* lisp/progmodes/elixir-ts-mode.el:
(elixir-ts--font-lock-settings): Update sigil queries.
2023-04-04 23:01:21 -07:00
Wilhelm H Kirschbaum
eb0a9e4633
Improve list indentation for elixir-ts-mode
* lisp/progmodes/elixir-ts-mode.el:
(elixir-ts--argument-indent-offset): Add empty line check.
(elixir-ts--argument-indent-anchor): Change ERROR offset.
* test/lisp/progmodes/elixir-ts-mode-resources/indent.erts:
Add test.
2023-04-04 23:01:21 -07:00
Dmitry Gutov
830bf66dad ruby-ts-mode: Add more constructs to treesit-sexp-type-regexp
* lisp/progmodes/ruby-ts-mode.el (ruby-ts-mode): Add more
constructs to treesit-sexp-type-regexp (bug#62086).
2023-04-05 03:00:57 +03:00
Juri Linkov
3b48fdc912 ruby-ts-mode: Recognize more nodes as sexps
* lisp/progmodes/ruby-ts-mode.el (ruby-ts-mode):
Add "unless" to 'treesit-sexp-type-regexp'.
2023-04-04 09:42:10 +03:00
Dmitry Gutov
bd5c1d1cbb ruby-ts-mode: Recognize more nodes as sexps
* lisp/progmodes/ruby-ts-mode.el (ruby-ts-mode): Argument
treesit-sexp-type-regexp with interpolation, instance_variable,
global_variable (bug#62086, bug#62416).
2023-04-03 23:39:41 +03:00
João Távora
8125d4cfc5 Eglot: Bump to 1.14
* lisp/progmodes/eglot.el (Version): Bump to 1.14
(Package-Requires): Require ElDoc 1.14.0

* etc/EGLOT-NEWS: Update.
2023-04-03 01:40:30 +01:00
João Távora
c108132d3b Merge from origin/emacs-29
3bdbb66efb ; CONTRIBUTE: Minor stylistic changes.
d0eb12e8d3 Fix typo in section 14.1 of Emacs Manual
b2fbec37f3 ; * etc/EGLOT-NEWS: Clarify scope of topmost section
131ec049db Eglot: unbreak eglot-extend-to-xref on w32
0622e1f29f Eglot: ensure server shutdown turns off eglot-inlay-hints...
59f66ea302 ; * lisp/emacs-lisp/package-vc.el: Remove completed item ...
d23dc3dd7e ; * lisp/emacs-lisp/package-vc.el (package-vc): Fix manua...
4508a024e8 ; Clarify documentation of 'cursor' text property
d2e82817a3 Add two typescript-ts-mode faces (bug#62429)
10918fc9d2 Fix scrolling window when point moves up
9b32bc134c Improve documentation of 'defcustom's :set keyword
ab4273056e Comp fix calls to redefined primtives with op-bytecode (b...
c98929c7e1 ; Fix last change
a14c3f62a6 ; Fix last change
09fece5722 Fix duplicate defcustom in eww.el
e45bd10a3d Fix indentation regression in 'C-h l'
46fd10a760 * doc/misc/tramp.texi (Remote shell setup): Clarify use o...
2023-04-03 00:33:03 +01:00
João Távora
ecf53a5003 ; Eglot: removed unused dependency on 'array.el'
* lisp/progmodes/eglot.el (array): Don't require
2023-04-02 23:40:46 +01:00
João Távora
bdb400912e Eglot: load built-in GNU ELPA dependencies explicitly
Because of outstanding bug#62576, it's way to easy for users to get
confused by the M-x package-install process for Eglot.

Whenever an Eglot release depends on a new version of a GNU ELPA :core
package which is _also_ provided built-in, M-x package-install will
install that dependency, but will not always load it on top of the
built-in one.

The solution is to not use "require" for now.  This may potentially
lead to double "loads", but that should in principle be idempotent.

* lisp/progmodes/eglot.el (project, eldoc, seq, flymake, xref, jsonrpc)
(external-completion): Load, don't require.
2023-04-02 23:40:46 +01:00
João Távora
ad1efe5e67 Eglot: improve caching in eglot-completion-at-point
When answering the :textDocument/completion request, LSP servers
provide a :isIncomplete flag in the response, which allows Eglot to
know if "further typing should result in recomputing [the completions]
list.

If :isIncomplete is false (i.e. the full set was returned), Eglot
caches the response in a global variable eglot--capf-cache that
persists for the duration of the "completion session", taken to be the
interval between two calls to completion-in-region-mode.

If the cache has been set, and Eglot detects that "further typing" has
happened, it is safe to use the cache instead of making a request to
the server.

Thus eglot--capf-cache-flush, added to completion-in-region-mode-hook,
is used to flush this cache.  Since the popular Company completion
package doesn't use completion-in-region-mode, eglot--capf-cache-flush
is also added to its company-after-completion-hook.

* lisp/progmodes/eglot.el (eglot--managed-mode): Set
'completion-in-region-mode-hook and company-after-completion-hook.
(eglot--capf-cache): New variable.
(eglot--capf-cache-flush): New function.
(eglot-completion-at-point): Rework.

* etc/EGLOT-NEWS: Update.
2023-04-02 23:40:46 +01:00
João Távora
d00e05daa9 Eglot: take advantage of new Eldoc options for signature doc
Only echo the "active signature", send all the other signatures for
the *eldoc* buffer.

* lisp/progmodes/eglot.el (eglot--sig-info): Rework protocol.
(eglot-signature-eldoc-function): Rework.
2023-04-02 23:40:46 +01:00
João Távora
d69d0b1a29 Eglot: declare support for markdown also for signatures
* lisp/progmodes/eglot.el
(eglot--accepted-formats): new helper.
(eglot-client-capabilities): use it.
2023-04-02 23:40:46 +01:00
João Távora
66c48f9e46 Eglot: define eglot--ensure-list with defalias
This avoids annoying obsoletion warnings when compiling the whole buffer.

* lisp/progmodes/eglot.el (eglot--ensure-list): define with defalias.
2023-04-02 23:40:46 +01:00
João Távora
a8c1559a66 Eglot: remove hacky advice of jsonrpc-request
The vast majority of Eglot sync requests to the server need to inform
the server of any pending changes to the buffer beforehand, so that
the server has up-to-date information to do its job.

But doing so at the expense of ugly advice of jsonrpc-request is ill
advised.  Introduce eglot--request helper instead and use that.

Use this opportunity to conduct a review of Eglot sync requests and
come to the conclusion that all need to send any changes beforehand.
Nevertheless, an IMMEDIATE kwarg to eglot--request was added to
bypassing this.

* lisp/progmodes/eglot.el
(eglot--request): New helper.
(eglot-shutdown)
(eglot-execute-command)
(eglot-workspace-configuration)
(eglot--signal-textDocument/willSave)
(eglot--workspace-symbols)
(eglot--lsp-xrefs-for-method)
(xref-backend-apropos)
(eglot-format)
(eglot-completion-at-point)
(eglot-imenu)
(eglot-rename)
(eglot-code-actions): Use eglot--request.
2023-04-02 23:40:46 +01:00
João Távora
131ec049db Eglot: unbreak eglot-extend-to-xref on w32
Because of a drive-letter casing mismatch between 'buffer-file-name'
and the return value of 'url-generic-parse-url', the hash-table test
'equal' in 'eglot-current-server' failed.

This failed to recognize that the file xref landed us on really is
managed by the language server that facilitated that jump.

The function w32-long-file-name seems to convert "C:/Users/" to
"c:/Users" consistently and so is a good addition to
eglot--uri-to-path.

* lisp/progmodes/eglot.el (eglot--uri-to-path): Use
w32-long-file-name.
2023-03-30 23:57:06 +01:00
João Távora
0622e1f29f Eglot: ensure server shutdown turns off eglot-inlay-hints-mode
* lisp/progmodes/eglot.el (eglot--managed-mode-off): Turn off
eglot-inlay-hints-mode.
2023-03-30 23:56:34 +01:00
Yuan Fu
d2e82817a3
Add two typescript-ts-mode faces (bug#62429)
* lisp/progmodes/typescript-ts-mode.el:
(typescript-ts-mode-jsx-tag-face)
(typescript-ts-mode-jsx-attribute-face): New faces.
(typescript-ts-mode--font-lock-settings): Use new faces.
(tsx-ts-mode): Mention the new faces in the docstring.
2023-03-30 01:08:53 -07:00
dannyfreeman
fea7708a48 Add clojure-ts-mode to eglot-server-programs
* lisp/progmodes/eglot.el (eglot-server-programs): Add
clojure-ts-mode.  (Bug#62449)
2023-03-29 15:12:21 +03:00
Dmitry Gutov
2002ac376c ruby-ts-mode: Rehash which nodes should be treated as sexps
* lisp/progmodes/ruby-ts-mode.el (ruby-ts-mode): Recognize smaller
syntactic elements as sexps too (bug#62416).  Also do that for
heredocs, regexps and symbol arrays.  But drop binary expressions
(including assignments) since they led to non-intuitive behavior.
2023-03-29 01:08:55 +03:00
Stefan Monnier
eb166287f3 Merge from origin/emacs-29
edc460e3b6 Fix accidental backward-incompatible change (bug#62417)
cbef1422fe ruby-ts-mode: Fix/simplify Imenu index generation
a0d5fba74a (ruby-ts--align-chain): Use 'equal' to check for an exact...
2023-03-27 17:16:59 -04:00
Stefan Monnier
616b22b5b9 Merge from origin/emacs-29
8f42db010d Improve indenting "case" in Python
c4d490490d ; * test/src/fns-tests.el: Fix last change
875e77a66a * test/infra/Dockerfile.emba (emacs-native-comp): Add zli...
64a2b0d36f Fix failure of fns-tests-collate-strings on Cygwin
90fc6b987a * lisp/savehist.el (savehist-save): Preserve shared struc...
08fbc13375 Adapt Tramp manual
accb387166 Fix system time sampling on MS-Windows
33d436eefa Fix treesit_ensure_parsed (bug#62333)
d93a439846 * lisp/help-fns.el (find-lisp-object-file-name): Fix bug#...
be8147c53f Improve "Bugs" in the Emacs manual
2023-03-27 17:16:58 -04:00
Dmitry Gutov
cbef1422fe ruby-ts-mode: Fix/simplify Imenu index generation
* lisp/progmodes/ruby-ts-mode.el (ruby-ts--full-name): Drop '#'
from the end of resulting string when the node is not a method.
Support 'singleton_method' nodes.
(ruby-ts--imenu-helper): Simplify, to create a "flat" list of
entries, rather than a nested one.  The previous implementation
had problems (like producing a nested structure of full-qualified
names, thus creating a lot of textual repetition), seems easier to
just follow ruby-mode's example here, at least for Emacs 29's
release.

* test/lisp/progmodes/ruby-ts-mode-tests.el (ruby-ts-imenu-index):
New test.
2023-03-27 03:49:13 +03:00
Dmitry Gutov
a0d5fba74a (ruby-ts--align-chain): Use 'equal' to check for an exact match
* lisp/progmodes/ruby-ts-mode.el (ruby-ts--align-chain): Use
'equal' to check for an exact match rather than substring.
2023-03-27 02:11:16 +03:00
Mattias Engdegård
f631c90e79 ; Use string-search instead of string-match[-p] in ruby-ts-mode.el
* lisp/progmodes/ruby-ts-mode.el (ruby-ts--align-chain):
Use the much faster string-search when just searching for a substring.

(cherry picked from commit 0724c6dbda)
2023-03-27 02:08:48 +03:00
Philip Kaludercic
e8790f4293 Have Xref inherit input method when reading identifiers
* lisp/progmodes/xref.el (xref--read-identifier): Set
INHERIT-INPUT-METHOD flag to non-nil.  (Bug#61299)
2023-03-27 00:05:59 +02:00
Evgeni Kolev
1671e2db8a Fix 'go-ts-mode's incorrect docstring inserted for methods
The docstring inserted with go-ts-mode's C-c C-d was incorrectly
prefixed with the receiver "(myStruct).":

    // (myStruct).act
    func (m *myStruct) act () {...}

The above docstring is not correct because the receiver "myStruct"
should not be in the docstring.  This commit fixes the incorrect
behavior.
* lisp/progmodes/go-ts-mode.el (go-ts-mode--defun-name): New
optional argument SKIP-PREFIX.
(go-ts-mode-docstring): Call (go-ts-mode--defun-name t)
instead of (treesit-defun-name).  (Bug#62371)
2023-03-26 15:02:52 +03:00
Mattias Engdegård
0724c6dbda Use string-search instead of string-match[-p] when possible
* lisp/progmodes/c-ts-mode.el
(c-ts-mode--standalone-parent-skip-preproc):
* lisp/progmodes/ruby-ts-mode.el (ruby-ts--align-chain):
* lisp/treesit.el (treesit-max-buffer-size)
(treesit--check-manual-coverage):
Use the much faster string-search when just searching for a substring.
2023-03-26 12:09:41 +02:00
kobarity
8f42db010d Improve indenting "case" in Python
* lisp/progmodes/python.el (python-info-dedenter-statement-p): Do not
consider the first "case" in the block as dedenter.
* test/lisp/progmodes/python-tests.el
(python-info-dedenter-opening-block-positions-7)
(python-info-dedenter-statement-p-6): New tests. (Bug#62092)
2023-03-26 05:03:07 +03:00
Eli Zaretskii
4a2dccd6a6 Fix invocation of elixir LSP server on MS-Windows
* lisp/progmodes/eglot.el (eglot-server-programs): Invoke the
elixir-ls LSP via a batch file if using an MS-Windows shell.
(Bug#62407)
2023-03-24 21:37:11 +03:00
JD Smith
4566a0c6b8 Eglot: let user opt-in to plaintext LSP docs (bug#61373)
* lisp/progmodes/eglot.el
(eglot-prefer-plaintext): New variable.
(eglot-client-capabilities): Use it.

Copyright-paperwork-exempt: yes
2023-03-23 21:14:21 +00:00
João Távora
fe8af4eb30 Eglot: don't send invisible text to Eldoc
Eglot's rendering of Markdown is imperfect and based on gfm-view-mode.
To make it slightly better, don't send invisible text in
eglot-hover-eldoc-function.

* lisp/progmodes/eglot.el (eglot--format-markup): Hide invisible text.
2023-03-23 21:14:21 +00:00
João Távora
67c1e6e89c Eglot: inform ElDoc about overly long 'hover' docs
* lisp/progmodes/eglot.el (eglot-hover-eldoc-function): Include :echo
  info in return value.
2023-03-23 21:14:21 +00:00
João Távora
0effdb29d6 Eglot: rework progress indicators
Show progress indicator in Eglot's mode line by default.

* lisp/progmodes/eglot.el (eglot-report-progress): Work docstring.
(eglot--mode-line-format): Rework.
(eglot-handle-notification $/progress): Rework.
2023-03-23 21:12:18 +00:00
João Távora
f20fe3e11a Eglot: more leniently handle 'window/showMessageRequest'
Some servers mess up this message's arguments.

* lisp/progmodes/eglot.el (eglot-handle-request): Fix.
2023-03-23 21:12:08 +00:00
João Távora
82523dc621 Fix Eglot progress reporting
When the server sends an "end" message, Emacs's progress reporters
should also be updated.

* lisp/progmodes/eglot.el (eglot-handle-notification $/progress): Rework.
2023-03-23 10:26:51 +00:00
Eli Zaretskii
6731c8827b ; * lisp/progmodes/eglot.el (eglot-server-programs): Fix last change. 2023-03-23 10:48:31 +02:00
Wilhelm H Kirschbaum
50a2b34ca7 Add heex-ts-mode to eglot-server-programs (bug#62327)
The same language server is used for elixir and heex modes.

* lisp/progmodes/eglot.el (eglot-server-programs): Add heex-ts-mode.
2023-03-23 10:48:10 +02:00
Stefan Kangas
90dca0a533 Merge from origin/emacs-29
6de00e4df9 ; Fix xref-match's :version since the default value did c...
db355b420b Use libgccjit-10-dev on EMBA
8496395653 * lisp/outline.el (outline--fix-buttons-after-change): Ad...
3d3bbaace6 Align concatenated strings to the first sibling in c-ts-mode
f856468e45 Only fill the current paragraph in c-ts-common--fill-bloc...
df669c5a11 Add missing indent rule for c-ts-mode
2023-03-23 06:30:13 +01:00
Dmitry Gutov
6de00e4df9 ; Fix xref-match's :version since the default value did change 2023-03-23 02:44:54 +02:00
Felician Nemeth
c5f369bacc Subject: send clientInfo during the initialize request
'clientInfo' arrived in LSP 3.15.0.  LSP clients can use clientInfo to
identify themselves in the initialize request.  This is generally
useful for various debugging tasks.

* lisp/progmodes/eglot.el (eglot--connect): Send clientInfo.
Author:
2023-03-22 18:34:45 +00:00
Yuan Fu
3d3bbaace6
Align concatenated strings to the first sibling in c-ts-mode
* lisp/progmodes/c-ts-mode.el (c-ts-mode--indent-styles): Change rule.
2023-03-21 23:27:20 -07:00
Yuan Fu
f856468e45
Only fill the current paragraph in c-ts-common--fill-block-comment
* lisp/progmodes/c-ts-common.el:
(c-ts-common--fill-block-comment): Shrink the filled region to the
paragraph at point.
2023-03-21 22:50:03 -07:00
Stefan Kangas
2d0de86361 Merge from origin/emacs-29
8b6a0de964 Improve docstring of treesit-parent-while (bug#62301)
35648a8673 ; Delete accidental leftover '()' Eglot function
47d8e4b0d3 Eglot: report window/workDoneProgress capability to langu...
4a7a0c9a9f * lisp/emacs-lisp/comp.el (comp-emit-set-call-subr): Impr...
4a6eefb93a Expand defvar-keymap documentation
7a1272168a * lisp/treesit.el (treesit-end-of-defun): Guard arg again...
263d6c3853 Comp fix calls to redefined primtives with op-bytecode (b...
6bf441ff11 Warn package authors away from keymap-unset with REMOVE
786de66ec3 Comment out jobs on EMBA
eed240bc02 Improve defvar-keymap docstring.
2023-03-22 06:30:12 +01:00
Yuan Fu
df669c5a11
Add missing indent rule for c-ts-mode
* lisp/progmodes/c-ts-mode.el (c-ts-mode--indent-styles): New rule for case.
* test/lisp/progmodes/c-ts-mode-resources/indent.erts: New test.
2023-03-21 16:24:29 -07:00
João Távora
35648a8673 ; Delete accidental leftover '()' Eglot function
* lisp/progmodes/eglot.el (eglot--workspace-configuration-plist):
Remove ().
2023-03-21 14:43:11 +00:00
João Távora
47d8e4b0d3 Eglot: report window/workDoneProgress capability to language server
In bug#59149, LSP progress reporting was implemented, but Eglot's
'capabilities' statement to the server wasn't changed to include
window/workDoneProgress.

* lisp/progmodes/eglot.el (eglot-client-capabilities): Actually
report workDoneProgress.
2023-03-21 14:43:11 +00:00
Stefan Kangas
42fba8f36b Merge from origin/emacs-29
b7f0333355 Improve warning about changing the string returned by sym...
e62f8b0239 Fix visiting XBM/XPM files when 'c-ts-mode' is active
94d1c81cf0 * lisp/mpc.el (mpc-format): Fix oversight in commit 48b6c...
a4d97811ed Bail early from eglot--apply-text-edits if nothing to do
61d571760b ; Clarify in-code commentary of eglot--after-change
5bbbd70f56 Improve ergonomics of Eglot's inlay hints
c3a543123a Protect against too large size of 'recent-keys' vector
231190b37f * lisp/net/tramp.el (tramp-yn-prompt-regexp): Fix regexp.
0bebd0e5f0 ; Remove 'build-module' and 'html-manual' directories fro...
6674c362ad Merge branch 'emacs-29' of git.savannah.gnu.org:/srv/git/...
829e5dfabe Update to Org 9.6.1-48-g92471e
e84f878e19 ; * admin/notes/tree-sitter/starter-guide: Update starter...
ea0949853f Merge branch 'emacs-29' of git.savannah.gnu.org:/srv/git/...
11592bcfda ; * lisp/nxml/xmltok.el (xmltok-scan-attributes): Fix las...
e388a77cf0 ; Minor copyedits of recent changes in ELisp reference ma...
33a2670368 ; Minor fixes in recent Eglot changes
d2cf1386fa ; * doc/misc/eglot.texi (Eglot Commands): Improve indexing.
b75e489362 ; Again correct node reference casing in doc/misc/eglot.texi
a55d2edc5a ; Remove overly verbose commentary
22a70451f3 Merge confusing duplicate sections on commands in Eglot m...
3293f93988 Don't take over mouse-1 binding on Eglot diagnostics (bug...
013057e351 ; Prefer "language server" to "LSP server" in Eglot manual
94a21c8864 * lisp/progmodes/eglot.el (eglot--connect): Improve Tramp...
0eddfa28eb Avoid slowdowns in xmltok-scan-attributes
647c6bf2a6 ; * test/lisp/abbrev-tests.el (abbrev--possibly-save-test...
531f8f7103 ; * admin/git-bisect-start: Update failing commits

# Conflicts:
#	admin/notes/tree-sitter/build-module/batch.sh
#	admin/notes/tree-sitter/build-module/build.sh
2023-03-20 06:30:40 +01:00
Stefan Kangas
20d8a1cf4b Merge from origin/emacs-29
ea87c54f35 ; * lisp/subr.el (setq-local): Add missing period (bug#62...
90362f87d5 ; Correct last commit, downcase node reference
38067f05b9 Enhance section about troubleshooting in Eglot manual.
6f82596b49 Fix Eglot's snippet insertion to follow the manual
c54bda15e3 Reset abbrevs-changed after saving abbrevs (bug#62208)
e8cee15f78 ; Fix markup in previous change
e4a7d0cd6e Document `keymap-unset' in lispref
bb3e0ded9e Don't add a key binding when REMOVE is non-nil
a4a9ffdd80 Fix the documentation of various aspects of adding Xref h...
a2222b9a9b ; Minor wording fix in ELisp reference manual
5cf1de683b Fix python-fill-paragraph problems on filling strings (bu...
7385c991df Also exempt eglot-inlay-hints-mode from desktop.el's fumb...
1961bdb52e ; Add WebDAV entry to index in Tramp manual
dfb36d3623 Refer to EWW instead of w3 and w3m
9d3fdf7e0d Fix Eglot's command generation for code actions

# Conflicts:
#	etc/NEWS
2023-03-20 06:30:32 +01:00
Eli Zaretskii
e62f8b0239 Fix visiting XBM/XPM files when 'c-ts-mode' is active
* lisp/progmodes/c-ts-mode.el (treesit-ready-p): Fix association
for XBM/XPM files in 'auto-mode-alist'.  (Bug#62276)
2023-03-19 22:19:52 +02:00