]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix eglot-move-to-lsp-abiding-column ()
authorJoão Távora <joaotavora@gmail.com>
Sun, 19 Jan 2020 10:02:55 +0000 (11:02 +0100)
committerJoão Távora <joaotavora@gmail.com>
Thu, 16 Apr 2020 09:07:54 +0000 (10:07 +0100)
Ensure conformance with the this part of the specification: "if the
character value is greater than the line length it defaults back to
the line length."

* eglot.el: (eglot-move-to-lsp-abiding-column): Don't move beyond
line-end.

GitHub-reference: https://github.com/joaotavora/eglot/issues/361

lisp/progmodes/eglot.el

index 3149cd5cc01e009785a5e36616751752bfe48d2a..2a50611d364aad3d9fdba1bb60f508cde7d3800c 100644 (file)
@@ -1050,15 +1050,20 @@ be set to `eglot-move-to-lsp-abiding-column', and
 
 (defun eglot-move-to-lsp-abiding-column (column)
   "Move to COLUMN abiding by the LSP spec."
-  (cl-loop
-   initially (move-to-column column)
-   with lbp = (line-beginning-position)
-   for diff = (- column
-                 (/ (- (length (encode-coding-region lbp (point) 'utf-16 t))
-                       2)
-                    2))
-   until (zerop diff)
-   do (forward-char (/ (if (> diff 0) (1+ diff) (1- diff)) 2))))
+  (save-restriction
+    (cl-loop
+     with lbp = (line-beginning-position)
+     initially
+     (narrow-to-region lbp (line-end-position))
+     (move-to-column column)
+     for diff = (- column
+                   (/ (- (length (encode-coding-region lbp (point) 'utf-16 t))
+                         2)
+                      2))
+     until (zerop diff)
+     do (condition-case eob-err
+            (forward-char (/ (if (> diff 0) (1+ diff) (1- diff)) 2))
+          (end-of-buffer (cl-return eob-err))))))
 
 (defun eglot--lsp-position-to-point (pos-plist &optional marker)
   "Convert LSP position POS-PLIST to Emacs point.