]> git.eshelyaron.com Git - emacs.git/log
emacs.git
6 years agoRemove connection grabbing antics from jsonrpc.el
João Távora [Sun, 10 Jun 2018 06:31:45 +0000 (07:31 +0100)]
Remove connection grabbing antics from jsonrpc.el

* eglot.el (eglot--managed-mode): Don't touch
jsonrpc-find-connection-functions.
(eglot--current-server-or-lose, eglot--current-server): New
functions (resuscitate).
(eglot-shutdown, eglot, eglot-reconnect)
(eglot--server-capable, eglot--maybe-activate-editing-mode)
(eglot-clear-status, eglot--mode-line-format)
(eglot--signal-textDocument/didChange)
(eglot--signal-textDocument/didOpen)
(eglot--signal-textDocument/didSave)
(xref-backend-identifier-completion-table)
(xref-backend-definitions, xref-backend-references)
(xref-backend-apropos, eglot-completion-at-point)
(eglot-help-at-point, eglot-eldoc-function, eglot-imenu)
(eglot-rename, eglot-code-actions): Use eglot--current-server and
eglot--current-server-or-lose.
(eglot-events-buffer, eglot-stderr-buffer)
(eglot-forget-pending-continuations): New commands.
(eglot--mode-line-format): Use eglot-stderr-buffer.

* jsonrpc.el (jsonrpc-find-connection-functions)
(jsonrpc-current-connection, jsonrpc-current-connection-or-lose):
Remove.
(jsonrpc-stderr-buffer, jsonrpc-events-buffer): Simplify.
(jsonrpc-forget-pending-continuations): No longer interactive.

* eglot-tests.el (auto-detect-running-server, auto-reconnect): Use
eglot--current-server.

6 years agoSimplify jsonrpc status setting
João Távora [Sun, 10 Jun 2018 06:16:41 +0000 (07:16 +0100)]
Simplify jsonrpc status setting

* eglot.el (eglot--connect): Don't set jsonrpc-status.
(eglot-clear-status): New interactive command.
(eglot--mode-line-format): Simplify.

* jsonrpc.el (jsonrpc--async-request-1): Simplify.
(jsonrpc-connection): Replace status with last-error.
(jsonrpc-clear-status): Delete.
(jsonrpc--connection-receive): Set last-error.

6 years agoRequest dispatcher's return value determines response
João Távora [Sat, 9 Jun 2018 20:19:13 +0000 (21:19 +0100)]
Request dispatcher's return value determines response

No more jsonrpc-reply.

* eglot.el (eglot-handle-request window/showMessageRequest):
Simplify.
(eglot--register-unregister): Simplify.
(eglot-handle-request workspace/applyEdit): Simplify.
(eglot--apply-text-edits): Signal a jsonrpc-error.
(eglot--apply-workspace-edit): Simplify.

* jsonrpc-tests.el (jsonrpc--with-emacsrpc-fixture): Don't
jsonrpc--reply.

* jsonrpc.el (jsonrpc-error, jsonrpc-connection, jsonrpc-request):
Improve docstring.
(jsonrpc-error): Polymorphic args.
(jsonrpc--unanswered-request-id): Remove.
(jsonrpc--connection-receive): Rework and simplify.
(jsonrpc-reply): Simplify.

6 years agoMerge branch 'master' into jsonrpc-refactor
João Távora [Sat, 9 Jun 2018 20:13:19 +0000 (21:13 +0100)]
Merge branch 'master' into jsonrpc-refactor

6 years agoFix indentation f@#$%^ by previous commit
João Távora [Sat, 9 Jun 2018 20:12:48 +0000 (21:12 +0100)]
Fix indentation f@#$%^ by previous commit

Courtesy of aggressive-indent-mode... Agressive it is...

6 years agoAttempt to handle rls sophisticated globs for didchangewwatchedfiles
João Távora [Sat, 9 Jun 2018 20:09:03 +0000 (21:09 +0100)]
Attempt to handle rls sophisticated globs for didchangewwatchedfiles

* eglot.el (eglot--wildcard-to-regexp): New helper.
(eglot--register-workspace/didChangeWatchedFiles): Use it.

6 years agoCheck flymake-mode before calling report-fn
João Távora [Fri, 8 Jun 2018 17:58:34 +0000 (18:58 +0100)]
Check flymake-mode before calling report-fn

* eglot.el (eglot-handle-notification): Check flymake-mode.

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

6 years agoMerge master into jsonrpc-refactor
João Távora [Fri, 8 Jun 2018 17:48:06 +0000 (18:48 +0100)]
Merge master into jsonrpc-refactor

6 years agoSimplify jsonrpc connection shutdown
João Távora [Fri, 8 Jun 2018 17:37:54 +0000 (18:37 +0100)]
Simplify jsonrpc connection shutdown

* eglot.el (eglot--process): Delete.
(eglot-shutdown): Use jsonrpc-shutdown.
(eglot--on-shutdown): Simplify.
(eglot-reconnect): Simplify.
(eglot--connect): Simplify.

* jsonrpc-tests.el (jsonrpc--with-emacsrpc-fixture): Simplify.

* jsonrpc.el (jsonrpc-process-type, jsonrpc-running-p)
(jsonrpc-shutdown): New methods.

* eglot-tests.el (auto-reconnect): Use jsonrpc--process.
(eglot--call-with-dirs-and-files): Use jsonrpc-running-p.

6 years agoSupport json.c. api purely based on classes
João Távora [Fri, 8 Jun 2018 15:05:02 +0000 (16:05 +0100)]
Support json.c.  api purely based on classes

No more jsonrpc-connect.

This is a big commit because of a data loss problem. It should be at
least two separate commits (json.c-support and new API)

* eglot.el (eglot-server-programs): Rework docstring.
(eglot-handle-request): Don't take ID param
(eglot-lsp-server): No more initargs.
(eglot--interactive): Return 5 args.
(eglot): Take 5 args.
(eglot-reconnect): Pass 6 args to eglot--connect.
(eglot--dispatch): Remove.
(eglot--connect): Take 6 args. Rework.
(eglot-handle-notification): Change all specializations
to use a non-keyword symbol spec.
(eglot-handle-request): Remove ID param from all
specializations.  Don't pass ID to jsonrpc-reply.
(eglot--register-unregister): Don't take JSONRPC-ID arg.
Don't pass ID to jsonrpc-reply.

* jsonrpc-tests.el (returns-3, signals-an--32603-JSONRPC-error)
(times-out, stretching-it-but-works)
(json-el-cant-serialize-this, jsonrpc-connection-ready-p)
(deferred-action-intime, deferred-action-toolate)
(deferred-action-timeout): Pass JSON objects compatible with
json.c
(jsonrpc--test-client, jsonrpc--test-endpoint): New classes
(jsonrpc--with-emacsrpc-fixture): Don't use jsonrpc-connect.
(jsonrpc-connection-ready-p): Update signature.

* jsonrpc.el: Rewrite commentary.
(jsonrpc-connection): Rework class.
(jsonrpc-process-connection): Rework class.
(initialize-instance): New methods..
(jsonrpc--json-read, jsonrpc--json-encode): Reindent.
(jsonrpc-connect): Delete.
(jsonrpc--json-read, jsonrpc--json-encode):
New functions for working with json.c
(jsonrpc--process-filter): Call them.
(jsonrpc--unanswered-request-id): New variable.
(jsonrpc--connection-receive): Use jsonrpc--unanswered-request-id
(jsonrpc-connection-send): Take keyword params to build message
instead of message.
(jsonrpc-notify, jsonrpc--async-request-1): Use new
jsonrpc-connection-send.
(jsonrpc-reply): Simplify.

* eglot-tests.el (rls-watches-files, rls-basic-diagnostics)
(rls-hover-after-edit): Correctly compare using string= and
non-keyword symbols.

6 years agoSlightly polish the flymake integration
João Távora [Wed, 6 Jun 2018 11:04:39 +0000 (12:04 +0100)]
Slightly polish the flymake integration

For backends, like RLS, that don't textDocument/publishDiagnostics
right away, assume that the file is clean.  Since Flymake allows
multiple reportings, it should be OK.

* eglot.el (eglot--unreported-diagnostics): Move variable up here.
(eglot--maybe-activate-editing-mode): Assume no diagnostics on
open.

6 years ago* eglot.el (eglot--make-process): use 'utf-8-emacs-unix
João Távora [Wed, 6 Jun 2018 10:09:43 +0000 (11:09 +0100)]
* eglot.el (eglot--make-process): use 'utf-8-emacs-unix

Attempt to improve the situation reported in https://github.com/joaotavora/eglot/issues/14.

6 years agoMerge master into jsonrpc-refactor (using imerge)
João Távora [Tue, 5 Jun 2018 18:13:46 +0000 (19:13 +0100)]
Merge master into jsonrpc-refactor (using imerge)

6 years agoShoosh compiler
João Távora [Tue, 5 Jun 2018 16:28:03 +0000 (17:28 +0100)]
Shoosh compiler

* eglot.el (eglot-server-ready-p): Use cl-defmethod

6 years agoCleanup the flymake 26.1 hack slightly
João Távora [Tue, 5 Jun 2018 16:26:38 +0000 (17:26 +0100)]
Cleanup the flymake 26.1 hack slightly

* eglot.el (eglot-handle-notification): Use proper flymake
diagnostic types.
(eglot-code-actions): Use eglot--diag-data.
(eglot--make-diag, eglot--diag-data): New aliases to
`flymake-diagnostic-data' and `flymake-make-diagnostic'.
(eglot-error eglot-warning eglot-note)
(dolist eglot-error eglot-warning eglot-note): put
flymake-overlay-control in these.
(eglot-error eglot-warning eglot-note): put corresponding
flymake-category.
(horrible hack at the end): Move the Flymake 26.1 hack here.

6 years agoSupport purposedly ignoring a server capability
João Távora [Mon, 4 Jun 2018 11:49:28 +0000 (12:49 +0100)]
Support purposedly ignoring a server capability

* eglot.el (eglot-ignored-server-capabilites): New defcustom.
(eglot--server-capable): Use it.

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

6 years agoFix typos
brotzeit [Mon, 4 Jun 2018 10:50:01 +0000 (12:50 +0200)]
Fix typos

Close https://github.com/joaotavora/eglot/issues/13.

* eglot.el (eglot--all-major-modes)
(eglot--notify, eglot--xref-reset-known-symbols): Fix typos.

6 years agoFix another merge-related bug in eglot-eldoc-function
João Távora [Sat, 2 Jun 2018 00:06:07 +0000 (01:06 +0100)]
Fix another merge-related bug in eglot-eldoc-function

* eglot.el (eglot-eldoc-function): Correctly destructure
eglot--range-region.

6 years ago* eglot.el (eglot-eldoc-function): remove spurious log message
João Távora [Fri, 1 Jun 2018 23:58:10 +0000 (00:58 +0100)]
* eglot.el (eglot-eldoc-function): remove spurious log message

6 years ago* eglot.el (version): bump to 0.8
João Távora [Fri, 1 Jun 2018 16:58:00 +0000 (17:58 +0100)]
* eglot.el (version): bump to 0.8

6 years agoFix completionitem/resolve
João Távora [Fri, 1 Jun 2018 16:52:00 +0000 (17:52 +0100)]
Fix completionitem/resolve

Should fix interoperation with company-quickhelp.

* eglot.el (eglot-completion-at-point): Correctly pass properties
to completionItem/resolve.

6 years agoExplicitly trigger eldoc after workspace edits
João Távora [Fri, 1 Jun 2018 16:04:17 +0000 (17:04 +0100)]
Explicitly trigger eldoc after workspace edits

It's usually a nice thing to do.

* eglot.el (eglot--apply-workspace-edit): Call
eglot-eldoc-function.

6 years agoNew command m-x eglot-code-actions
João Távora [Fri, 1 Jun 2018 15:59:00 +0000 (16:59 +0100)]
New command m-x eglot-code-actions

Also available when left-clicking diagnostics.

* README.md: Mention eglot-code-actions. Slightly rewrite
differences to lsp-mode.

* eglot.el (eglot-code-actions): New command.
(eglot-handle-notification :textDocument/publishDiagnostics): Use
eglot--make-diag and eglot--overlay-diag-props.
(eglot--mode-line-props): Use eglot--mouse-call.
(eglot--mouse-call): Renamed from eglot--mode-line-call.
(eglot-client-capabilities): List :executeCommand and :codeAction
as capabilities.
(eglot--diag, advice-add flymake--highlight-line): Horrible hack.
(eglot--overlay-diag-props): Horrible hack.

6 years agoRevert an unfinished feature that made it to the last commit
João Távora [Fri, 1 Jun 2018 15:09:19 +0000 (16:09 +0100)]
Revert an unfinished feature that made it to the last commit

commit ee6ab89666704232f744d6262040979b0142c44b
   Author: João Távora <joaotavora@gmail.com>
   Date:   Fri Jun 1 14:43:30 2018 +0100

   Add MELPA badge

6 years agoAdd melpa badge
João Távora [Fri, 1 Jun 2018 13:43:30 +0000 (14:43 +0100)]
Add melpa badge

* README.mdown: Now in MELPA too

6 years agoPrevent possible cquery choke on :initializationoptions
João Távora [Fri, 1 Jun 2018 13:12:54 +0000 (14:12 +0100)]
Prevent possible cquery choke on :initializationoptions

Hopefully help debug https://github.com/joaotavora/eglot/issues/10.

* eglot.el (eglot-initialization-options): Use `list'

6 years agoMerge master into jsonrpc-refactor (using imerge)
João Távora [Wed, 30 May 2018 15:27:30 +0000 (16:27 +0100)]
Merge master into jsonrpc-refactor (using imerge)

6 years ago* eglot.el (version): bump to 0.7
João Távora [Wed, 30 May 2018 02:20:54 +0000 (03:20 +0100)]
* eglot.el (version): bump to 0.7

6 years agoMore yak shaving
João Távora [Mon, 28 May 2018 22:07:56 +0000 (23:07 +0100)]
More yak shaving

* eglot.el (eglot--with-live-buffer, eglot--widening): New macros.
(eglot--lambda): Move up here.
(eglot--process-filter): Simplify with eglot--with-live-buffer.
(eglot--async-request): Simplify with eglot--with-live-buffer.
(eglot--TextDocumentItem): Simplify with eglot--widening.
(eglot--signal-textDocument/didChange, eglot--apply-text-edits):
Simplify with eglot--widening.

6 years agoNew m-x eglot-stderr-buffer useful for debugging
João Távora [Mon, 28 May 2018 21:30:01 +0000 (22:30 +0100)]
New m-x eglot-stderr-buffer useful for debugging

* eglot.el (eglot--make-process): Save stderr buffer in process.
(eglot-stderr-buffer): New interactive command.
(eglot--mode-line-format): Bind C-mouse-1 to new
eglot-stderr-buffer.

6 years agoOn reconnection, ignore errors of shutting down hung server
João Távora [Sun, 27 May 2018 18:45:52 +0000 (19:45 +0100)]
On reconnection, ignore errors of shutting down hung server

* eglot.el
(eglot, eglot-reconnect): Ignore any errors on shutdown.

6 years agoBe more criterious before running the idle timer
João Távora [Sun, 27 May 2018 15:51:15 +0000 (16:51 +0100)]
Be more criterious before running the idle timer

* eglot.el (eglot--change-idle-timer): make a defvar-local
(eglot--after-change): Only run timer if the buffer is live.

6 years agoMake eglot--recent-changes a simpler list
João Távora [Sun, 27 May 2018 14:34:50 +0000 (15:34 +0100)]
Make eglot--recent-changes a simpler list

* eglot.el (eglot-server-ready-p): Don't add default method here.
(eglot-server-ready-p): Do it here.
(eglot--outstanding-edits-p): Remove.
(eglot--before-change, eglot--after-change)
(eglot--signal-textDocument/didChange): Use eglot--recent-changes
as a list. Simplify.
(eglot--signal-textDocument/didOpen): Use eglot--recent-changes as
a list.

6 years agoSet eglot--versioned-identifier to 0 on didopen
João Távora [Sun, 27 May 2018 13:53:53 +0000 (14:53 +0100)]
Set eglot--versioned-identifier to 0 on didopen

Else cquery will rightfully complain about this.

* eglot.el (eglot--signal-textDocument/didOpen): Also set
eglot--versioned-identifier to 0.

6 years agoCorrectly apply workspace edits in documentchanges form
João Távora [Sun, 27 May 2018 13:17:36 +0000 (14:17 +0100)]
Correctly apply workspace edits in documentchanges form

This was breaking M-x eglot-rename for cquery

* eglot.el (eglot--apply-workspace-edit): Fix and simplify.

6 years ago* eglot.el (version): bump to 0.6
João Távora [Sun, 27 May 2018 12:17:07 +0000 (13:17 +0100)]
* eglot.el (version): bump to 0.6

6 years agoHopefully fix the flymake bootstrap problem
João Távora [Sun, 27 May 2018 11:58:49 +0000 (12:58 +0100)]
Hopefully fix the flymake bootstrap problem

Immediately after M-x eglot, eglot's use of flymake was having trouble
detecting the first diagnostics sent from the server, resulting in an
annoying "Wait" in the mode-line.

* eglot.el (eglot--current-flymake-report-fn): Move up here.
(eglot--managed-mode): Set eglot--current-flymake-report-fn to nil
on teardown.
(eglot--maybe-activate-editing-mode): Simplify.
(eglot-handle-notification textDocument/publishDiagnostics): Set unreported-diagnostics to a cons.
(eglot-handle-notification eglot-rls window/progress): Simplify.

* eglot-tests.el (rls-basic-diagnostics): Simplify test.

6 years agoSet spinner in textdocument/didchange as it matters to rls
João Távora [Sun, 27 May 2018 10:58:41 +0000 (11:58 +0100)]
Set spinner in textdocument/didchange as it matters to rls

Otherwise, the asynch eldoc action will immediately send the
textDocument/documentHighlight requests, without understanding that
they need to be deferred a bit more.

* eglot.el (eglot--signal-textDocument/didChange): Set the spinner
here.

6 years agoFix assorted cquery-related bugs
João Távora [Sun, 27 May 2018 10:41:24 +0000 (11:41 +0100)]
Fix assorted cquery-related bugs

Some versions of cquery send a :role key as part of the response to
textDocument/documentHighlight. Ignore it for now.

Also cquery sometimes send 0-length ranges upon which we now fallback
to flymake-diag-region.

Finally, in eglot-eldoc-funciton, the previous hack of calling the
eglot--hover-info outside of the when-buffer-window macrolet contained
a bug. It must be called in the correct buffer. Revert the hack and do
it by querying from eglot.el if ert is running tests.

* eglot.el (eglot--range-region): Return a cons and fallback to
flymake-diag-region if server returned a useless range.
(eglot-handle-notification, eglot--hover-info): Update call to
eglot--range-region.
(eglot-help-at-point): Ensure `eglot--hover-info` runs in right
buffer.
(eglot-eldoc-function): Don't abuse eldoc-last-message like this.
Also update call to eglot--range-region. Consider ert-running-test
(eglot--apply-text-edits): Use pcase-lambda.
(ert): require it.

6 years ago* eglot.el (version): bump to 0.5
João Távora [Sat, 26 May 2018 18:29:51 +0000 (19:29 +0100)]
* eglot.el (version): bump to 0.5

6 years agoMerge branch 'cquery-support' into master
João Távora [Sat, 26 May 2018 18:10:45 +0000 (19:10 +0100)]
Merge branch 'cquery-support' into master

The conflicts in eglot.el where fixed by calling the new eglot--debug
helper coming from 'cquery-support'. This helper was converted to
allow a non-string format passed directly to eglot--log-event.

Also fixed some compilation warnings.

* eglot.el (eglot--debug): Allow non-string FORMAT to be a JSON
object.  (eglot-handle-notification :$cquery/progress)
(eglot-handle-notification :$cquery/setInactiveRegions)
(eglot-handle-notification :$cquery/publishSemanticHighlighting):
Solve compilation warnings.

6 years agoReally ensure eglot--shutdown deletes a process completely
João Távora [Sat, 26 May 2018 17:52:17 +0000 (18:52 +0100)]
Really ensure eglot--shutdown deletes a process completely

* eglot.el (eglot-lsp-server): rename slot "moribund" to
"shutdown-requested"
(eglot--connect): Don't check if shutdown was requested here.
(eglot--process-sentinel): Set shutdown-requested to
:sentinel-done here.
(eglot-shutdown): use eglot--shutdown-requested.  Improve check
for process liveness.

6 years agoGet rid of eglot--obj, an uninteresting abstraction
João Távora [Sat, 26 May 2018 15:37:10 +0000 (16:37 +0100)]
Get rid of eglot--obj, an uninteresting abstraction

* eglot.el (eglot--obj): Get rid of this. It wasn't widely used
anyway.
(eglot-client-capabilities)
(eglot--connect, eglot--async-request, eglot--notify)
(eglot--reply, eglot--pos-to-lsp-position, eglot-handle-request)
(eglot--register-unregister, eglot-handle-request)
(eglot--TextDocumentIdentifier)
(eglot--VersionedTextDocumentIdentifier)
(eglot--TextDocumentItem, eglot--TextDocumentPositionParams)
(eglot--signal-textDocument/didChange)
(eglot--signal-textDocument/didSave)
(xref-backend-identifier-completion-table)
(xref-backend-references, xref-backend-apropos, eglot-imenu)
(eglot-rename): Use list instead of eglot--obj.

6 years agoCleanup deferred request mechanism with a readable log
João Távora [Sat, 26 May 2018 15:22:46 +0000 (16:22 +0100)]
Cleanup deferred request mechanism with a readable log

* eglot.el (eglot-lsp-server): Rework doc of deferred-actions
slot.
(defvar eglot--next-request-id): Move down, now buffer local.
(defun eglot--next-request-id): Remove.
(eglot--call-deferred): Be more informative.
(eglot--async-request): Simplify.

6 years agoSimpify eglot--server-receive
João Távora [Sat, 26 May 2018 15:13:53 +0000 (16:13 +0100)]
Simpify eglot--server-receive

* eglot.el (eglot--obj): Cleanup whitespace.
(eglot--server-receive): Simplify.

6 years agoDon't rely on flymake's idle timer for textdocument/didchange
João Távora [Sat, 26 May 2018 15:11:11 +0000 (16:11 +0100)]
Don't rely on flymake's idle timer for textdocument/didchange

* eglot.el (eglot--after-change): Set idle timer here.
(eglot--change-idle-timer): New var.
(eglot--signal-textDocument/didChange): No seed to set spinner here.
(eglot-flymake-backend) Don't send didChange here.

6 years agoDocument current api breaches a bit
João Távora [Sat, 26 May 2018 00:07:10 +0000 (01:07 +0100)]
Document current api breaches a bit

* eglot-tests.el (eglot--call-with-dirs-and-files)
(auto-reconnect): use eglot--process

* eglot.el (eglot-shutdown, eglot, eglot-reconnect)
(eglot--connect): Use eglot--process
(eglot--process): Alias to concentrate the hack here.
(eglot--signal-textDocument/didChange): Tweak comment.

6 years agoMerge branch use-eieio-server-defclass into jsonrpc-refactor
João Távora [Fri, 25 May 2018 23:29:50 +0000 (00:29 +0100)]
Merge branch use-eieio-server-defclass into jsonrpc-refactor

6 years agoLog debug messages through eglot--debug
Josh Elsasser [Fri, 25 May 2018 03:10:15 +0000 (20:10 -0700)]
Log debug messages through eglot--debug

* eglot.el (eglot--async-request, eglot--process-sentinel):
(eglot--call-deferred): Use eglot--debug to log messages to
the server events buffer.
(eglot--server-receive): Demote "Notification unimplemented"
message on missing handlers to a pure debug message.

6 years agoDemote unvisited diagnostics logging to debug level
Josh Elsasser [Tue, 22 May 2018 00:15:12 +0000 (17:15 -0700)]
Demote unvisited diagnostics logging to debug level

The PublishDiagnostic spec (LSP Specification, 3.0) does not
strictly forbid the server from publishing diagnostics before
a file has been visited.

* eglot.el (eglot--server-textDocument/publishDiagnostics): Log
the "received diagnostics for unvisited file" warning as debug
to avoid spamming users of compliant language servers.

6 years agoIntroduce eglot--debug for unimportant messages
Josh Elsasser [Tue, 22 May 2018 00:03:55 +0000 (17:03 -0700)]
Introduce eglot--debug for unimportant messages

* eglot.el (eglot--debug): New function to log noisy or trivial
messages to the eglot events buffer.

6 years agoAdd cquery support for c/c++ projects
Josh Elsasser [Mon, 21 May 2018 19:27:05 +0000 (12:27 -0700)]
Add cquery support for c/c++ projects

Implements minimal support for the core cquery language
server. None of its extensions are implemented yet.

* eglot.el (eglot-server-programs): Add cquery to list
of guessed programs for c-mode and c++-mode.
(eglot-initialization-options eglot-cquery): Specialize init
options to pass cquery a cache directory and disable a flood
of $cquery/progress messages.
(eglot-handle-notification $cquery/publishSemanticHighlighting):
(eglot-handle-notification $cquery/setInactiveRegions):
(eglot-handle-notification $cquery/progress): New no-op functions
to avoid filling logs with "unknown message" warnings.
(eglot-cquery): New eglot-lsp-server subclass.

* README.md: Mention cquery in the README.

6 years agoFix indentation broken by the defclass monster commit
João Távora [Tue, 22 May 2018 10:42:12 +0000 (11:42 +0100)]
Fix indentation broken by the defclass monster commit

* eglot.el (for, eglot-handle-notification publishDiagnostics)
(eglot-handle-request registerCapability, eglot-handle-request
unregisterCapability, eglot-handle-request applyEdit): fix
indentation.

6 years agoIntroduce new api methods for experimental clients to use
João Távora [Tue, 22 May 2018 10:41:02 +0000 (11:41 +0100)]
Introduce new api methods for experimental clients to use

Should help Josh Elsasser implement pull request https://github.com/joaotavora/eglot/issues/6.

* eglot.el (eglot--obj): Move upwards in file.
(eglot-server-ready-p): Tweak comment.
(eglot-initialization-options): New API defgeneric..
(eglot-client-capabilities): New API defgeneric.
(eglot--client-capabilities): Remove.
(eglot--connect): Call new API methods here.

6 years agoDo rust's rls hack properly with new class-based api
João Távora [Tue, 22 May 2018 10:14:08 +0000 (11:14 +0100)]
Do rust's rls hack properly with new class-based api

* eglot.el (eglot-server-ready-p): New API method.
(eglot-handle-request, eglot-handle-notification): New
defgeneric's.
(eglot--ready-predicates, eglot--server-ready-p): Remove.
(eglot--async-request): Call eglot-server-ready-p.
(eglot--request): Tweak comment.
(eglot--rls-probably-ready-for-p): Remove.
(eglot-server-ready-p eglot-rls): Adapts earlier
eglot--rls-probably-ready-for-p.
(eglot-handle-notification eglot-rls): Specialize to eglot-rls.
(eglot-rls): New eglot-lsp-server subclass.

* eglot-tests.el (auto-detect-running-server)
(auto-reconnect, basic-completions)
(hover-after-completions): Use eglot--interactive

6 years agoUse an eieio class to represent a server.
João Távora [Tue, 22 May 2018 01:00:49 +0000 (02:00 +0100)]
Use an eieio class to represent a server.

Allow clients of eglot.el to use specific server classes to represent
experimental servers.

Wherever you used to read "proc" you now probably read "server",
unless it's really the process properties that are sought after.

Should help Josh Elsasser implement pull request https://github.com/joaotavora/eglot/issues/6.

* eglot-tests.el (eglot--call-with-dirs-and-files)
(auto-detect-running-server, auto-reconnect, basic-completions)
(hover-after-completions): Adapt to server defclass instead of
proc.

* eglot.el
(eglot-server-programs): Add docstring.
(eglot--processes-by-project): Removed.
(eglot--servers-by-project): New variable.
(eglot--current-process): Removed.
(eglot--current-server): New function.
(eglot-server): New class.
(cl-print-object eglot-server): New method.
(eglot--current-process-or-lose): Removed.
(eglot--current-server-or-lose): New function.
(eglot--define-process-var): Remove.
(eglot--make-process): Rework.
(eglot--project-short-name): Remove.
(eglot--connect): Rework.
(eglot--interactive): Rework to allow custom classes.
(eglot, eglot-reconnect, eglot--process-sentinel)
(eglot--process-filter, eglot-events-buffer, eglot--log-event):
Rework.
(eglot--process-receive): Removed.
(eglot--server-receive): New function.
(eglot--send): Renamed from eglot--process-send.
(eglot--process-send): Removed.
(eglot-forget-pending-continuations)
(eglot-clear-status, eglot--call-deferred)
(eglot--server-ready-p, eglot--async-request, eglot--request)
(eglot--notify, eglot--reply, eglot--managed-mode-onoff)
(eglot--maybe-activate-editing-mode, eglot--mode-line-format):
Rework.
(eglot-shutdown): Rework.
(eglot-handle-notification *, eglot-handle-request *)
(eglot--register-unregister)
(eglot--signal-textDocument/didOpen)
(eglot--signal-textDocument/didClose)
(eglot--signal-textDocument/willSave)
(eglot--signal-textDocument/didSave)
(xref-backend-identifier-completion-table)
(xref-backend-definitions, xref-backend-references)
(xref-backend-apropos, eglot-completion-at-point)
(eglot-help-at-point, eglot-eldoc-function, eglot-imenu)
(eglot-rename)
(eglot--register-workspace/didChangeWatchedFiles)
(eglot--unregister-workspace/didChangeWatchedFiles)
(eglot--rls-probably-ready-for-p, eglot-handle-notification):
Rework (proc->server)

fixup

* eglot-tests.el (eglot--call-with-dirs-and-files)
(auto-detect-running-server, auto-reconnect, basic-completions)
(hover-after-completions):

* eglot.el (eglot--processes-by-project): Removed.
(eglot--servers-by-project): New variable.
(eglot--current-process): Removed.
(eglot--current-server): New function.

6 years agoIntroduce eglot-handle-request and eglot-handle-notification as api
João Távora [Mon, 21 May 2018 08:00:49 +0000 (09:00 +0100)]
Introduce eglot-handle-request and eglot-handle-notification as api

* eglot.el (eglot--process-receive): Call eglot-handle-request and
eglot-handle-notification.
(eglot-handle-notification, eglot-handle-request): New generic
functions.
(eglot--server-window/showMessage)
(eglot--server-window/progress)
(eglot--server-telemetry/event, eglot--server-window/logMessage):
Convert to eglot-handle-notification.
(eglot-handle-request, eglot--server-client/registerCapability)
(eglot--server-client/unregisterCapability)
(eglot-handle-request): Convert to eglot-handle-request.

6 years agoGet rid of jsonrpc.el customization group and timeout
João Távora [Sun, 20 May 2018 14:24:55 +0000 (15:24 +0100)]
Get rid of jsonrpc.el customization group and timeout

* eglot.el (eglot-shutdown, eglot--signal-textDocument/willSave):
Pass :timeout to jsonrpc-request.
(defadvice jsonrpc-request): Add :timeout kwarg

* jsonrpc.el (defgroup jsonrpc, jsonrpc-request-timeout): Remove.
(jrpc-default-request-timeout): New constant.
(jsonrpc-async-request): Use it.
(jsonrpc-request): Accept timeout kwarg and pass it on.

6 years agoHeroically merge master into jsonrpc-refactor (using imerge)
João Távora [Sun, 20 May 2018 14:07:23 +0000 (15:07 +0100)]
Heroically merge master into jsonrpc-refactor (using imerge)

6 years agoRename jrpc.el to jsonrpc.el
João Távora [Sun, 20 May 2018 12:21:12 +0000 (13:21 +0100)]
Rename jrpc.el to jsonrpc.el

* eglot.el [everywhere]: jrpc -> jsonrpc everywhere.
Reindent.

* eglot-tests [everywhere]: jrpc -> jsonrpc everywhere.

* jsonrpc.el: New file.

* Makefile: jrpc.el -> jsonrpc.el

6 years agoFix a bug introduced in the previous commit
João Távora [Sat, 19 May 2018 23:44:21 +0000 (00:44 +0100)]
Fix a bug introduced in the previous commit

* eglot.el (eglot--format-markup): Ignore errors when calling
possibly unknown functions.
(eglot-completion-at-point): Use eglot--format-markup
(eglot--hover-info): Yak shaving

6 years agoRewrite a couple of defs and shave a yak
João Távora [Sat, 19 May 2018 23:35:11 +0000 (00:35 +0100)]
Rewrite a couple of defs and shave a yak

* eglot.el (eglot--define-process-var): Simplify.
(eglot--format-markup): Rewrite.
(eglot--warn, eglot--pos-to-lsp-position)
(eglot--lsp-position-to-point, eglot--server-capable)
(eglot--maybe-activate-editing-mode)
(eglot--server-textDocument/publishDiagnostics)
(eglot--server-workspace/applyEdit, eglot--hover-info): Yak
shaving.

6 years ago* eglot.el (version): bump to 0.4
João Távora [Sat, 19 May 2018 22:41:14 +0000 (23:41 +0100)]
* eglot.el (version): bump to 0.4

6 years agoAdd some completion tests for pyls
João Távora [Sat, 19 May 2018 16:04:46 +0000 (17:04 +0100)]
Add some completion tests for pyls

* eglot-tests.el (edebug): Require it.
(eglot--call-with-dirs-and-files): Simplify.
(eglot--call-with-test-timeout): Don't timeout if edebug.
(auto-detect-running-server, auto-reconnect): Skip unless rls is
found.
(basic-completions): New test.
(hover-after-completions): New failing test.

* eglot.el (eglot-eldoc-function): Force write
eldoc-last-message, for tests sake.

6 years agoHandle managed buffers in own process var
João Távora [Sat, 19 May 2018 15:50:09 +0000 (16:50 +0100)]
Handle managed buffers in own process var

This should save some trouble when testing noninteractively.  Because
eglot--shutdown didn't turn off the minor mode, test code running
immediately after it could still make didClose requests, for example.
The sentinel was the previous responsible for turning off the minor
mode and didn't get a chance to run in that case. Now eglot--shutdown
is also responsible for turning off the minor mode.

All this should be hidden behind eglot--managed-mode-onoff.

* eglot.el (eglot--managed-buffers): New process-local variable.
(eglot--process-sentinel): Turn off managed mode.
(eglot--managed-mode-onoff): New function.
(eglot--managed-mode): Don't offer to kill server here.
(eglot--buffer-managed-p): Remove.
(eglot--maybe-activate-editing-mode): Activate mode here.
(eglot-shutdown): Turn off minor mode here.
(eglot--server-window/progress): Simplify slightly.

6 years agoRobustness fixes for the request mechanism
João Távora [Sat, 19 May 2018 13:26:46 +0000 (14:26 +0100)]
Robustness fixes for the request mechanism

* eglot.el (eglot--async-request): Pass actual id to eglot--log-event
(eglot--request): Also cancel any continuations.

6 years agoCheck capabilities before sending :completionitem/resolve
João Távora [Sat, 19 May 2018 12:45:10 +0000 (13:45 +0100)]
Check capabilities before sending :completionitem/resolve

* eglot.el (eglot--server-capable): Rewrite.
(eglot-completion-at-point): Check caps before sending
:completionItem/resolve

6 years agoBetter decide what text exactly to present as completions
João Távora [Sat, 19 May 2018 12:16:36 +0000 (13:16 +0100)]
Better decide what text exactly to present as completions

For inserting, :insertText takes precedence over :label.
For annotating, first sentence of :documentation, then :detail,
then :kind name.

Also remember to send didChange in the :exit-function

* eglot.el (eglot-completion-function): Rework main function and
:annotation-function, and :exit-function

6 years ago* eglot.el (eglot-clear-status): remember to update modeline
João Távora [Sat, 19 May 2018 12:12:08 +0000 (13:12 +0100)]
* eglot.el (eglot-clear-status): remember to update modeline

6 years agoCollect regions to change as markers, then edit
João Távora [Sat, 19 May 2018 10:12:41 +0000 (11:12 +0100)]
Collect regions to change as markers, then edit

* eglot.el (eglot--lsp-position-to-point): Accept MARKER optional
arg.
(eglot--range-region): Accept MARKERS optional arg. Return a list.
(eglot--server-textDocument/publishDiagnostics)
(eglot--hover-info, eglot-eldoc-function): eglot--range-region
returns a list, not a cons.
(eglot--apply-text-edits): First collect regions as markers, then
edit.

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

6 years agoIf we're going to send rootpath, better send an absolute one
João Távora [Sat, 19 May 2018 09:24:18 +0000 (10:24 +0100)]
If we're going to send rootpath, better send an absolute one

javascript-typescript-langserver complained.

* eglot.el (eglot--connect): Use expand-file-name.

6 years agoRobustify timer handling for eglot--async-request
João Távora [Sat, 19 May 2018 09:06:12 +0000 (10:06 +0100)]
Robustify timer handling for eglot--async-request

This basically cherry-picks an ealier commit for the jsonrpc-refactor
branch:
  a2aa1ed..: João Távora 2018-05-18 Robustify timer handling for jrpc-async-request

* jrpc.el (jrpc--async-request): Improve timeout handling. Return a list (ID TIMER)
(jrpc--request): Protect against user-quits, cancelling timer

6 years agoSimplify some infrastructure fucntions
João Távora [Sat, 19 May 2018 08:29:52 +0000 (09:29 +0100)]
Simplify some infrastructure fucntions

* eglot.el (eglot--contact): Simplify docstring.
(eglot--make-process): Simplify.
(eglot--connect): Simplify.
(eglot--interactive): Simplify and correct odd bug.
(eglot--process-sentinel): Correct messages. Delete before
attempting reconnection.
(eglot-shutdown): Simplify.

6 years agoJrpc.el should know nothing of mode-line updates
João Távora [Fri, 18 May 2018 15:52:19 +0000 (16:52 +0100)]
Jrpc.el should know nothing of mode-line updates

* eglot.el (eglot--dispatch): METHOD can be a symbol.
Call force-mode-line-update here.

6 years agoImprove jrpc.el's doc (and change jrpc-request's protocol a tiny bit)
João Távora [Fri, 18 May 2018 11:35:36 +0000 (12:35 +0100)]
Improve jrpc.el's doc (and change jrpc-request's protocol a tiny bit)

* jrpc.el (jrpc-async-request)
(jrpc-request,jrpc-notify,jrpc-reply): Improve docstring.
(jrpc-connect): Improve docstring and add autoload cookie
(jrpc-request): DEFERRED param is now &key
(defgroup jrpc): Fix description.

* eglot.el (advice-add jrpc-request): Use &key deferred.
(eglot-completion-at-point): Pass :deferred to jrpc-request

6 years agoMerge branch 'master' into jsonrpc-refactor (using good ol' git merge)
João Távora [Fri, 18 May 2018 10:57:22 +0000 (11:57 +0100)]
Merge branch 'master' into jsonrpc-refactor (using good ol' git merge)

6 years ago* eglot.el (version): bump to 0.3
João Távora [Thu, 17 May 2018 13:09:50 +0000 (14:09 +0100)]
* eglot.el (version): bump to 0.3

6 years agoMake it work on windows
João Távora [Thu, 17 May 2018 13:03:20 +0000 (14:03 +0100)]
Make it work on windows

Apparently passing :coding 'no-conversion to make-process on windows
is essential to receive any text at all in the process filter.

Also needed to tweak uri-to-path and path-to-uri.

Thanks to lsp-mode.el for these hints

* eglot.el (eglot--make-process): Pass :coding 'no-conversion to
make-process.
(eglot--path-to-uri): Add a forward slash if windows-nt.
(eglot--uri-to-path): Remove a forward slash if windows-nt.
(eglot--server-textDocument/publishDiagnostics): Simplify and use
eglot--uri-to-path.

6 years agoFix eglot--error and eglot--message helpers
João Távora [Thu, 17 May 2018 13:04:15 +0000 (14:04 +0100)]
Fix eglot--error and eglot--message helpers

* eglot.el (eglot--error, eglot--message):
Safely interpret %s.

6 years ago* eglot.el (eglot--lambda): add missing indent spec.
João Távora [Thu, 17 May 2018 13:04:33 +0000 (14:04 +0100)]
* eglot.el (eglot--lambda): add missing indent spec.

6 years agoSimplify some function calling infrastructure
João Távora [Wed, 16 May 2018 23:30:53 +0000 (00:30 +0100)]
Simplify some function calling infrastructure

eglot--mapply is a confusing abstraction. Hide some of that confusion
behind eglot--lambda. More stably dispatch server notifications and
requests without introspecting their contents.

* eglot.el (eglot--process-receive): Simplify.
(eglot--async-request): Improve doc.
(eglot--request): Simplify.
(eglot--mapply): Remove.
(xref-backend-identifier-completion-table)
(xref-backend-definitions, xref-backend-references)
(xref-backend-apropos, eglot-completion-at-point)
(eglot-eldoc-function, eglot-imenu, eglot--apply-text-edits):
Don't use eglot--mapply, use normal mapcar/mapc.

6 years agoReplace eglot--with-lsp-range with a function and pcase-let
João Távora [Wed, 16 May 2018 22:45:35 +0000 (23:45 +0100)]
Replace eglot--with-lsp-range with a function and pcase-let

* eglot.el (eglot--with-lsp-range): Remove.
(eglot--range-region): New function.
(eglot--server-textDocument/publishDiagnostics)
(eglot--hover-info, eglot-eldoc-function)
(eglot--apply-text-edits): Use it.

6 years agoSimpler callback protocol for jsonrpc parameters and results
João Távora [Wed, 16 May 2018 22:39:12 +0000 (23:39 +0100)]
Simpler callback protocol for jsonrpc parameters and results

Instead of introspecting the :params or :result object to discover if
an object is present, and changing the Elisp function call type
(funcall vs apply) accordingly, alway funcall. It's up to the
application to destructure if it wishes. jrpc-lambda can help with
that and keep the application code simple.

* eglot.el (eglot--on-shutdown): Fix indentation.
(eglot--dispatch): Simplify.
(xref-backend-identifier-completion-table)
(xref-backend-definitions, xref-backend-references)
(xref-backend-apropos, eglot-completion-at-point)
(eglot-eldoc-function, eglot-imenu, eglot--apply-text-edits):
Don't use jrpc-mapply.

* jrpc.el (jrpc--process-receive): Allow only keys defined in
JSONRPC2.0
(jrpc--process-receive): Don't overload function call type based
on remote response.
(jrpc-lambda): Return a unary lambda.
(jrpc-request): Simplify.
(jrpc-mapply): Remove.

6 years agoMore flexible jrpc.el and improve eglot.el's doc
João Távora [Wed, 16 May 2018 13:21:27 +0000 (14:21 +0100)]
More flexible jrpc.el and improve eglot.el's doc

Generalize and rework CONTACT arg to jrpc-connect

* eglot.el (eglot--command-history): Tweak docstring.
(eglot--interactive): Rework.
(eglot): Rework docstring. COMMAND is now CONTACT.
(eglot--connect): Use new jrpc-connect protocol.
(eglot-server-programs): Reword doc.

* jrpc.el (jrpc--make-process): Use new form of CONTACT.
(jrpc-connect): Explain new semantics of CONTACT.

6 years agoMerge master into jsonrpc-refactor (using imerge)
João Távora [Wed, 16 May 2018 00:21:36 +0000 (01:21 +0100)]
Merge master into jsonrpc-refactor (using imerge)

6 years agoAdd php's php-language-server to built-in guessed servers
João Távora [Tue, 15 May 2018 12:24:08 +0000 (13:24 +0100)]
Add php's php-language-server to built-in guessed servers

Closes https://github.com/joaotavora/eglot/issues/1. The problem in that issue is that php-language-server has a
bug when it's not passed it the deprecated ":rootPath" field. The bug
doesn't happen if the ":processId" field is also absent. Eglot was
triggering the bug, because it didn't pass ":rootPath", but there's
nothing wrong in doing so.

* README.md: Add php-language-server to the built-in list.

* eglot.el (eglot-server-programs): Add php-language-server.
(eglot--connect): Also pass (deprecated) rootPath.

6 years agoBump version and slightly improve doc
João Távora [Tue, 15 May 2018 09:59:46 +0000 (10:59 +0100)]
Bump version and slightly improve doc

* eglot.el: Bump version. Add nicer Commentary header.
(eglot): Improve docstring.

* README.md: Update

6 years agoMore quietly report request timeouts as events
João Távora [Mon, 14 May 2018 22:58:29 +0000 (23:58 +0100)]
More quietly report request timeouts as events

* eglot.el (eglot--sync-request): Use eglot--log-event

6 years agoShutdown server if connection initialization fails
João Távora [Mon, 14 May 2018 22:09:27 +0000 (23:09 +0100)]
Shutdown server if connection initialization fails

Also tweak autoreconnection logic

* eglot.el (eglot--connect): Immediately `eglot-shutdown` if
connection initialization failed. Don't treat interactive calls
specially.
(eglot--process-sentinel): Tweak messages.

6 years agoFix a ridiculous bug when generating transient projects
João Távora [Mon, 14 May 2018 21:19:23 +0000 (22:19 +0100)]
Fix a ridiculous bug when generating transient projects

* eglot.el (eglot--find-current-process, eglot--interactive): Fix
horrible bug.

6 years agoFix a ridiculous bug when generating transient projects
João Távora [Mon, 14 May 2018 21:17:00 +0000 (22:17 +0100)]
Fix a ridiculous bug when generating transient projects

* eglot.el (eglot--find-current-process, eglot--interactive): Fix
horrible bug.

6 years agoJrpc-connect is now passed a generic dispatching function
João Távora [Mon, 14 May 2018 20:49:58 +0000 (21:49 +0100)]
Jrpc-connect is now passed a generic dispatching function

* eglot.el (eglot--dispatch): New helper.
(eglot--connect): Use it.

* jrpc.el (jrpc--dispatcher, jrpc--request-continuations)
(jrpc--server-request-ids): New process-local var.
(jrpc--pending-continuations, jrpc--method-prefix): Remove.
(jrpc-connect): Take DISPATCHER instead of PREFIX.
(jrpc--process-receive): Use proc's dispatcher.
(jrpc--process-send): Make private.
(jrpc-forget-pending-continuations, jrpc-async-request)
(jrpc-reply, jrpc-notify): Use new function names.

6 years agoMerge master into jsonrpc-refactor (using imerge)
João Távora [Mon, 14 May 2018 19:06:44 +0000 (20:06 +0100)]
Merge master into jsonrpc-refactor (using imerge)

6 years agoProper server shutdown when jrpc.el is used
João Távora [Mon, 14 May 2018 18:19:12 +0000 (19:19 +0100)]
Proper server shutdown when jrpc.el is used

The shutdown hook can't be a buffer-local thing, it has
to be a server property. Also, on shutdown in eglot.el,
remember to first unmanage buffers and only then affect
eglot--processes-by-project.

* eglot.el (eglot--on-shutdown): reverse order of first
two sexps.
(eglot--connect): Pass a shutdown function to jrpc-connect
(eglot--managed-mode): Don't use jrpc-server-moribund-hook
(eglot--buffer-managed-p): Simplify. Use eglot--find-current-process.

6 years agoSupport didchangewatchedfiles with dynamic registration
João Távora [Mon, 14 May 2018 13:18:18 +0000 (14:18 +0100)]
Support didchangewatchedfiles with dynamic registration

RLS uses this, presumaly for knowing about Cargo.toml changes and stuff.

* README.md: Update protocol compliance.

* eglot.el (filenotify): Require it.
(eglot--file-watches): New process-local var.
(eglot--process-sentinel): Kill all watches
(eglot--register-unregister): New helper.
(eglot--server-client/registerCapability): Simplify.
(eglot--server-client/unregisterCapability): New method.
(eglot--register-workspace/didChangeWatchedFiles)
(eglot--unregister-workspace/didChangeWatchedFiles): New
capability.
(eglot--client-capabilities): Update.

6 years agoRemove an unused variable
João Távora [Mon, 14 May 2018 10:41:46 +0000 (11:41 +0100)]
Remove an unused variable

* eglot.el (eglot--expect-carriage-return): Get rid of this.

6 years agoNow send willsavewaituntil
João Távora [Mon, 14 May 2018 10:20:37 +0000 (11:20 +0100)]
Now send willsavewaituntil

* eglot.el (eglot--client-capabilities): Report willSaveWaitUntil.
(eglot--server-workspace/applyEdit): Fix docstring.
(eglot--signal-textDocument/willSave): Send willSaveWaitUntil
(eglot--signal-textDocument/didOpen)
(eglot--signal-textDocument/didClose): Don't eglot--obj.
(eglot--apply-text-edits): Simplify. Use current buffer.
(eglot--apply-workspace-edit): Use new eglot--apply-text-edits.

6 years agoDon't define a menu if nothing to show there for now
João Távora [Mon, 14 May 2018 09:50:49 +0000 (10:50 +0100)]
Don't define a menu if nothing to show there for now

* eglot.el (eglot-menu): Remove it.
(eglot--mode-line-format): Don't define a menu.

6 years agoUse rls in travis ci and add actual tests
João Távora [Sun, 13 May 2018 22:25:15 +0000 (23:25 +0100)]
Use rls in travis ci and add actual tests

Also run a hook when connected

* eglot-tests.el (eglot--with-dirs-and-files)
(eglot--make-file-or-dirs, eglot--call-with-dirs-and-files)
(eglot--find-file-noselect): New helpers.
(auto-detect-running-server, auto-reconnect): New actual tests.

* eglot.el (eglot-connect): Run hook when connected
(eglot-connect-hook): New variable

* .travis.yml: Use rust stable and install rls

* README.md: Update mention of automated tests

6 years agoFix automatic project creation
João Távora [Sun, 13 May 2018 22:22:31 +0000 (23:22 +0100)]
Fix automatic project creation

* eglot.el (eglot): Take PROJECT arg. Return process.
(eglot--interactive): Returns a project.