Merge remote-tracking branch 'origin/master' into feature/android
This commit is contained in:
commit
4289ed6cff
8 changed files with 99 additions and 26 deletions
|
@ -17,6 +17,32 @@ This refers to https://github.com/joaotavora/eglot/issues/. That is,
|
|||
to look up issue github#1234, go to
|
||||
https://github.com/joaotavora/eglot/issues/1234.
|
||||
|
||||
|
||||
* Changes in Eglot 1.15 (29/4/2023)
|
||||
|
||||
** Fix LSP "languageId" detection
|
||||
|
||||
Many servers today support multiple languages, meaning they can handle
|
||||
more than one file type in the same connection. This relies on the
|
||||
client supplying a ':languageId' string. Previously, Eglot calculated
|
||||
this string based on an imperfect heuristic and was often wrong. See
|
||||
github#1206.
|
||||
|
||||
** Fix problems with missing signature documentation (bug#62687)
|
||||
|
||||
** Reworked 'eglot-imenu'
|
||||
|
||||
Eglot's Imenu backend (used for M-x imenu among other extensions), has
|
||||
been reworked. Most newer servers respond to
|
||||
'textDocument/documentSymbol' with a vector of 'DocumentSymbol', not
|
||||
'SymbolInformation'. It's not worth it trying to make the two formats
|
||||
resemble each other. This also lays groundwork supporting a
|
||||
forthcoming "breadcrumb" feature of bug#58431.
|
||||
|
||||
** New command 'eglot-update'
|
||||
|
||||
This allows users to easily update to the latest version of Eglot.
|
||||
|
||||
|
||||
* Changes in Eglot 1.14 (3/4/2023)
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
;; Copyright (C) 2018-2023 Free Software Foundation, Inc.
|
||||
|
||||
;; Version: 1.14
|
||||
;; Version: 1.15
|
||||
;; Author: João Távora <joaotavora@gmail.com>
|
||||
;; Maintainer: João Távora <joaotavora@gmail.com>
|
||||
;; URL: https://github.com/joaotavora/eglot
|
||||
|
@ -2237,7 +2237,7 @@ COMMAND is a symbol naming the command."
|
|||
((eq (car pr) 'eglot--mode-line-reporter)
|
||||
(setcdr (cddr pr) (list msg pcnt))
|
||||
(force-mode-line-update t))
|
||||
(pr (progress-reporter-update pr pcnt msg)))))
|
||||
(pr (eglot--reporter-update pr pcnt msg)))))
|
||||
(eglot--dbind ((WorkDoneProgress) kind title percentage message) value
|
||||
(pcase kind
|
||||
("begin"
|
||||
|
@ -3341,7 +3341,7 @@ Returns a list as described in docstring of `imenu--index-alist'."
|
|||
(save-restriction
|
||||
(narrow-to-region beg end)
|
||||
(replace-buffer-contents temp)))
|
||||
(progress-reporter-update reporter (cl-incf done)))))))
|
||||
(eglot--reporter-update reporter (cl-incf done)))))))
|
||||
(mapcar (eglot--lambda ((TextEdit) range newText)
|
||||
(cons newText (eglot--range-region range 'markers)))
|
||||
(reverse edits)))
|
||||
|
|
|
@ -89,7 +89,7 @@
|
|||
(rx bol
|
||||
(or "call" "stab_clause" "binary_operator" "list" "tuple" "map" "pair"
|
||||
"sigil" "string" "atom" "alias" "arguments" "identifier"
|
||||
"boolean" "quoted_content")
|
||||
"boolean" "quoted_content" "bitstring")
|
||||
eol))
|
||||
|
||||
(defconst elixir-ts--test-definition-keywords
|
||||
|
@ -231,6 +231,7 @@
|
|||
((node-is "^]$") ,'elixir-ts--parent-expression-start 0)
|
||||
((node-is "^}$") ,'elixir-ts--parent-expression-start 0)
|
||||
((node-is "^)$") ,'elixir-ts--parent-expression-start 0)
|
||||
((node-is "^>>$") ,'elixir-ts--parent-expression-start 0)
|
||||
((node-is "^else_block$") grand-parent 0)
|
||||
((node-is "^catch_block$") grand-parent 0)
|
||||
((node-is "^rescue_block$") grand-parent 0)
|
||||
|
@ -250,12 +251,12 @@
|
|||
,'elixir-ts--argument-indent-anchor
|
||||
,'elixir-ts--argument-indent-offset)
|
||||
((parent-is "^pair$") parent ,offset)
|
||||
((parent-is "^bitstring$") parent ,offset)
|
||||
((parent-is "^map_content$") parent-bol 0)
|
||||
((parent-is "^map$") ,'elixir-ts--parent-expression-start ,offset)
|
||||
((node-is "^stab_clause$") parent-bol ,offset)
|
||||
((query ,elixir-ts--capture-operator-parent) grand-parent 0)
|
||||
((node-is "^when$") parent 0)
|
||||
((node-is "^keywords$") parent-bol ,offset)
|
||||
((parent-is "^body$")
|
||||
(lambda (node parent _)
|
||||
(save-excursion
|
||||
|
@ -270,6 +271,7 @@
|
|||
,'elixir-ts--argument-indent-anchor
|
||||
,'elixir-ts--argument-indent-offset)
|
||||
;; Handle incomplete maps when parent is ERROR.
|
||||
((node-is "^keywords$") parent-bol ,offset)
|
||||
((n-p-gp "^binary_operator$" "ERROR" nil) parent-bol 0)
|
||||
;; When there is an ERROR, just indent to prev-line.
|
||||
((parent-is "ERROR") prev-line ,offset)
|
||||
|
|
|
@ -1040,7 +1040,9 @@ inhibit_auto_composition (void)
|
|||
composition closest to CHARPOS is found, set cmp_it->stop_pos to
|
||||
the last character of the composition. STRING, if non-nil, is
|
||||
the string (as opposed to a buffer) whose characters should be
|
||||
tested for being composable.
|
||||
tested for being composable. INCLUDE_STATIC non-zero means
|
||||
consider both static and automatic compositions; if zero, look
|
||||
only for potential automatic compositions.
|
||||
|
||||
If no composition is found, set cmp_it->ch to -2. If a static
|
||||
composition is found, set cmp_it->ch to -1. Otherwise, set
|
||||
|
@ -1050,7 +1052,7 @@ inhibit_auto_composition (void)
|
|||
void
|
||||
composition_compute_stop_pos (struct composition_it *cmp_it, ptrdiff_t charpos,
|
||||
ptrdiff_t bytepos, ptrdiff_t endpos,
|
||||
Lisp_Object string)
|
||||
Lisp_Object string, bool include_static)
|
||||
{
|
||||
ptrdiff_t start, end;
|
||||
int c;
|
||||
|
@ -1084,8 +1086,10 @@ composition_compute_stop_pos (struct composition_it *cmp_it, ptrdiff_t charpos,
|
|||
cmp_it->stop_pos = endpos;
|
||||
if (charpos == endpos)
|
||||
return;
|
||||
/* Look for static compositions. */
|
||||
/* FIXME: Bidi is not yet handled well in static composition. */
|
||||
if (charpos < endpos
|
||||
if (include_static
|
||||
&& charpos < endpos
|
||||
&& find_composition (charpos, endpos, &start, &end, &prop, string)
|
||||
&& start >= charpos
|
||||
&& composition_valid_p (start, end, prop))
|
||||
|
@ -1106,6 +1110,7 @@ composition_compute_stop_pos (struct composition_it *cmp_it, ptrdiff_t charpos,
|
|||
bytepos = string_char_to_byte (string, charpos);
|
||||
}
|
||||
|
||||
/* Look for automatic compositions. */
|
||||
start = charpos;
|
||||
if (charpos < endpos)
|
||||
{
|
||||
|
@ -1285,7 +1290,8 @@ composition_reseat_it (struct composition_it *cmp_it, ptrdiff_t charpos,
|
|||
{
|
||||
if (cmp_it->ch == -2)
|
||||
{
|
||||
composition_compute_stop_pos (cmp_it, charpos, bytepos, endpos, string);
|
||||
composition_compute_stop_pos (cmp_it, charpos, bytepos, endpos, string,
|
||||
true);
|
||||
if (cmp_it->ch == -2 || cmp_it->stop_pos != charpos)
|
||||
/* The current position is not composed. */
|
||||
return 0;
|
||||
|
@ -1424,7 +1430,7 @@ composition_reseat_it (struct composition_it *cmp_it, ptrdiff_t charpos,
|
|||
}
|
||||
if (cmp_it->reversed_p)
|
||||
endpos = -1;
|
||||
composition_compute_stop_pos (cmp_it, charpos, bytepos, endpos, string);
|
||||
composition_compute_stop_pos (cmp_it, charpos, bytepos, endpos, string, true);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -348,7 +348,7 @@ extern bool find_automatic_composition (ptrdiff_t, ptrdiff_t, ptrdiff_t,
|
|||
|
||||
extern void composition_compute_stop_pos (struct composition_it *,
|
||||
ptrdiff_t, ptrdiff_t, ptrdiff_t,
|
||||
Lisp_Object);
|
||||
Lisp_Object, bool);
|
||||
extern bool composition_reseat_it (struct composition_it *, ptrdiff_t,
|
||||
ptrdiff_t, ptrdiff_t, struct window *,
|
||||
signed char, struct face *, Lisp_Object);
|
||||
|
|
|
@ -616,7 +616,7 @@ scan_for_column (ptrdiff_t *endpos, EMACS_INT *goalcol,
|
|||
|
||||
memset (&cmp_it, 0, sizeof cmp_it);
|
||||
cmp_it.id = -1;
|
||||
composition_compute_stop_pos (&cmp_it, scan, scan_byte, end, Qnil);
|
||||
composition_compute_stop_pos (&cmp_it, scan, scan_byte, end, Qnil, true);
|
||||
|
||||
/* Scan forward to the target position. */
|
||||
while (scan < end)
|
||||
|
@ -681,7 +681,7 @@ scan_for_column (ptrdiff_t *endpos, EMACS_INT *goalcol,
|
|||
{
|
||||
cmp_it.id = -1;
|
||||
composition_compute_stop_pos (&cmp_it, scan, scan_byte, end,
|
||||
Qnil);
|
||||
Qnil, true);
|
||||
}
|
||||
else
|
||||
cmp_it.from = cmp_it.to;
|
||||
|
@ -1290,7 +1290,7 @@ compute_motion (ptrdiff_t from, ptrdiff_t frombyte, EMACS_INT fromvpos,
|
|||
prev_tab_offset = tab_offset;
|
||||
memset (&cmp_it, 0, sizeof cmp_it);
|
||||
cmp_it.id = -1;
|
||||
composition_compute_stop_pos (&cmp_it, pos, pos_byte, to, Qnil);
|
||||
composition_compute_stop_pos (&cmp_it, pos, pos_byte, to, Qnil, true);
|
||||
|
||||
unsigned short int quit_count = 0;
|
||||
|
||||
|
@ -1600,7 +1600,7 @@ compute_motion (ptrdiff_t from, ptrdiff_t frombyte, EMACS_INT fromvpos,
|
|||
{
|
||||
cmp_it.id = -1;
|
||||
composition_compute_stop_pos (&cmp_it, pos, pos_byte, to,
|
||||
Qnil);
|
||||
Qnil, true);
|
||||
}
|
||||
else
|
||||
cmp_it.from = cmp_it.to;
|
||||
|
|
35
src/xdisp.c
35
src/xdisp.c
|
@ -4056,7 +4056,7 @@ compute_stop_pos (struct it *it)
|
|||
{
|
||||
register INTERVAL iv, next_iv;
|
||||
Lisp_Object object, limit, position;
|
||||
ptrdiff_t charpos, bytepos;
|
||||
ptrdiff_t charpos, bytepos, cmp_limit_pos = -1;
|
||||
|
||||
if (STRINGP (it->string))
|
||||
{
|
||||
|
@ -4126,7 +4126,10 @@ compute_stop_pos (struct it *it)
|
|||
}
|
||||
}
|
||||
if (found)
|
||||
pos--;
|
||||
{
|
||||
pos--;
|
||||
cmp_limit_pos = pos;
|
||||
}
|
||||
else if (it->stop_charpos < endpos)
|
||||
pos = it->stop_charpos;
|
||||
else
|
||||
|
@ -4184,14 +4187,25 @@ compute_stop_pos (struct it *it)
|
|||
}
|
||||
}
|
||||
|
||||
if (it->cmp_it.id < 0)
|
||||
if (it->cmp_it.id < 0
|
||||
&& (STRINGP (it->string)
|
||||
|| ((!it->bidi_p || it->bidi_it.scan_dir >= 0)
|
||||
&& it->cmp_it.stop_pos <= IT_CHARPOS (*it))))
|
||||
{
|
||||
ptrdiff_t stoppos = it->end_charpos;
|
||||
|
||||
/* If we found, above, a buffer position that cannot be part of
|
||||
an automatic composition, limit the search of composable
|
||||
characters to that position. */
|
||||
if (it->bidi_p && it->bidi_it.scan_dir < 0)
|
||||
stoppos = -1;
|
||||
else if (cmp_limit_pos > 0)
|
||||
stoppos = cmp_limit_pos;
|
||||
/* Force composition_compute_stop_pos avoid the costly search
|
||||
for static compositions, since those were already found by
|
||||
looking at text properties, above. */
|
||||
composition_compute_stop_pos (&it->cmp_it, charpos, bytepos,
|
||||
stoppos, it->string);
|
||||
stoppos, it->string, false);
|
||||
}
|
||||
|
||||
eassert (STRINGP (it->string)
|
||||
|
@ -7716,7 +7730,7 @@ reseat_to_string (struct it *it, const char *s, Lisp_Object string,
|
|||
if (endpos > it->end_charpos)
|
||||
endpos = it->end_charpos;
|
||||
composition_compute_stop_pos (&it->cmp_it, charpos, -1, endpos,
|
||||
it->string);
|
||||
it->string, true);
|
||||
}
|
||||
CHECK_IT (it);
|
||||
}
|
||||
|
@ -8404,7 +8418,7 @@ set_iterator_to_next (struct it *it, bool reseat_p)
|
|||
where to stop. */
|
||||
stop = -1;
|
||||
composition_compute_stop_pos (&it->cmp_it, IT_CHARPOS (*it),
|
||||
IT_BYTEPOS (*it), stop, Qnil);
|
||||
IT_BYTEPOS (*it), stop, Qnil, true);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -8435,7 +8449,8 @@ set_iterator_to_next (struct it *it, bool reseat_p)
|
|||
if (it->bidi_it.scan_dir < 0)
|
||||
stop = -1;
|
||||
composition_compute_stop_pos (&it->cmp_it, IT_CHARPOS (*it),
|
||||
IT_BYTEPOS (*it), stop, Qnil);
|
||||
IT_BYTEPOS (*it), stop, Qnil,
|
||||
true);
|
||||
}
|
||||
}
|
||||
eassert (IT_BYTEPOS (*it) == CHAR_TO_BYTE (IT_CHARPOS (*it)));
|
||||
|
@ -8591,7 +8606,7 @@ set_iterator_to_next (struct it *it, bool reseat_p)
|
|||
composition_compute_stop_pos (&it->cmp_it,
|
||||
IT_STRING_CHARPOS (*it),
|
||||
IT_STRING_BYTEPOS (*it), stop,
|
||||
it->string);
|
||||
it->string, true);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -8628,7 +8643,7 @@ set_iterator_to_next (struct it *it, bool reseat_p)
|
|||
composition_compute_stop_pos (&it->cmp_it,
|
||||
IT_STRING_CHARPOS (*it),
|
||||
IT_STRING_BYTEPOS (*it), stop,
|
||||
it->string);
|
||||
it->string, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -8879,7 +8894,7 @@ get_visually_first_element (struct it *it)
|
|||
if (it->bidi_it.scan_dir < 0)
|
||||
stop = -1;
|
||||
composition_compute_stop_pos (&it->cmp_it, charpos, bytepos, stop,
|
||||
it->string);
|
||||
it->string, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -79,6 +79,18 @@ def foo() do
|
|||
end
|
||||
=-=-=
|
||||
|
||||
Name: Bitstring mulitline
|
||||
|
||||
=-=
|
||||
<<12, 22,
|
||||
22, 32
|
||||
>>
|
||||
=-=
|
||||
<<12, 22,
|
||||
22, 32
|
||||
>>
|
||||
=-=-=
|
||||
|
||||
Name: Block assignments
|
||||
|
||||
=-=
|
||||
|
@ -181,7 +193,19 @@ tuple = {
|
|||
}
|
||||
=-=-=
|
||||
|
||||
Name: Spec and method
|
||||
Name: Call with keywords
|
||||
|
||||
=-=
|
||||
def foo() do
|
||||
bar(:one,
|
||||
:two,
|
||||
one: 1,
|
||||
two: 2
|
||||
)
|
||||
end
|
||||
=-=-=
|
||||
|
||||
Name: Call with @spec
|
||||
|
||||
=-=
|
||||
@spec foobar(
|
||||
|
|
Loading…
Add table
Reference in a new issue