2018-06-01  João Távora  <joaotavora@gmail.com>

	* eglot.el (Version): Bump to 0.8

2018-06-01  João Távora  <joaotavora@gmail.com>

	Add animated gifs to README.md

2018-06-01  João Távora  <joaotavora@gmail.com>

	Fix completionItem/resolve

	Should fix interoperation with company-quickhelp.

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

2018-06-01  João Távora  <joaotavora@gmail.com>

	Explicitly trigger eldoc after workspace edits

	It's usually a nice thing to do.

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

2018-06-01  João Távora  <joaotavora@gmail.com>

	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.

2018-06-01  João Távora  <joaotavora@gmail.com>

	Revert an unfinished feature that made it to the last commit

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

	   Add MELPA badge

2018-06-01  João Távora  <joaotavora@gmail.com>

	Add MELPA badge

	* README.mdown: Now in MELPA too

2018-06-01  João Távora  <joaotavora@gmail.com>

	Prevent possible cquery choke on :initializationOptions

	Hopefully help debug #10.

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

2018-05-30  João Távora  <joaotavora@gmail.com>

	* eglot.el (Version): Bump to 0.7

2018-05-28  João Távora  <joaotavora@gmail.com>

	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.

2018-05-28  João Távora  <joaotavora@gmail.com>

	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.

2018-05-27  João Távora  <joaotavora@gmail.com>

	On reconnection, ignore errors of shutting down hung server

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

2018-05-27  João Távora  <joaotavora@gmail.com>

	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.

2018-05-27  João Távora  <joaotavora@gmail.com>

	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.

2018-05-27  João Távora  <joaotavora@gmail.com>

	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.

2018-05-27  João Távora  <joaotavora@gmail.com>

	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.

2018-05-27  João Távora  <joaotavora@gmail.com>

	* eglot.el (Version): Bump to 0.6

2018-05-27  João Távora  <joaotavora@gmail.com>

	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.

2018-05-27  João Távora  <joaotavora@gmail.com>

	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.

2018-05-27  João Távora  <joaotavora@gmail.com>

	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.

2018-05-26  João Távora  <joaotavora@gmail.com>

	* eglot.el (Version): Bump to 0.5

2018-05-26  João Távora  <joaotavora@gmail.com>

	Another unstable test on Travis

	* eglot-tests.el (rls-hover-after-edit): Skip on travis.

2018-05-26  João Távora  <joaotavora@gmail.com>

	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.

2018-05-26  João Távora  <joaotavora@gmail.com>

	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.

2018-05-26  João Távora  <joaotavora@gmail.com>

	Add a new test.

	* eglot-tests.el (rls-hover-after-edit): Simplify.
	(rls-rename): New test.
	(rls-watches-files, rls-basic-diagnostics)
	(rls-hover-after-edit): Rename temp dir for better debugging.

2018-05-26  João Távora  <joaotavora@gmail.com>

	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.

2018-05-26  João Távora  <joaotavora@gmail.com>

	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.

2018-05-26  João Távora  <joaotavora@gmail.com>

	Simpify eglot--server-receive

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

2018-05-26  João Távora  <joaotavora@gmail.com>

	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.

2018-05-26  João Távora  <joaotavora@gmail.com>

	New RLS tests

	* eglot-tests.el (eglot--wait-for): Rework macro.
	(dummy): Delete test.
	(rls-watches-files): Rework test.
	(rls-basic-diagnostics, rls-hover-after-edit): New tests.

2018-05-24  Josh Elsasser  <jelsasser@appneta.com>

	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.

2018-05-24  Josh Elsasser  <jelsasser@appneta.com>

	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.

2018-05-24  Josh Elsasser  <jelsasser@appneta.com>

	Introduce eglot--debug for unimportant messages

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

2018-05-24  Josh Elsasser  <jelsasser@appneta.com>

	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.

2018-05-24  João Távora  <joaotavora@gmail.com>

	Merge branch 'use-eieio-server-defclass'

	(using regular git merge)

2018-05-24  João Távora  <joaotavora@gmail.com>

	Disable file-watching tests on Travis

	For some reason it doesn't work very well with inotify.

	* .travis.yml (TRAVIS_TESTING): Set to true

	* eglot-tests.el (rls-watches-files): skip test if TRAVIS_TESTING is
	 true.

2018-05-24  João Távora  <joaotavora@gmail.com>

	Rework eglot-tests.el for better debuggability

	* eglot-tests.el (eglot--with-timeout): Renamed from 
	eglot--with-test-timeout.
	(eglot--call-with-timeout): Rework.
	(eglot--wait-for): Accept TIMEOUT arg.
	(auto-detect-running-server, auto-reconnect, rls-watches-files)
	(basic-completions, hover-after-completions): Use
	eglot--with-test-timeout.
	(rls-watches-files): Pass TIMEOUT to eglot--wait-for

2018-05-24  João Távora  <joaotavora@gmail.com>

	Increase test timeout in hopes of convincing Travis CI

	* eglot-tests.el (rls-watches-files): Increase timeout

2018-05-24  João Távora  <joaotavora@gmail.com>

	Add a complex RLS test

	* eglot-tests.el (eglot--call-with-dirs-and-files): When ensuring 
	cleaning up, really ensure that no leftovers are left. Even if server
	shutdown fails.
	(eglot--sniffing, eglot--wait-for): New testing macros.
	(rls-watches-files): New test.

2018-05-22  João Távora  <joaotavora@gmail.com>

	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.

2018-05-22  João Távora  <joaotavora@gmail.com>

	Introduce new API methods for experimental clients to use

	Should help Josh Elsasser implement pull request #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.

2018-05-22  João Távora  <joaotavora@gmail.com>

	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

2018-05-22  João Távora  <joaotavora@gmail.com>

	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 #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.

2018-05-21  João Távora  <joaotavora@gmail.com>

	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.

2018-05-20  João Távora  <joaotavora@gmail.com>

	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

2018-05-20  João Távora  <joaotavora@gmail.com>

	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.

2018-05-20  João Távora  <joaotavora@gmail.com>

	Tweak tests, hopefully stabilize pyls tests on Travis

	* eglot-tests.el (basic-completions, hover-after-completions)
	(auto-detect-running-server, autoreconnect): Swap order of 
	eglot--with-dirs-and-files and eglot--with-dirs-and-files.
	(eglot--with-dirs-and-files): Adjust indent spec.

2018-05-19  João Távora  <joaotavora@gmail.com>

	Travis now runs python-language-server tests

	* travis.yml: Use virtualenv/pip/python-language-server

2018-05-19  João Távora  <joaotavora@gmail.com>

	* eglot.el (Version): Bump to 0.4

2018-05-19  João Távora  <joaotavora@gmail.com>

	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.

2018-05-19  João Távora  <joaotavora@gmail.com>

	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.

2018-05-19  João Távora  <joaotavora@gmail.com>

	Robustness fixes for the request mechanism

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

2018-05-19  João Távora  <joaotavora@gmail.com>

	Check capabilities before sending :completionItem/resolve

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

2018-05-19  João Távora  <joaotavora@gmail.com>

	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

2018-05-19  João Távora  <joaotavora@gmail.com>

	* eglot.el (eglot-clear-status): Remember to update modeline

2018-05-19  João Távora  <joaotavora@gmail.com>

	Close #4: 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.

2018-05-19  João Távora  <joaotavora@gmail.com>

	If we're going to send rootPath, better send an absolute one

	javascript-typescript-langserver complained.

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

2018-05-19  João Távora  <joaotavora@gmail.com>

	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

2018-05-19  João Távora  <joaotavora@gmail.com>

	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.

2018-05-17  João Távora  <joaotavora@gmail.com>

	* eglot.el (Version): Bump to 0.3

2018-05-17  João Távora  <joaotavora@gmail.com>

	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.

2018-05-17  João Távora  <joaotavora@gmail.com>

	Fix eglot--error and eglot--message helpers

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

2018-05-17  João Távora  <joaotavora@gmail.com>

	* eglot.el (eglot--lambda): Add missing indent spec.

2018-05-17  João Távora  <joaotavora@gmail.com>

	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.

2018-05-17  João Távora  <joaotavora@gmail.com>

	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.

2018-05-15  João Távora  <joaotavora@gmail.com>

	Add PHP's php-language-server to built-in guessed servers

	Closes #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.

2018-05-15  João Távora  <joaotavora@gmail.com>

	Bump version and slightly improve doc

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

	* README.md: Update

2018-05-15  João Távora  <joaotavora@gmail.com>

	Merge remote-tracking branch 'elpa/externals/eglot'

2018-05-14  Stefan Monnier  <monnier@iro.umontreal.ca>

	* eglot-tests.el: Fix copyright

2018-05-14  João Távora  <joaotavora@gmail.com>

	More quietly report request timeouts as events

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

2018-05-14  João Távora  <joaotavora@gmail.com>

	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.

2018-05-14  João Távora  <joaotavora@gmail.com>

	Fix a ridiculous bug when generating transient projects

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

2018-05-14  João Távora  <joaotavora@gmail.com>

	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.

2018-05-14  João Távora  <joaotavora@gmail.com>

	Remove an unused variable

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

2018-05-14  João Távora  <joaotavora@gmail.com>

	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.

2018-05-14  João Távora  <joaotavora@gmail.com>

	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.

2018-05-14  João Távora  <joaotavora@gmail.com>

	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

2018-05-14  João Távora  <joaotavora@gmail.com>

	Fix automatic project creation

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

2018-05-13  João Távora  <joaotavora@gmail.com>

	Work with any old directory, no formal project needed

	Actually, uses a "transient project" which project-current returns if 
	desperate.

	* README.md: Update

	* eglot.el (eglot--current-process)
	(eglot--current-process-or-lose): Simplify.
	(eglot): Maybe prompt user for project.

2018-05-13  João Távora  <joaotavora@gmail.com>

	Ask server for textDocument/signatureHelp if it supports it

	* eglot.el (eglot--client-capabilities): Capable of signature Help.
	(eglot--sig-info): Helper for eglot-eldoc-function.
	(eglot-eldoc-function): Send textDocument/signatureHelp

	* README.md: Update to mention textDocument/signatureHelp

2018-05-13  João Távora  <joaotavora@gmail.com>

	Fix copyright header. Obviously not since 2003

2018-05-13  João Távora  <joaotavora@gmail.com>

	Reinstate the catch/loop/throw idiom in eglot-request

	This reverts parts of commit 29f58a6514aec28e4e6df9611e4f58c7289e3cc6.

	Unfortunately, this may cause problems when calling the error callbacks
	directly as in the process sentinel. In that particular scenario the
	accept-process-output won't have return, because no output has is being
	handled. Consequently, if we're unlucky, we have another 30 seconds to
	way before the flag is tested and the loop exits.

	* eglot.el (eglot-request): Use catch/loop/throw again

2018-05-12  João Távora  <joaotavora@gmail.com>

	Tweak README.md

	* README.md (Commands and keybindings): New section.

2018-05-12  João Távora  <joaotavora@gmail.com>

	New command eglot-help-at-point and a README update

	* README.md (Commands and keybindings): New section.

	* eglot.el (eglot-eldoc-function): Use eglot--hover-info. Don't care
	about kind in highlightSymbol
	(eglot--hover-info): New helper.
	(eglot-help-at-point): New command.

2018-05-11  João Távora  <joaotavora@gmail.com>

	Get rid of catch/loop/throw idiom (suggested by Thien-Thi Nguyen)

	* eglot.el (eglot--process-filter)
	(eglot--request): Replace catch/loop/throw idiom with let/test/loop/set

2018-05-11  João Távora  <joaotavora@gmail.com>

	Rework autoreconnection logic

	Can't be a global var, has to be a per process thing.

	* eglot.el (eglot-autoreconnect): New defcustom
	(eglot--inhibit-autoreconnect): Renamed from
	eglot--inhibit-autoreconnect
	(eglot--connect): Run autoreconnect timer here.
	(eglot--inhibit-auto-reconnect): Removed.
	(eglot--process-sentinel): Don't run timer here. Rework.
	(eglot, eglot-reconnect): Pass INTERACTIVE to eglot--connect.

2018-05-11  João Távora  <joaotavora@gmail.com>

	Duh, json.el is in Emacs, and json-mode.el is useless here

	* eglot.el (Package-Requires): Don't require json-mode

2018-05-10  João Távora  <joaotavora@gmail.com>

	Prepare to sumbit to GNU ELPA

	* eglot.el: Update headers.

2018-05-10  João Távora  <joaotavora@gmail.com>

	(eglot--xref-make): Fix Use of cl-destructuring-bind.

2018-05-10  João Távora  <joaotavora@gmail.com>

	Misc little adjustments for readability

	* eglot.el (eglot--log-event, eglot--process-receive)
	(eglot--xref-make, xref-backend-apropos): Use cl-destructuring-bind.
	(eglot--server-window/showMessageRequest): Compact.

2018-05-10  João Távora  <joaotavora@gmail.com>

	Support :completionItem/resolve

	This is quite handy with company and company-quickhelp

	* eglot.el (eglot-completion-at-point): Send
	:completionItem/resolve

	* README.md: Mention completionItem/resolve

2018-05-10  João Távora  <joaotavora@gmail.com>

	Rename functions. eglot--request is now the synchronous one

	* eglot.el (eglot--connect, eglot-shutdown)
	(xref-backend-identifier-completion-table)
	(xref-backend-definitions, xref-backend-references)
	(xref-backend-apropos, eglot-completion-at-point, eglot-rename): Call
	eglot--request.
	(eglot--async-request): Renamed from eglot--request.
	(eglot--request): Renamed from eglot--sync-request.
	(eglot--TextDocumentIdentifier)
	(eglot--VersionedTextDocumentIdentifier)
	(eglot--TextDocumentPositionParams, eglot--TextDocumentItem): Renamed
	from the more verbose eglot--current-buffer-* variante.
	(eglot-rename, eglot-imenu, eglot-eldoc-function)
	(eglot-completion-at-point, xref-backend-definitions)
	(xref-backend-identifier-at-point)
	(eglot--signal-textDocument/didSave)
	(xref-backend-identifier-completion-table)
	(eglot--signal-textDocument/didClose)
	(eglot--signal-textDocument/didOpen)
	(eglot--signal-textDocument/didChange): Use new function names.

2018-05-10  João Távora  <joaotavora@gmail.com>

	Friendlier M-x eglot

	* eglot.el (eglot-server-programs): Renamed from eglot-executables
	(eglot--interactive): Redesign
	(eglot): Docstring.
	(eglot--connect): Now a synchronous gig.
	(eglot--interactive): Friendlier.
	(eglot): Improve docstring, rework a bit.
	(eglot-reconnect): Rework a bit.
	(eglot--process-sentinel): Insert "byebye" ruler here.

	* README.md: Update

2018-05-10  João Távora  <joaotavora@gmail.com>

	Improve eglot-eldoc-function

	Use the :range key if the server provided it. Also simplify code with a
	new eglot--with-lsp-range macro.

	* eglot.el (eglot--format-markup): Tweak comment.
	(eglot--with-lsp-range): New helper macro.
	(eglot--server-textDocument/publishDiagnostics)
	(eglot--apply-text-edits): Use it.
	(eglot-eldoc-function): Use range if server provides it.

2018-05-10  João Távora  <joaotavora@gmail.com>

	Reduce log chatter

	* eglot.el (eglot--process-sentinel, eglot--request): Use 
	eglot--log-event.
	(eglot--log-event): Print "message" if type unknown.
	(eglot--debug, eglot--log): Remove.
	(eglot--server-window/logMessage, eglot--server-telemetry/event): Make
	noops.
	(eglot--call-deferred): Also reduce chatter here.

2018-05-10  João Távora  <joaotavora@gmail.com>

	Only call deferred actions after a full message has been received

	Otherwise it can be quite wasteful.

	* eglot.el (eglot--process-filter): Don't eglot--call-deferred here.
	(eglot--process-receive): Do it here.

2018-05-10  João Távora  <joaotavora@gmail.com>

	Resist server failure during synchronous requests

	Calling the error handler unprotected could lead to the rest of the 
	sentinel not running at all. This defeated the auto-reconnection in 
	Rust, for example.

	* eglot.el (eglot--process-sentinel): Rework.

2018-05-10  João Távora  <joaotavora@gmail.com>

	Simplify mode-line updating logic

	* eglot.el (eglot--define-process-var): Simplify.
	(eglot--short-name, eglot--spinner, eglot--status): Don't auto-update
	mode-line.
	(eglot--process-receive): Update it here.

2018-05-10  João Távora  <joaotavora@gmail.com>

	More RLS-specifics: update Flymake diags when indexing done

	RLS could/should report diagnostics for every opened file, even if there
	aren't any problems. Because it doesn't, loop for every buffer managed
	by the process and call eglot--current-flymake-report-fn

	* eglot.el
	(eglot--server-window/progress): Call eglot--current-flymake-report-fn

2018-05-10  João Távora  <joaotavora@gmail.com>

	Adjust flymake integration

	When opening a new file (signalling textDocument/didOpen) it makes sense
	to call the flymake callback (if it exists) with no diagnostics, just to
	get rid of that "Wait", since we don't know if later in this callback
	cycle the server will ever report new diagnostics.

	* eglot.el (eglot--managed-mode): Don't call flymake-mode or eldoc-mode
	(eglot--managed-mode-hook): Add them here.
	(eglot--maybe-activate-editing-mode): Call flymake callback.
	(eglot--server-textDocument/publishDiagnostics): Set unreported 
	diagnostics to nil if invoking callback.

2018-05-10  João Távora  <joaotavora@gmail.com>

	Shorten summary line to appease package-lint.el

2018-05-10  João Távora  <joaotavora@gmail.com>

	More correctly setup rust-mode-related autoloads

	By autoloading the add-hook form and the eglot--setup-rls-idiosyncrasies 
	definition, a user can start rust-mode without loading eglot.el along 
	with it.

	* eglot.el (rust-mode-hook)
	(eglot--setup-rls-idiosyncrasies): Wrap in autoloaded progn.

2018-05-09  João Távora  <joaotavora@gmail.com>

	Add minimal headers, commentary and autoloads

2018-05-09  João Távora  <joaotavora@gmail.com>

	Fancier RLS spinner

	* eglot.el (eglot--mode-line-format): Use (nth 3) of eglot--spinner.
	(eglot--server-window/progress): Save detail message in spinner.

2018-05-09  João Távora  <joaotavora@gmail.com>

	New "deferred requests" that wait until server is ready

	Calling textDocument/hover or textDocument/documentHighlight before the
	server has had a chance to process a textDocument/didChange is normally
	useless. The matter is worse for servers like RLS which only become
	ready much later and send a special notif for it (see 
	https://github.com/rust-lang-nursery/rls/issues/725).

	So, keeping the same coding style add a DEFERRED arg to eglot--request 
	that makes it maybe not run the function immediately. Add a bunch of 
	logic for probing readiness of servers.

	* README.md: Update

	* eglot.el (eglot--deferred-actions): New process-local var.
	(eglot--process-filter): Call deferred actions.
	(eglot--request): Rewrite.
	(eglot--sync-request): Rewrite.
	(eglot--call-deferred, eglot--ready-predicates)
	(eglot--server-ready-p): New helpers.
	(eglot--signal-textDocument/didChange): Set spinner and call deferred
	actions.
	(eglot-completion-at-point): Pass DEFERRED to eglot-sync-request.
	(eglot-eldoc-function): Pass DEFERRED to eglot-request
	(eglot--rls-probably-ready-for-p): New helper.
	(rust-mode-hook): Add eglot--setup-rls-idiosyncrasies
	(eglot--setup-rls-idiosyncrasies): New helper.

2018-05-09  João Távora  <joaotavora@gmail.com>

	Call eglot-eldoc-function after completion finishes

	* eglot.el (eglot-completion-at-point): Call eglot-eldoc-function after
	completion finishes.

2018-05-09  João Távora  <joaotavora@gmail.com>

	Simplify `eglot-shutdown`

	* eglot.el (eglot, eglot-reconnect)
	(eglot--managed-mode): Call new eglot-shutdown.
	(eglot-shutdown): Simplify.
	(eglot--process-sentinel): Also call error functions.
	(eglot--process-filter): Reindent.

2018-05-09  João Távora  <joaotavora@gmail.com>

	Get rid of eglot-mode

	* eglot.el (eglot--managed-mode): Don't call eglot-mode. When shutting
	down, offer to kill server.
	(mode-line-misc-info): Update to use eglot--managed-mode

2018-05-09  João Távora  <joaotavora@gmail.com>

	Simplify eglot--signal-textDocument/didChange

	* eglot.el (eglot--recent-before-changes)
	(eglot--recent-after-changes): Delete.
	(eglot--recent-changes): New var.
	(eglot--outstanding-edits-p, eglot--before-change)
	(eglot--after-change): Rewrite.
	(eglot--signal-textDocument/didChange): Rewrite.
	(eglot--signal-textDocument/didOpen): Initialize buffer-local
	eglot--recent-changes here.

2018-05-09  João Távora  <joaotavora@gmail.com>

	Fix odd bugs and tweak stuff

	* eglot.el (eglot--log-event): Insert before markers.
	(eglot--process-receive): Shave lines.
	(xref-backend-references): Use cl-return-from.
	(eglot--log-event): Simplify
	(eglot-completion-at-point): Saner annotation

2018-05-08  João Távora  <joaotavora@gmail.com>

	Update README

2018-05-08  João Távora  <joaotavora@gmail.com>

	Support workspace/applyEdit

	* eglot.el (eglot--reply): Don't send result or error if not provided.
	(eglot--server-workspace/applyEdit): New server method.
	(eglot--apply-text-edits): Rework.
	(eglot--apply-workspace-edit): New helper.
	(eglot-rename): Simplify.

2018-05-08  João Távora  <joaotavora@gmail.com>

	Support textDocument/rename

	* README.md: Mention rename support.

	* eglot.el (eglot--uri-to-path): Handle uri hidden in keywords.
	(eglot--apply-text-edits): New helper.
	(eglot-rename): New interactive command.
	(eglot--client-capabilities): Add rename capability.

2018-05-08  João Távora  <joaotavora@gmail.com>

	Reasonable textDocument/documentHighlight support

	* README.md: Update.

	* eglot.el (eglot--current-buffer-TextDocumentPositionParams): New 
	helper.
	(xref-backend-identifier-completion-table): Refactor a bit.
	(xref-backend-identifier-at-point): Use when-let and 
	eglot--current-buffer-TextDocumentPositionParams
	(xref-backend-definitions, xref-backend-references): Refactor a bit.
	(eglot-completion-at-point): Use 
	eglot--current-buffer-TextDocumentPositionParams
	(eglot-eldoc-function): Rewrite to handle 
	textDocument/documentHighlight.
	(eglot--highlights): New variable.
	(eglot--client-capabilities): Update with support for documentHighlight.

2018-05-08  João Távora  <joaotavora@gmail.com>

	Fix odd bugs

	* eglot.el (eglot--process-receive, eglot--request): Set status to 
	actual error message.
	(eglot--managed-mode): Manage imenu-create-index-function correctly.
	(eglot--mode-line-format): Print error status.

2018-05-08  João Távora  <joaotavora@gmail.com>

	When killing server, always wait 3 seconds

	* eglot.el (eglot--request): Accept TIMEOUT param.

2018-05-08  João Távora  <joaotavora@gmail.com>

	Try to fix some textDocument/completion bugs

	* eglot.el (eglot-completion-at-point): Rework slightly.

2018-05-07  João Távora  <joaotavora@gmail.com>

	Half-decent imenu support via textDocument/documentSymbol

	* README.md: Update capability

	* eglot.el (eglot--lsp-position-to-point): New function.
	(eglot--managed-mode): Handle imenu-create-index-function.
	(eglot--server-textDocument/publishDiagnostics): Use 
	eglot--lsp-position-to-point.
	(eglot-imenu): New function.
	(eglot--client-capabilities): Capable of documentSymbol.

2018-05-07  João Távora  <joaotavora@gmail.com>

	Only request stuff that server says it's capable of

	* eglot.el (eglot--server-capable): New helper.
	(eglot-xref-backend)
	(xref-backend-identifier-completion-table)
	(xref-backend-references, xref-backend-apropos)
	(eglot-completion-at-point, eglot-eldoc-function): Use it.

2018-05-07  João Távora  <joaotavora@gmail.com>

	Simplify mode-line code with a helper.

	* eglot.el (eglot--mdoe-line-props): New helper.
	(eglot--mode-line-format): Use it.

2018-05-07  João Távora  <joaotavora@gmail.com>

	Get rid of eglot--buffer-open-count

	Hasn't really proved useful yet.

	* eglot.el (eglot--buffer-open-count): Remove.
	(eglot--signal-textDocument/didOpen)
	(eglot--signal-textDocument/didClose): Simplify.

2018-05-07  João Távora  <joaotavora@gmail.com>

	Get rid of eglot--special-buffer-process

	Hasn't really proved useful yet.

	* eglot.el (eglot--special-buffer-process): Delete.
	(eglot--current-process): Simplify.
	(eglot--events-buffer): Simplify.

2018-05-07  João Távora  <joaotavora@gmail.com>

	* eglot.el: Reformat to shave off some lines.

2018-05-07  João Távora  <joaotavora@gmail.com>

	Fix bug in hover support

	* eldoc.el (eglot-eldoc-function): Use eglot--format-markup.
	(subr-x): Require it.
	(eglot--format-markup): Pacify byte-compiler.

2018-05-07  João Távora  <joaotavora@gmail.com>

	Clean up client capabilities

	* eglot.el (eglot--client-capabilities): Clean up client capabilities.

2018-05-07  João Távora  <joaotavora@gmail.com>

	Half-baked textDocument/hover support

	* eglot.el (eglot--format-markup): New helper.
	(eglot--managed-mode): Handle eldoc-documentation-function.
	(eglot-eldoc-function): New function.

	* README.md: update

2018-05-07  João Távora  <joaotavora@gmail.com>

	Tweak the async request engine.

	* eglot.el (eglot--request): Return the continuation id.
	(eglot--lambda): Move up in the file.
	(eglot--sync-request): Use a catch-tag.

2018-05-07  João Távora  <joaotavora@gmail.com>

	Explain why didOpen on after-revert-hook is a bad idea

	The reason is that the global find-file-hook is called again, and that 
	already does the didOpen. Too many didOpen's would be bad.

	* eglot.el (eglot--managed-mode): Remove commented lines.

2018-05-07  João Távora  <joaotavora@gmail.com>

	Half-decent completion support

	* README.md: Update.

	* eglot.el (eglot--kind-names): New variable.
	(eglot--managed-mode): Handle completion-at-point-functions.
	(eglot-completion-at-point): New function.

2018-05-07  João Távora  <joaotavora@gmail.com>

	Solve another textDocument/didChange bug

	* eglot.el (eglot--signal-textDocument/didChange): Rework a bit.
	(eglot--after-change): Store the actual after-text in the 
	eglot--recent-after-changes.

2018-05-07  João Távora  <joaotavora@gmail.com>

	Add (dummy) tests and Travis CI integration

	* .travis.yml: New file.

	* Makefile: New file.

	* README.md: Add Travis badge.

	* eglot-tests.el: New file with a dummy test.

2018-05-07  João Távora  <joaotavora@gmail.com>

	Support javascript's javascript-typescript-langserver

	* README.md: Improve a bit

	* eglot.el (eglot--make-process): Take MANAGED-MAJOR-MODE arg
	(eglot-executables): Add basic javascript support.
	(eglot--connect): Pass mode to eglot--make-process
	(eglot--interactive): Check that guessed command is a listp.
	(eglot): Minor improvement to message.
	(eglot--current-buffer-TextDocumentItem): Guess language from mode 
	symbol.

2018-05-07  João Távora  <joaotavora@gmail.com>

	Increase request timeout length to 10 seconds

	* eglot.el (eglot-request-timeout): New var.
	(eglot--request): Use it.

2018-05-07  João Távora  <joaotavora@gmail.com>

	Workaround two suspected Emacs bugs

	* eglot.el (eglot--process-filter): Use a proper unique tag. Use 
	unwind-protect.
	(eglot--sync-request): Rework.
	(eglot--server-client/registerCapability): Use a proper done tag.

2018-05-07  João Távora  <joaotavora@gmail.com>

	ETOOMANYLAMBDAS

	* eglot.el (eglot--sync-request): Remove a lambda.

2018-05-07  João Távora  <joaotavora@gmail.com>

	Fix the odd bug here and there

	* eglot.el (eglot--connect): Activate editing mode where applicable
	here.
	(eglot, eglot-reconnect): Not here or here.
	(eglot--process-sentinel): Catch auto-reconnect errors.
	(eglot--notify): Dont send 'id=null', it messes up js's lsp
	(eglot--reply): Do send id here.
	(eglot--log-event): Simplify protocol. Complexify implementation.
	(eglot--process-receive, eglot--process-send): Simplify eglot--log-event
	call.
	(eglot--request, eglot--notify, eglot--reply): Simplify 
	eglot--process-send call
	(eglot--server-client/registerCapability): Fix bug when replying with
	wrong id.
	(eglot--xref-reset-known-symbols): Take DUMMY arg.

2018-05-07  João Távora  <joaotavora@gmail.com>

	Half-decent xref support

	* eglot.el
	(eglot--xref-known-symbols): New hacky var.
	(eglot--xref-reset-known-symbols): New helper.
	(xref-find-definitions, xref-find-references): Advise after to call the
	new helper.
	(xref-backend-identifier-completion-table): Rework.
	(eglot--xref-make): New helper.
	(xref-backend-definitions): Use it.
	(xref-backend-references, xref-backend-apropos): Implement.
	(eglot--obj): Add a debug spec.
	(eglot--lambda): Add debug spec.

2018-05-05  João Távora  <joaotavora@gmail.com>

	Very basic xref support

	* eglot.el (eglot--pos-to-lisp-position): Move up.
	(eglot--mapply, eglot--lambda): New helpers.
	(eglot--uri-to-path): New helper.
	(eglot--managed-mode): Manage xref-backend-functions.
	(eglot-xref-backend): New function.
	(xref-backend-identifier-completion-table)
	(xref-backend-identifier-at-point)
	(xref-backend-definitions): New methods.
	(xref-backend-references)
	(xref-backend-apropos): New methods, still unimplemented.

2018-05-05  João Távora  <joaotavora@gmail.com>

	New helper eglot--sync-request

	This should help with xref definitions

	* eglot.el (eglot--request): Rework a bit. Continuation is always 
	cleared on timeout, regardless of user-supplied fn.
	(eglot--sync-request): New function.
	(eglot--process-receive): watch out for vector results.

2018-05-05  João Távora  <joaotavora@gmail.com>

	Cleanup mistake with TextDocumentItem and TextDocumentIdentifier

	Also introduce eglot--path-to-uri

	* eglot.el (eglot--path-to-uri): Rename from eglot--uri and rework.
	(eglot--connect): Use it.
	(eglot--current-buffer-TextDocumentIdentifier): New function.
	(eglot--current-buffer-VersionedTextDocumentIdentifier)
	(eglot--signal-textDocument/didChange)
	(eglot--signal-textDocument/didClose)
	(eglot--signal-textDocument/willSave)
	(eglot--signal-textDocument/didSave): Use it.

2018-05-04  João Távora  <joaotavora@gmail.com>

	Handle dynamic registration in general (but nothing specific yet)

	* eglot.el (eglot--server-client/registerCapability): Implement.
	(eglot--register-workspace/didChangeWatchedFiles): Dummy registrator.

2018-05-04  João Távora  <joaotavora@gmail.com>

	Honour textDocumentSync

	* eglot.el (eglot--signal-textDocument/didChange): Honour
	textDocumentSync

2018-05-04  João Távora  <joaotavora@gmail.com>

	Be quite explicit about our lack of capabilities right now

	* eglot.el (eglot--client-capabilities): Spread out.

2018-05-04  João Távora  <joaotavora@gmail.com>

	Use rootUri instead of rootPath

	* eglot.el (eglot--connect)
	(eglot--current-buffer-VersionedTextDocumentIdentifier): Use eglot--uri.
	(eglot--uri): New function.

2018-05-04  João Távora  <joaotavora@gmail.com>

	Make reported capabilities into its own function

	* eglot.el (eglot--client-capabilities): New function.
	(eglot--connect): Use it.

2018-05-04  João Távora  <joaotavora@gmail.com>

	Include source info in diagnostics

	* eglot.el (eglot--server-textDocument/publishDiagnostics): Include
	source info.

2018-05-04  João Távora  <joaotavora@gmail.com>

	Reply to client/registerCapability (don't handle it yet)

	* eglot.el (eglot--server-client/registerCapability): New function.

2018-05-04  João Távora  <joaotavora@gmail.com>

	Handle requests from server correctly

	* eglot.el (eglot--process-receive): Redesign.
	(eglot--process-send): Take REPLY arg. Discover if message is error.
	(eglot--reply): new function
	(eglot--log-event): Tweak docstring.
	(eglot--process-receive): Reply with -32601 if unimplemented.
	(eglot--server-window/showMessageRequest)
	(eglot--server-client/registerCapability): Use eglot--reply

2018-05-04  João Távora  <joaotavora@gmail.com>

	Don't auto-reconnect if last attempt lasted less than 3 seconds

	* eglot.el (eglot--inhibit-auto-reconnect): New var.
	(eglot--process-sentinel): Use it.

2018-05-04  João Távora  <joaotavora@gmail.com>

	Workaround RLS's regusal to treat nil as empty json object

	* eglot.el (eglot--connect): Use dummy params.

2018-05-04  João Távora  <joaotavora@gmail.com>

	eglot-editing-mode becomes eglot--managed-mode

	* eglot.el (eglot--sentinel): Use eglot--managed-mode.
	(eglot--managed-mode-map): Renamed from eglot-editing-mode-map.
	(eglot--managed-mode): Renamed from eglot-editing-mode.
	(eglot-mode): Simplify.
	(eglot--buffer-managed-p): New function.
	(eglot--maybe-activate-editing-mode): Simplify.

2018-05-04  João Távora  <joaotavora@gmail.com>

	Make M-x eglot's interactive spec a separate function

	* eglot.el (eglot--interactive): New function.
	(eglot): Rework a little.

2018-05-04  João Távora  <joaotavora@gmail.com>

	When user declines to reconnect, first quit existing server

	* eglot.el (eglot): Rework reconnection logic.

2018-05-04  João Távora  <joaotavora@gmail.com>

	Connect to LSP server via TCP

	* eglot.el (eglot--make-process): Rename from eglot-make-local-process.
	(eglot): Fix docstring and rework.
	(eglot--bootstrap-fn): Remove
	(eglot--contact): New process-local var.
	(eglot--connect): Take CONTACT arg.
	(eglot--reconnect): Rework.

2018-05-04  João Távora  <joaotavora@gmail.com>

	More correctly keep track of didOpen/didClose per buffer

	* eglot.el (eglot--buffer-open-count): Now a process-local var.
	(eglot--signal-textDocument/didOpen,
	eglot--signal-textDocument/didClose): Use it.

2018-05-04  João Távora  <joaotavora@gmail.com>

	Fix mode-line mouse-clicks from outside selected window

	* eglot.el (eglot--mode-line-call): New helper.
	(eglot--mode-line-format): Use it.

2018-05-04  João Távora  <joaotavora@gmail.com>

	* eglot.el (eglot--process-receive): Skip null method notifs.

2018-05-04  João Távora  <joaotavora@gmail.com>

	Update README.md

2018-05-03  João Távora  <joaotavora@gmail.com>

	Trim some edges and add a bunch of boring RPC methods

	* eglot.el (eglot--connect): Don't call eglot--protocol-initialize.
	(eglot--process-filter): Break long line.
	(eglot--process-receive): Also pass id to handler if a server request.
	(eglot--log): New helper.
	(eglot-editing-mode): Manage before-revert-hook, after-revert-hook,
	before-save-hook, after-save-hook.
	(eglot--protocol-initialize): Removed.
	(eglot--server-window/showMessage): Simplify.
	(eglot--server-window/showMessageRequest)
	(eglot--server-window/logMessage, eglot--server-telemetry/event): New
	handlers.
	(eglot--signal-textDocument/willSave)
	(eglot--signal-textDocument/didSave): New notifications.
	(eglot--signal-textDocument/didOpen)
	(eglot--signal-textDocument/didClose): Check eglot--buffer-open-count.
	(eglot--buffer-open-count): New var.

2018-05-03  João Távora  <joaotavora@gmail.com>

	Fix a couple of Rust-related edge cases

	* eglot.el (eglot--server-window/progress): Allow other keys.
	(eglot--server-textDocument/publishDiagnostics): Allow :group in
	diagnostic spec.

2018-05-03  João Távora  <joaotavora@gmail.com>

	Fix textDocument/didChange

	* eglot.el (eglot-editing-mode): Manage before-change-functions.
	(eglot--recent-changes): Deleted.
	(eglot--recent-before-changes): New var.
	(eglot--recent-after-changes): Renamed from eglot--recent-changes.
	(eglot--pos-to-lsp-position, eglot--before-change): New helpers.
	(eglot--after-change): Rework.
	(eglot--signal-textDocument/didChange): Rework.

2018-05-03  João Távora  <joaotavora@gmail.com>

	Rename RPC methods for clarity

	* eglot.el (eglot--process-receive): Search for RPC server methods under
	`eglot--server-'
	(eglot-editing-mode, eglot--maybe-activate-editing-mode): Use new signal
	names.
	(eglot--server-window/showMessage): Rename from 
	eglot--window/showMessage.
	(eglot--server-textDocument/publishDiagnostics): Renamed from 
	eglot--textDocument/publishDiagnostics.
	(eglot--current-buffer-versioned-identifier): Remove.
	(eglot--current-buffer-VersionedTextDocumentIdentifier): Use 
	eglot--versioned-identifier.
	(eglot--signal-textDocument/didChange): Renamed from 
	eglot--maybe-signal-didChange.
	(eglot--signal-textDocument/didOpen): Renamed from eglot--signalDidOpen.
	(eglot--signal-textDocument/didClose): Rename from 
	eglot--signalDidClose.
	(eglot-flymake-backend): Call eglot--signal-textDocument/didChange.
	(eglot--server-window/progress): Rename from eglot--window/progress.

2018-05-03  João Távora  <joaotavora@gmail.com>

	Reorganize file

	* eglot.el (eglot-mode-line): Move up.
	(eglot-make-local-process, eglot--all-major-modes, eglot--obj)
	(eglot--project-short-name, eglot--all-major-modes)
	(eglot-reconnect, eglot--maybe-activate-editing-mode)
	(eglot--protocol-initialize)
	(eglot--window/showMessage, eglot--current-flymake-report-fn)
	(eglot--unreported-diagnostics)
	(eglot--textDocument/publishDiagnostics, eglot--signalDidOpen)
	(eglot--signalDidClose): Move around.
	(eglot-quit-server): Renamed to eglot-shutdown.
	(eglot-shutdown): New function

2018-05-03  João Távora  <joaotavora@gmail.com>

	Delete two useless forward declarations

	* eglot.el (eglot-mode, eglot-editing-mode-map): Remove forward decls.

2018-05-03  João Távora  <joaotavora@gmail.com>

	Fix Flymake diagnostic positions

	It's better not to use flymake-diag-region here.

	* eglot.el (eglot--textDocument/publishDiagnostics): Calculate position
	by hand.

2018-05-03  João Távora  <joaotavora@gmail.com>

	Must re-announce didOpen after reconnect

	* eglot.el (eglot-reconnect): Also call 
	eglot--maybe-activate-editing-mode for all buffers.

2018-05-03  João Távora  <joaotavora@gmail.com>

	Fix another Flymake sync bug

	* eglot.el (eglot-flymake-backend): Only report unreported sometimes.
	(eglot--maybe-activate-editing-mode): Start flymake explicitly when
	didOpen.
	(eglot--textDocument/publishDiagnostics): No need to set 
	unreported-diagnostics to nil.
	(flymake): Require it.

2018-05-03  João Távora  <joaotavora@gmail.com>

	Make M-x eglot the main entry point

	* eglot.el (eglot-new-process): Removed
	(eglot): Rename from eglot-new-process.
	(eglot-editing-mode): Mention M-x eglot

	* README.md: Use M-x eglot

2018-05-03  João Távora  <joaotavora@gmail.com>

	Fix assorted bugs

	* eglot.el (eglot--special-buffer-process): Must be buffer-local.
	(eglot--define-process-var): Fix disaster waiting to happen.
	(eglot--process-receive): Explicitly pass PROC to 
	eglot--pending-continuations.
	(eglot--textDocument/publishDiagnostics): Clear unreported diagnostics

2018-05-03  João Távora  <joaotavora@gmail.com>

	Watch for files opened under umbrella of existing process

	* eglot.el (eglot--connect): Call success-fn with a proc.
	(eglot-reconnect): Adapt to new eglot--connect.
	(eglot-new-process): Call eglot--maybe-activate-editing-mode
	(eglot--maybe-activate-editing-mode): New function.
	(find-file-hook): Add it here.

2018-05-03  João Távora  <joaotavora@gmail.com>

	Multiple servers per project are possible

	A server manages a specific major-mode within a project.

	* eglot.el (eglot--processes-by-project): Add docstring.
	(eglot--current-process): Search new eglot--processes-by-project format.
	(eglot--major-mode): New variable.
	(eglot--moribund, eglot--project): Update docstring.
	(eglot--project-short-name, eglot--all-major-modes): New helpers.
	(eglot--connect): Rework.
	(eglot-new-process): Rework severely.
	(eglot--command-history): New variable.
	(eglot--process-sentinel): Use new eglot--processes-by-project. Update
	mode line.
	(eglot-editing-mode): Don't start processes, just suggest it.

2018-05-03  João Távora  <joaotavora@gmail.com>

	Appease checkdoc.el

	* eglot.el (eglot--process-send, eglot--next-request-id)
	(eglot--current-buffer-VersionedTextDocumentIdentifier)
	(eglot--current-buffer-TextDocumentItem)
	(eglot--after-change, eglot--signalDidOpen)
	(eglot--signalDidClose, eglot--maybe-signal-didChange): Add docstring.

2018-05-03  João Távora  <joaotavora@gmail.com>

	Simplify flymake integration

	And get rid of the ridiculous environment thingy

	* eglot.el (eglot--process-sentinel): Continuations are triplets.
	(eglot--environment-vars, eglot--environment): Remove.
	(eglot--process-receive): Simplify.
	(eglot--unreported-diagnostics): New variable.
	(eglot--textDocument/publishDiagnostics): Simplify.
	(eglot-flymake-backend): Report unreported diagnostics.

2018-05-03  João Távora  <joaotavora@gmail.com>

	Signal textDocument/didClose

	* eglot.el (eglot-editing-mode): Signal didClose.
	(eglot--signalDidClose): New.

2018-05-03  João Távora  <joaotavora@gmail.com>

	Rework connection restarting again

	Quitting a process removes it from the project.

	* eglot.el (eglot-editing-mode,eglot-mode): Forward declare.
	(eglot--project): New process-local var.
	(eglot--connect): Takes a project.
	(eglot-new-process): Rework.
	(eglot--sentinel): Remove proc from eglot--processes-by-project.

2018-05-03  João Távora  <joaotavora@gmail.com>

	Redesign and simplify parser

	Fix horrible bugs. This is the correct way.

	* eglot.el (eglot--process-filter): Redesign.

2018-05-02  João Távora  <joaotavora@gmail.com>

	Auto-reconnect on unexpected connection loss

	* eglot.el (eglot-reconnect): Only quit if indeed not quit already.
	(eglot-new-process): Burn the command in the bootstrap fn.
	(eglot--process-sentinel): Automatically reconnect if closed 
	unexpectedly.
	(eglot--warn): Also message to *Messages*

2018-05-02  João Távora  <joaotavora@gmail.com>

	Ready to start fixing flymake integration

	* eglot.el (eglot-editing-mode): Turn on flymake-mode.
	(eglot-flymake-backend): Always start by reporting no diagnostics.
	(eglot--textDocument/publishDiagnostics): No annoying message.

2018-05-02  João Távora  <joaotavora@gmail.com>

	Slightly more user friendly start

	* eglot.el (eglot-new-process): signal DidOpen for every file in
	project.
	(eglot-editing-mode): Offer to start process.

2018-05-02  João Távora  <joaotavora@gmail.com>

	Don't clutter UI with warnings

	* eglot.el (warnings): require it.
	(eglot--warn): set warning-minimum-level

2018-05-02  João Távora  <joaotavora@gmail.com>

	Rework commands for connecting and reconnecting

	* eglot.el (eglot--current-process-or-lose): Add doc.
	(eglot--command): Remove.
	(eglot--bootstrap-fn): New process-local variable.
	(eglot--connect): Redesign.
	(eglot-make-local-process): New function.
	(eglot-reconnect): New interactive command.
	(eglot-new-process): Redesign.
	(eglot--process-sentinel): Add doc.
	(eglot--protocol-initialize): Rework.
	(eglot--mode-line-format): Use eglot-reconnect.

2018-05-02  João Távora  <joaotavora@gmail.com>

	Less obstrusive flymake stuff for now

	* eglot.el (eglot--after-change, eglot-flymake-backend): Fix.

2018-05-02  João Távora  <joaotavora@gmail.com>

	Events buffer uses eglot-mode, source buffers use eglot-editing-mode

	* eglot.el (eglot--special-buffer-process): New var.
	(eglot--current-process): Consider eglot--special-buffer-process.
	(eglot-events-buffer): Use eglot-mode
	(eglot-editing-mode): New minor mode.
	(eglot-mode): Turns on eglot-editing-mode maybe.

2018-05-02  João Távora  <joaotavora@gmail.com>

	Change status to error everytime an error is found

	* eglot.el (eglot--process-receive): Also set error status.
	(eglot--request): Fix a compilation warning.

2018-05-02  João Távora  <joaotavora@gmail.com>

	Correctly report what we currently are capable of

	Which is almost nothing.

	* eglot.el (eglot--protocol-initialize): Clean up.

2018-05-02  João Távora  <joaotavora@gmail.com>

	Add eglot-clear-status interactive command

	* eglot.el (eglot-clear-status): New
	(eglot-forget-pending-continuations): Fix bug.
	(eglot--mode-line-format): Add link to eglot-clear-status.

2018-05-02  João Távora  <joaotavora@gmail.com>

	Auto update mode-line after setting some process properties

	* eglot.el (eglot--define-process-var): Rework.
	(eglot--short-name, eglot--spinner, eglot--status): Update mode-line 
	after setting it.

2018-05-02  João Távora  <joaotavora@gmail.com>

	Start experimenting with python

	* eglot.el (eglot-executables): Add pyls.

2018-05-02  João Távora  <joaotavora@gmail.com>

	Don't switch to possibly dead buffer in sentinel

	* eglot.el (eglot--process-sentinel): Don't with-current-buffer.

2018-05-02  João Távora  <joaotavora@gmail.com>

	Report server status in the mode-line

	* eglot.el (eglot--status): New var.
	(eglot--log-event): Try to be more useful for other stuff.
	(eglot--protocol-initialize): Set status to nil on successful connect.
	(eglot--window/showMessage): Set status to error if needed.
	(eglot--mode-line-format): Display status if serious.

2018-05-01  João Távora  <joaotavora@gmail.com>

	Implement spinners and RLS's window/progress

	* eglot.el (eglot--window/progress): New.
	(eglot--mode-line-format): Rework.
	(eglot--snpinner): New var.
	(compile): require it.

2018-05-01  João Távora  <joaotavora@gmail.com>

	Fix parser to accept multiple messages in one chunk

	* eglot.el (eglot--process-filter): Redesign slightly.
	(eglot--message-mark): Remove. don't need this.

2018-05-01  João Távora  <joaotavora@gmail.com>

	Lay groundwork for uniform treatment of network connections

	* eglot.el (eglot--connect): New helper.
	(eglot-new-process): Use it.
	(pcase): Require it.

2018-05-01  João Távora  <joaotavora@gmail.com>

	Doc fixes

	* eglot.el (eglot-mode-map): Move up before minor mode.

2018-05-01  João Távora  <joaotavora@gmail.com>

	* eglot.el (eglot-mode-map): Move up before minor mode.

2018-04-30  João Távora  <joaotavora@gmail.com>

	Start working on this again

	* eglot.el (url-util): Require it.
	(eglot--process-sentinel): pending continuations now are quads (added
	env).
	(eglot--process-filter): Unwind message markers correctly if handling
	fails.
	(eglot--obj): Simple macro.
	(eglot--log-event): Add some info to logged event.
	(eglot--environment-vars, eglot--environment): Helper vars.
	(eglot--process-receive): Improve.
	(eglot--process-send): Niver log.
	(eglot--request): Use eglot--obj. Add environment.
	(eglot--notify): New helper.
	(eglot--protocol-initialize): RLS must like file://
	(eglot--current-flymake-report-fn): New var.
	(eglot--textDocument/publishDiagnostics): Use flymake from Emacs 26.
	(eglot-mode): Proper minor mode.
	(eglot--recent-changes, eglot--versioned-identifier): New stuff.
	(eglot--current-buffer-versioned-identifier)
	(eglot--current-buffer-VersionedTextDocumentIdentifier)
	(eglot--current-buffer-TextDocumentItem, eglot--after-change)
	(eglot--signalDidOpen, eglot--maybe-signal-didChange): New stuff.
	(eglot-flymake-backend): More or less a flymake backend function.

2018-04-30  João Távora  <joaotavora@gmail.com>

	Fix mode line

	* eglot.el (mode-line-misc-info): conditionalize to eglot-mode

2018-04-30  João Távora  <joaotavora@gmail.com>

	Fix some byte-compilation warnings

2017-08-16  João Távora  <joaotavora@gmail.com>

	Overhaul async mechanism safety

2017-08-16  João Távora  <joaotavora@gmail.com>

	Simplify `eglot--protocol-initialize`

	* eglot.el (eglot--protocol-initialize): Simplify

2017-08-16  João Távora  <joaotavora@gmail.com>

	Experimental diagnostic overlays

2017-08-16  João Távora  <joaotavora@gmail.com>

	Minor cleanup

2017-08-16  JoÃ£o TÃ¡vora  <joaotavora@gmail.com>

	Cancel timeouts when process dies unexpectedly

2017-08-16  João Távora  <joaotavora@gmail.com>

	Organize a bit

2017-08-16  João Távora  <joaotavora@gmail.com>

	Improve `eglot--current-process'

2017-08-16  João Távora  <joaotavora@gmail.com>

	Handle notifications

2017-08-16  João Távora  <joaotavora@gmail.com>

	Introduce and use `eglot--current-process-or-lose'

2017-08-16  João Távora  <joaotavora@gmail.com>

	Add a mode-line construct and some minor fanciness

2017-08-16  João Távora  <joaotavora@gmail.com>

	Rename eglot--continuations eglot--pending-continuations

2017-08-16  João Távora  <joaotavora@gmail.com>

	Remove a couple of comments

2017-08-16  João Távora  <joaotavora@gmail.com>

	Initial commit

