anchor.diff:  (defparameter *root-path* (probe-file "."))
   (defparameter *language-id* "go")
   
  +(defparameter *log-stream* *error-output*)
  +
  +(defvar *workspaces* (make-hash-table :test 'equal))
   (defvar *response-methods* '())
  +
  +(defstruct workspace
  +  connection
  +  server-capabilities
  +  root
  +  language-id
  +  (file-version-table (make-hash-table)))
   
   (defmacro define-response-method (name (&rest vars) &body body)
     (alexandria:with-gensyms (params)
  
positive.code: (define-response-method |window/logMessage| (|type| |message|)
    (format *log-stream* "~A: ~A" |type| |message|))
  
  (defun text-document-item (workspace buffer)
    ({} "uri" (pathname-to-uri (lem:buffer-filename buffer))
        "languageId" (workspace-language-id workspace)
        "version" (gethash buffer (workspace-file-version-table workspace) 0)
        "text" (lem:points-to-string (lem:buffer-start-point buffer) (lem:buffer-end-point buffer))))
  
  (defun text-document-did-open (workspace buffer)
    (jsonrpc:notify (workspace-connection workspace)
                    "textDocument/didOpen"
                    ({} "textDocument" (text-document-item buffer))))
  
  (defun text-document-did-change (workspace buffer changes)
    )
  
  (defun start ()
    (let* ((connection (jsonrpc:make-client))
           (workspace (make-workspace :connection connection
                                      :root *root-path*
                                      :language-id *language-id*)))
      (dolist (response-method *response-methods*)
        (jsonrpc:expose connection (string response-method) response-method))
      (jsonrpc:client-connect (workspace-connection workspace)
                              :mode :tcp
                              :port 4389)
      (method-initialize workspace)
      (method-initialized workspace)
      workspace))
  
negative.code: (defun pathname-to-uri (pathname)
    (format nil "file://~A" pathname))
  
  (defun {} (&rest plist)
    (alexandria:plist-hash-table plist :test 'equal))
  
  (defun buffer-language-id (buffer)
    (declare (ignore buffer))
    *language-id*)
  
  (defun buffer-workspace (buffer)
    (gethash (buffer-language-id buffer) *workspaces*))
  
  (defun buffer-file-version (buffer)
    (gethash buffer (workspace-file-version-table (buffer-workspace buffer)) 0))
  
  (defun (setf buffer-file-version) (value buffer)
    (setf (gethash buffer (workspace-file-version-table (buffer-workspace buffer))) value))
  
  (defun workspace-client-capabilities ()
    ({} "applyEdit" 'yason:false
  