Skip to content

Commit d72c3fe

Browse files
authored
Implement support for textDocument/linkedEditingRange (#3166)
Fixes #2449
1 parent 427a8cd commit d72c3fe

File tree

5 files changed

+57
-6
lines changed

5 files changed

+57
-6
lines changed

CHANGELOG.org

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
* Changelog
22
** Unreleased 8.0.1
3+
* Added support for ~textDocument/linkedEditingRange~ via
4+
~lsp-iedit-linked-ranges~ and ~lsp-evil-multiedit-ranges~ (see [[https://github.com/emacs-lsp/lsp-mode/pull/3166][#3166]])
35
* Add [[https://github.com/graphql/graphiql/tree/main/packages/graphql-language-service-cli#readme][GraphQL Language Server]] for autocomplete graphql query
46
* Added ~lsp-auto-touch-files~. When it is non-nil it will auto-create the
57
file on the disk before sending ~textDocument/didOpen~.

clients/lsp-xml.el

+1-1
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ Newlines and excess whitespace are removed."
189189
("xml.catalogs" lsp-xml-catalogs)
190190
("xml.trace.server" lsp-xml-trace-server)))
191191

192-
(defconst lsp-xml-jar-version "0.13.1")
192+
(defconst lsp-xml-jar-version "0.18.0")
193193

194194
(defconst lsp-xml-jar-name (format "org.eclipse.lemminx-%s-uber.jar" lsp-xml-jar-version))
195195

lsp-iedit.el

+51-3
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
(declare-function iedit-lib-start "iedit-lib" (mode-exit-func))
3232
(declare-function iedit-done "iedit" ())
3333
(declare-function evil-multiedit-state "evil-multiedit" ())
34+
(declare-function evil-iedit-state "evil-iedit-state" ())
3435

3536
(defvar iedit-mode)
3637
(defvar iedit-auto-buffering)
@@ -64,6 +65,8 @@ from various lsp protocol requests, e.g.
6465
(message "%d occurrences of \"%s\""
6566
(seq-length ranges)
6667
(lsp--range-text (lsp-seq-first ranges)))))
68+
69+
;; iedit
6770

6871
;;;###autoload
6972
(defun lsp-iedit-highlights ()
@@ -76,11 +79,26 @@ See also `lsp-enable-symbol-highlighting'."
7679
(let ((highlights (lsp-request "textDocument/documentHighlight"
7780
(lsp--text-document-position-params)))
7881
(-compare-fn (-lambda ((&Location :range (&Range :start l-start :end l-end))
79-
(&Location :range (&Range :start r-start :end r-end)))
80-
(and (lsp--position-equal l-start r-start)
81-
(lsp--position-equal l-end r-end)))))
82+
(&Location :range (&Range :start r-start :end r-end)))
83+
(and (lsp--position-equal l-start r-start)
84+
(lsp--position-equal l-end r-end)))))
8285
(lsp-iedit--on-ranges (mapcar #'lsp:document-highlight-range (-distinct highlights)))))
8386

87+
;;;###autoload
88+
(defun lsp-iedit-linked-ranges ()
89+
"Start an `iedit' for `textDocument/linkedEditingRange'"
90+
(interactive)
91+
(unless (lsp-feature? "textDocument/linkedEditingRange")
92+
(user-error "`textDocument/linkedEditingRange' is not supported by current server"))
93+
94+
(-> (lsp-request "textDocument/linkedEditingRange" (lsp--text-document-position-params))
95+
(lsp:linked-editing-ranges-ranges)
96+
(or (user-error "No editing ranges found"))
97+
(lsp-iedit--on-ranges)))
98+
99+
100+
;; evil-multi-edit
101+
84102
;;;###autoload
85103
(defun lsp-evil-multiedit-highlights ()
86104
"Start an `evil-multiedit' operation on the documentHighlights at point.
@@ -95,6 +113,36 @@ See also `lsp-enable-symbol-highlighting'."
95113
(lsp-iedit-highlights)
96114
(evil-multiedit-state))
97115

116+
;;;###autoload
117+
(defun lsp-evil-multiedit-linked-ranges ()
118+
"Start an `evil-multiedit' for `textDocument/linkedEditingRange'"
119+
(interactive)
120+
(require 'evil-multiedit)
121+
(when (fboundp 'ahs-clear) (ahs-clear))
122+
(setq evil-multiedit--dont-recall t)
123+
(lsp-iedit-linked-ranges)
124+
(evil-multiedit-state))
125+
126+
;; evil-evil-state
127+
128+
;;;###autoload
129+
(defun lsp-evil-state-highlights ()
130+
"Start `iedit-mode'. for `textDocument/documentHighlight'"
131+
(interactive "P")
132+
(if (fboundp 'ahs-clear) (ahs-clear))
133+
(lsp-iedit-highlights)
134+
(evil-iedit-state))
135+
136+
;;;###autoload
137+
(defun lsp-evil-state-linked-ranges ()
138+
"Start `iedit-mode'. for `textDocument/linkedEditingRange'"
139+
(interactive "P")
140+
(if (fboundp 'ahs-clear) (ahs-clear))
141+
(lsp-iedit-linked-ranges)
142+
(evil-iedit-state))
143+
144+
145+
98146
(lsp-consistency-check lsp-iedit)
99147

100148
(provide 'lsp-iedit)

lsp-mode.el

+2-2
Original file line numberDiff line numberDiff line change
@@ -835,6 +835,7 @@ directory")
835835
("textDocument/formatting" :capability :documentFormattingProvider)
836836
("textDocument/hover" :capability :hoverProvider)
837837
("textDocument/implementation" :capability :implementationProvider)
838+
("textDocument/linkedEditingRange" :capability :linkedEditingRangeProvider)
838839
("textDocument/onTypeFormatting" :capability :documentOnTypeFormattingProvider)
839840
("textDocument/prepareRename"
840841
:check-command (lambda (workspace)
@@ -3451,8 +3452,7 @@ disappearing, unset all the variables related to it."
34513452
(publishDiagnostics . ((relatedInformation . t)
34523453
(tagSupport . ((valueSet . [1 2])))
34533454
(versionSupport . t)))
3454-
(moniker . nil)
3455-
(linkedEditingRange . nil)))
3455+
(linkedEditingRange . ((dynamicRegistration . t)))))
34563456
(window . ((workDoneProgress . t)
34573457
(showMessage . nil)
34583458
(showDocument . nil))))

lsp-protocol.el

+1
Original file line numberDiff line numberDiff line change
@@ -604,6 +604,7 @@ See `-let' for a description of the destructuring mechanism."
604604
(FormattingOptions (:tabSize :insertSpaces) (:trimTrailingWhitespace :insertFinalNewline :trimFinalNewlines))
605605
(HoverCapabilities nil (:contentFormat :dynamicRegistration))
606606
(ImplementationCapabilities nil (:dynamicRegistration :linkSupport))
607+
(LinkedEditingRanges (:ranges) (:wordPattern))
607608
(Location (:range :uri) nil)
608609
(MarkedString (:language :value) nil)
609610
(MarkupContent (:kind :value) nil)

0 commit comments

Comments
 (0)