Skip to content

Commit

Permalink
Fix joaotavora#361: abide by LSP when reporting and moving to columns
Browse files Browse the repository at this point in the history
* eglot.el (eglot-current-column-function): Set to
eglot-lsp-abiding-column.
(eglot-move-to-column-function): Set to
eglot-move-to-lsp-abiding-column.

* NEWS.md: Log the change here as well.

Co-authored-by: João Távora <joaotavora@gmail.com>
  • Loading branch information
nemethf and joaotavora committed Apr 16, 2020
1 parent 8332cdf commit cacfd24
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 6 deletions.
9 changes: 9 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
# 1.6 (upcoming)

##### Column offset calculation is now LSP-conform ([#361][github#361])

It seems the majority of servers now comply with the language server
specification when it comes to handling non-ASCII texts. Therefore
the default values of `eglot-move-to-column-function` and
`eglot-current-column-function` have been changed. The documentations
of these variables help to restore the old behavior.

##### Support workspace/configuration requests ([#326][github#326])

Also a new section "Per-project server configuration" in the README.md
Expand Down Expand Up @@ -205,3 +213,4 @@ and now said bunch of references-->
[github#316]: https://github.com/joaotavora/eglot/issues/316
[github#324]: https://github.com/joaotavora/eglot/issues/324
[github#326]: https://github.com/joaotavora/eglot/issues/326
[github#361]: https://github.com/joaotavora/eglot/issues/361
12 changes: 6 additions & 6 deletions eglot.el
Original file line number Diff line number Diff line change
Expand Up @@ -1002,15 +1002,15 @@ CONNECT-ARGS are passed as additional arguments to

(defun eglot-current-column () (- (point) (point-at-bol)))

(defvar eglot-current-column-function #'eglot-current-column
(defvar eglot-current-column-function #'eglot-lsp-abiding-column
"Function to calculate the current column.
This is the inverse operation of
`eglot-move-to-column-function' (which see). It is a function of
no arguments returning a column number. For buffers managed by
fully LSP-compliant servers, this should be set to
`eglot-lsp-abiding-column', and `eglot-current-column' (the default)
for all others.")
`eglot-lsp-abiding-column' (the default), and
`eglot-current-column' for all others.")

(defun eglot-lsp-abiding-column ()
"Calculate current COLUMN as defined by the LSP spec."
Expand All @@ -1026,7 +1026,7 @@ for all others.")
:character (progn (when pos (goto-char pos))
(funcall eglot-current-column-function)))))

(defvar eglot-move-to-column-function #'eglot-move-to-column
(defvar eglot-move-to-column-function #'eglot-move-to-lsp-abiding-column
"Function to move to a column reported by the LSP server.
According to the standard, LSP column/character offsets are based
Expand All @@ -1036,8 +1036,8 @@ where X is a multi-byte character, it actually means `b', not
`c'. However, many servers don't follow the spec this closely.
For buffers managed by fully LSP-compliant servers, this should
be set to `eglot-move-to-lsp-abiding-column', and
`eglot-move-to-column' (the default) for all others.")
be set to `eglot-move-to-lsp-abiding-column' (the default), and
`eglot-move-to-column' for all others.")

(defun eglot-move-to-column (column)
"Move to COLUMN without closely following the LSP spec."
Expand Down

0 comments on commit cacfd24

Please sign in to comment.