emacs-lsp / lsp-mode

Emacs client/library for the Language Server Protocol
https://emacs-lsp.github.io/lsp-mode
GNU General Public License v3.0
4.78k stars 884 forks source link

timeouts in lsp-haskell #3790

Closed 0x28 closed 1 year ago

0x28 commented 1 year ago

Thank you for the bug report

Bug description

When using lsp-execute-code-action emacs freezes for several seconds. Then the error message "Timeout while waiting for response. Method: textDocument/codeAction" is shown. lsp-rename has the same problem.

emacs version is 28.

Steps to reproduce

  1. Use lsp-start-plain
  2. Open a haskell project (e.g. https://github.com/0x28/lsp_test)
  3. Navigate to src/LspTest.sh
  4. Place point on inc
  5. M-x lsp-execute-code-action
  6. emacs hangs

Expected behavior

Code actions are shown and can be selected.

Which Language Server did you use?

haskell-language-server-1.8.0.0

OS

Linux

Error callstack

Debugger entered--Lisp error: (error "Timeout while waiting for response.  Method: textD...")
  error("Timeout while waiting for response.  Method: %s" "textDocument/codeAction")
  (progn (error "Timeout while waiting for response.  Method: %s" method))
  (if (and expected-time (< expected-time send-time)) (progn (error "Timeout while waiting for response.  Method: %s" method)))
  (while (not (or resp-error resp-result)) (catch 'lsp-done (accept-process-output nil (if expected-time (- expected-time send-time) 1))) (setq send-time (time-to-seconds (current-time))) (if (and expected-time (< expected-time send-time)) (progn (error "Timeout while waiting for response.  Method: %s" method))))
  (progn (lsp-request-async method params #'(lambda (res) (setq resp-result (or res :finished)) (throw 'lsp-done '_)) :error-handler #'(lambda (err) (setq resp-error err) (throw 'lsp-done '_)) :no-merge no-merge :mode 'detached :cancel-token :sync-request) (while (not (or resp-error resp-result)) (catch 'lsp-done (accept-process-output nil (if expected-time (- expected-time send-time) 1))) (setq send-time (time-to-seconds (current-time))) (if (and expected-time (< expected-time send-time)) (progn (error "Timeout while waiting for response.  Method: %s" method)))) (setq done\? t) (cond ((eq resp-result :finished) nil) (resp-result resp-result) ((lsp-json-error\? resp-error) (error (lsp:json-error-message resp-error))) ((lsp-json-error\? (cl-first resp-error)) (error (lsp:json-error-message (cl-first resp-error))))))
  (unwind-protect (progn (lsp-request-async method params #'(lambda (res) (setq resp-result (or res :finished)) (throw 'lsp-done '_)) :error-handler #'(lambda (err) (setq resp-error err) (throw 'lsp-done '_)) :no-merge no-merge :mode 'detached :cancel-token :sync-request) (while (not (or resp-error resp-result)) (catch 'lsp-done (accept-process-output nil (if expected-time (- expected-time send-time) 1))) (setq send-time (time-to-seconds (current-time))) (if (and expected-time (< expected-time send-time)) (progn (error "Timeout while waiting for response.  Method: %s" method)))) (setq done\? t) (cond ((eq resp-result :finished) nil) (resp-result resp-result) ((lsp-json-error\? resp-error) (error (lsp:json-error-message resp-error))) ((lsp-json-error\? (cl-first resp-error)) (error (lsp:json-error-message (cl-first resp-error)))))) (if done\? nil (lsp-cancel-request-by-token :sync-request)))
  (let* ((send-time (time-to-seconds (current-time))) (expected-time (and lsp-response-timeout (+ send-time lsp-response-timeout))) resp-result resp-error done\?) (unwind-protect (progn (lsp-request-async method params #'(lambda (res) (setq resp-result (or res :finished)) (throw 'lsp-done '_)) :error-handler #'(lambda (err) (setq resp-error err) (throw 'lsp-done '_)) :no-merge no-merge :mode 'detached :cancel-token :sync-request) (while (not (or resp-error resp-result)) (catch 'lsp-done (accept-process-output nil (if expected-time (- expected-time send-time) 1))) (setq send-time (time-to-seconds (current-time))) (if (and expected-time (< expected-time send-time)) (progn (error "Timeout while waiting for response.  Method: %s" method)))) (setq done\? t) (cond ((eq resp-result :finished) nil) (resp-result resp-result) ((lsp-json-error\? resp-error) (error (lsp:json-error-message resp-error))) ((lsp-json-error\? (cl-first resp-error)) (error (lsp:json-error-message (cl-first resp-error)))))) (if done\? nil (lsp-cancel-request-by-token :sync-request))))
  (if no-wait (lsp-notify method params) (let* ((send-time (time-to-seconds (current-time))) (expected-time (and lsp-response-timeout (+ send-time lsp-response-timeout))) resp-result resp-error done\?) (unwind-protect (progn (lsp-request-async method params #'(lambda (res) (setq resp-result ...) (throw ... ...)) :error-handler #'(lambda (err) (setq resp-error err) (throw ... ...)) :no-merge no-merge :mode 'detached :cancel-token :sync-request) (while (not (or resp-error resp-result)) (catch 'lsp-done (accept-process-output nil (if expected-time ... 1))) (setq send-time (time-to-seconds (current-time))) (if (and expected-time (< expected-time send-time)) (progn (error "Timeout while waiting for response.  Method: %s" method)))) (setq done\? t) (cond ((eq resp-result :finished) nil) (resp-result resp-result) ((lsp-json-error\? resp-error) (error (lsp:json-error-message resp-error))) ((lsp-json-error\? (cl-first resp-error)) (error (lsp:json-error-message ...))))) (if done\? nil (lsp-cancel-request-by-token :sync-request)))))
  (progn (let ((--cl-keys-- --cl-rest--)) (while --cl-keys-- (cond ((memq (car --cl-keys--) '(:no-wait :no-merge :allow-other-keys)) (setq --cl-keys-- (cdr (cdr --cl-keys--)))) ((car (cdr (memq ... --cl-rest--))) (setq --cl-keys-- nil)) (t (error "Keyword argument %s not one of (:no-wait :no-merge..." (car --cl-keys--)))))) (if no-wait (lsp-notify method params) (let* ((send-time (time-to-seconds (current-time))) (expected-time (and lsp-response-timeout (+ send-time lsp-response-timeout))) resp-result resp-error done\?) (unwind-protect (progn (lsp-request-async method params #'(lambda ... ... ...) :error-handler #'(lambda ... ... ...) :no-merge no-merge :mode 'detached :cancel-token :sync-request) (while (not (or resp-error resp-result)) (catch 'lsp-done (accept-process-output nil ...)) (setq send-time (time-to-seconds ...)) (if (and expected-time ...) (progn ...))) (setq done\? t) (cond ((eq resp-result :finished) nil) (resp-result resp-result) ((lsp-json-error\? resp-error) (error ...)) ((lsp-json-error\? ...) (error ...)))) (if done\? nil (lsp-cancel-request-by-token :sync-request))))))
  (let* ((no-wait (car (cdr (plist-member --cl-rest-- ':no-wait)))) (no-merge (car (cdr (plist-member --cl-rest-- ':no-merge))))) (progn (let ((--cl-keys-- --cl-rest--)) (while --cl-keys-- (cond ((memq (car --cl-keys--) '...) (setq --cl-keys-- (cdr ...))) ((car (cdr ...)) (setq --cl-keys-- nil)) (t (error "Keyword argument %s not one of (:no-wait :no-merge..." (car --cl-keys--)))))) (if no-wait (lsp-notify method params) (let* ((send-time (time-to-seconds (current-time))) (expected-time (and lsp-response-timeout (+ send-time lsp-response-timeout))) resp-result resp-error done\?) (unwind-protect (progn (lsp-request-async method params #'... :error-handler #'... :no-merge no-merge :mode 'detached :cancel-token :sync-request) (while (not ...) (catch ... ...) (setq send-time ...) (if ... ...)) (setq done\? t) (cond (... nil) (resp-result resp-result) (... ...) (... ...))) (if done\? nil (lsp-cancel-request-by-token :sync-request)))))))
  lsp-request("textDocument/codeAction" (:textDocument (:uri "file:///home/michael/repos/lsp_test/src/LspTest.hs") :range (:start (:line 2 :character 0) :end (:line 2 :character 0)) :context (:diagnostics [#<hash-table equal 5/5 0x15851658d1e7>])))
  lsp-code-actions-at-point()
  (lsp--select-action (lsp-code-actions-at-point))
  (list (lsp--select-action (lsp-code-actions-at-point)))
  command-execute(lsp-execute-code-action record)
  execute-extended-command(nil "lsp-execute-code-action" nil)
  funcall-interactively(execute-extended-command nil "lsp-execute-code-action" nil)
  command-execute(execute-extended-command)

Anything else?

Doing the same with eglot works flawlessly. I guess it isn't a problem with the language server itself.

Using toggle-debug-on-quit hides the problem and just shows the possible code actions and a callstack.

0x28 commented 1 year ago

response log:

[Trace - 07:21:44 ] Sending request 'textDocument/codeAction - (20)'.
Params: {
  "textDocument": {
    "uri": "file:///home/michael/repos/lsp_test/src/LspTest.hs"
  },
  "range": {
    "start": {
      "line": 2,
      "character": 0
    },
    "end": {
      "line": 2,
      "character": 0
    }
  },
  "context": {
    "diagnostics": [
      {
        "message": "Top-level binding with no type signature: inc :: Num a => a -> a",
        "severity": 2,
        "code": "-Wmissing-signatures",
        "source": "typecheck",
        "range": {
          "start": {
            "line": 2,
            "character": 0
          },
          "end": {
            "line": 2,
            "character": 3
          }
        }
      }
    ]
  }
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Pragmas.GhcSession Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Pragmas.GetFileContents Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Pragmas.GetParsedModule Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: alternateNumberFormat.CollectLiterals Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: alternateNumberFormat.GhcSession Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: alternateNumberFormat.GetFileContents Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: splice.codeAction.GitHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: HaddockComments.GetAnnotatedParsedSource Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: RefineImports Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: QualifyImportedNames.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Hlint.GetFileContents Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: importLens Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetFileContents Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Hlint.GetModSummary Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: changeTypeSignature.GetParsedModule Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetParsedModuleWithComments Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: retrie Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GADT.GetParsedModuleWithComments Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GhcSession Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GhcSession Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetGlobalBindingTypeSigs Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetFileContents Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetAnnotatedParsedSource Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetAnnotatedParsedSource Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.getIdeOptions Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetParsedModuleWithComments Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetFileContents Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetParsedModuleWithComments Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetAnnotatedParsedSource Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.getParsedModule Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:44 ] Received response 'textDocument/codeAction - (20)' in 10ms.
Result: [
  {
    "kind": "quickfix",
    "title": "Disable \"missing-signatures\" warnings",
    "diagnostics": [],
    "edit": {
      "changes": {
        "file:///home/michael/repos/lsp_test/src/LspTest.hs": [
          {
            "range": {
              "start": {
                "line": 0,
                "character": 0
              },
              "end": {
                "line": 0,
                "character": 0
              }
            },
            "newText": "{-# OPTIONS_GHC -Wno-missing-signatures #-}\n"
          }
        ]
      }
    }
  },
  {
    "kind": "refactor.inline",
    "command": {
      "command": "78811:retrie:retrieCommand",
      "title": "Unfold inc",
      "arguments": [
        {
          "restrictToOriginatingFile": null,
          "originatingFile": "file:///home/michael/repos/lsp_test/src/LspTest.hs",
          "description": "Unfold inc",
          "rewrites": [
            {
              "contents": "LspTest.inc",
              "tag": "Unfold"
            }
          ]
        }
      ]
    },
    "title": "Unfold inc"
  },
  {
    "kind": "refactor.inline",
    "command": {
      "command": "78811:retrie:retrieCommand",
      "title": "Unfold inc in current file",
      "arguments": [
        {
          "restrictToOriginatingFile": true,
          "originatingFile": "file:///home/michael/repos/lsp_test/src/LspTest.hs",
          "description": "Unfold inc in current file",
          "rewrites": [
            {
              "contents": "LspTest.inc",
              "tag": "Unfold"
            }
          ]
        }
      ]
    },
    "title": "Unfold inc in current file"
  },
  {
    "kind": "refactor.extract",
    "command": {
      "command": "78811:retrie:retrieCommand",
      "title": "Fold inc",
      "arguments": [
        {
          "restrictToOriginatingFile": null,
          "originatingFile": "file:///home/michael/repos/lsp_test/src/LspTest.hs",
          "description": "Fold inc",
          "rewrites": [
            {
              "contents": "LspTest.inc",
              "tag": "Fold"
            }
          ]
        }
      ]
    },
    "title": "Fold inc"
  },
  {
    "kind": "refactor.extract",
    "command": {
      "command": "78811:retrie:retrieCommand",
      "title": "Fold inc in current file",
      "arguments": [
        {
          "restrictToOriginatingFile": true,
          "originatingFile": "file:///home/michael/repos/lsp_test/src/LspTest.hs",
          "description": "Fold inc in current file",
          "rewrites": [
            {
              "contents": "LspTest.inc",
              "tag": "Fold"
            }
          ]
        }
      ]
    },
    "title": "Fold inc in current file"
  },
  {
    "kind": "quickfix",
    "title": "add signature: inc :: Num a => a -> a",
    "diagnostics": [
      {
        "message": "Top-level binding with no type signature: inc :: Num a => a -> a",
        "severity": 2,
        "code": "-Wmissing-signatures",
        "source": "typecheck",
        "range": {
          "start": {
            "line": 2,
            "character": 0
          },
          "end": {
            "line": 2,
            "character": 3
          }
        }
      }
    ],
    "edit": {
      "changes": {
        "file:///home/michael/repos/lsp_test/src/LspTest.hs": [
          {
            "range": {
              "start": {
                "line": 2,
                "character": 0
              },
              "end": {
                "line": 2,
                "character": 0
              }
            },
            "newText": "inc :: Num a => a -> a\n"
          }
        ]
      }
    }
  }
]

[Trace - 07:21:44 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Sending request 'textDocument/codeAction - (21)'.
Params: {
  "textDocument": {
    "uri": "file:///home/michael/repos/lsp_test/src/LspTest.hs"
  },
  "range": {
    "start": {
      "line": 2,
      "character": 0
    },
    "end": {
      "line": 2,
      "character": 0
    }
  },
  "context": {
    "diagnostics": [
      {
        "message": "Top-level binding with no type signature: inc :: Num a => a -> a",
        "severity": 2,
        "code": "-Wmissing-signatures",
        "source": "typecheck",
        "range": {
          "start": {
            "line": 2,
            "character": 0
          },
          "end": {
            "line": 2,
            "character": 3
          }
        }
      }
    ]
  }
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Pragmas.GhcSession Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: RefineImports Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Pragmas.GetFileContents Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Pragmas.GetParsedModule Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: splice.codeAction.GitHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: changeTypeSignature.GetParsedModule Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: QualifyImportedNames.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Hlint.GetFileContents Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: alternateNumberFormat.CollectLiterals Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Hlint.GetModSummary Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: alternateNumberFormat.GhcSession Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: HaddockComments.GetAnnotatedParsedSource Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: alternateNumberFormat.GetFileContents Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: importLens Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetFileContents Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: retrie Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetParsedModuleWithComments Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GhcSession Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GhcSession Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetAnnotatedParsedSource Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetFileContents Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GADT.GetParsedModuleWithComments Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetGlobalBindingTypeSigs Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetAnnotatedParsedSource Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.getIdeOptions Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetParsedModuleWithComments Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetFileContents Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetParsedModuleWithComments Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetAnnotatedParsedSource Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.getParsedModule Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:45 ] Received response 'textDocument/codeAction - (21)' in 70ms.
Result: [
  {
    "kind": "quickfix",
    "title": "Disable \"missing-signatures\" warnings",
    "diagnostics": [],
    "edit": {
      "changes": {
        "file:///home/michael/repos/lsp_test/src/LspTest.hs": [
          {
            "range": {
              "start": {
                "line": 0,
                "character": 0
              },
              "end": {
                "line": 0,
                "character": 0
              }
            },
            "newText": "{-# OPTIONS_GHC -Wno-missing-signatures #-}\n"
          }
        ]
      }
    }
  },
  {
    "kind": "refactor.inline",
    "command": {
      "command": "78811:retrie:retrieCommand",
      "title": "Unfold inc",
      "arguments": [
        {
          "restrictToOriginatingFile": null,
          "originatingFile": "file:///home/michael/repos/lsp_test/src/LspTest.hs",
          "description": "Unfold inc",
          "rewrites": [
            {
              "contents": "LspTest.inc",
              "tag": "Unfold"
            }
          ]
        }
      ]
    },
    "title": "Unfold inc"
  },
  {
    "kind": "refactor.inline",
    "command": {
      "command": "78811:retrie:retrieCommand",
      "title": "Unfold inc in current file",
      "arguments": [
        {
          "restrictToOriginatingFile": true,
          "originatingFile": "file:///home/michael/repos/lsp_test/src/LspTest.hs",
          "description": "Unfold inc in current file",
          "rewrites": [
            {
              "contents": "LspTest.inc",
              "tag": "Unfold"
            }
          ]
        }
      ]
    },
    "title": "Unfold inc in current file"
  },
  {
    "kind": "refactor.extract",
    "command": {
      "command": "78811:retrie:retrieCommand",
      "title": "Fold inc",
      "arguments": [
        {
          "restrictToOriginatingFile": null,
          "originatingFile": "file:///home/michael/repos/lsp_test/src/LspTest.hs",
          "description": "Fold inc",
          "rewrites": [
            {
              "contents": "LspTest.inc",
              "tag": "Fold"
            }
          ]
        }
      ]
    },
    "title": "Fold inc"
  },
  {
    "kind": "refactor.extract",
    "command": {
      "command": "78811:retrie:retrieCommand",
      "title": "Fold inc in current file",
      "arguments": [
        {
          "restrictToOriginatingFile": true,
          "originatingFile": "file:///home/michael/repos/lsp_test/src/LspTest.hs",
          "description": "Fold inc in current file",
          "rewrites": [
            {
              "contents": "LspTest.inc",
              "tag": "Fold"
            }
          ]
        }
      ]
    },
    "title": "Fold inc in current file"
  },
  {
    "kind": "quickfix",
    "title": "add signature: inc :: Num a => a -> a",
    "diagnostics": [
      {
        "message": "Top-level binding with no type signature: inc :: Num a => a -> a",
        "severity": 2,
        "code": "-Wmissing-signatures",
        "source": "typecheck",
        "range": {
          "start": {
            "line": 2,
            "character": 0
          },
          "end": {
            "line": 2,
            "character": 3
          }
        }
      }
    ],
    "edit": {
      "changes": {
        "file:///home/michael/repos/lsp_test/src/LspTest.hs": [
          {
            "range": {
              "start": {
                "line": 2,
                "character": 0
              },
              "end": {
                "line": 2,
                "character": 0
              }
            },
            "newText": "inc :: Num a => a -> a\n"
          }
        ]
      }
    }
  }
]

[Trace - 07:21:45 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:48 ] Sending request 'textDocument/codeAction - (22)'.
Params: {
  "textDocument": {
    "uri": "file:///home/michael/repos/lsp_test/src/LspTest.hs"
  },
  "range": {
    "start": {
      "line": 2,
      "character": 0
    },
    "end": {
      "line": 2,
      "character": 0
    }
  },
  "context": {
    "diagnostics": [
      {
        "message": "Top-level binding with no type signature: inc :: Num a => a -> a",
        "severity": 2,
        "code": "-Wmissing-signatures",
        "source": "typecheck",
        "range": {
          "start": {
            "line": 2,
            "character": 0
          },
          "end": {
            "line": 2,
            "character": 3
          }
        }
      }
    ]
  }
}

[Trace - 07:21:48 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: RefineImports Took: 0.00s",
  "type": 4
}

[Trace - 07:21:48 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Pragmas.GhcSession Took: 0.00s",
  "type": 4
}

[Trace - 07:21:48 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: splice.codeAction.GitHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:48 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Pragmas.GetFileContents Took: 0.00s",
  "type": 4
}

[Trace - 07:21:48 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Pragmas.GetParsedModule Took: 0.00s",
  "type": 4
}

[Trace - 07:21:48 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: QualifyImportedNames.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:48 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: changeTypeSignature.GetParsedModule Took: 0.00s",
  "type": 4
}

[Trace - 07:21:48 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: alternateNumberFormat.GhcSession Took: 0.00s",
  "type": 4
}

[Trace - 07:21:49 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: alternateNumberFormat.CollectLiterals Took: 0.00s",
  "type": 4
}

[Trace - 07:21:49 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: alternateNumberFormat.GetFileContents Took: 0.00s",
  "type": 4
}

[Trace - 07:21:49 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Hlint.GetFileContents Took: 0.00s",
  "type": 4
}

[Trace - 07:21:52 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Hlint.GetModSummary Took: 0.00s",
  "type": 4
}

[Trace - 07:21:52 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: HaddockComments.GetAnnotatedParsedSource Took: 0.00s",
  "type": 4
}

[Trace - 07:21:58 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: importLens Took: 0.00s",
  "type": 4
}

[Trace - 07:21:58 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: retrie Took: 0.00s",
  "type": 4
}

[Trace - 07:21:58 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetFileContents Took: 0.00s",
  "type": 4
}

[Trace - 07:21:58 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetParsedModuleWithComments Took: 0.00s",
  "type": 4
}

[Trace - 07:21:58 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:58 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GhcSession Took: 0.00s",
  "type": 4
}

[Trace - 07:21:58 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GhcSession Took: 0.00s",
  "type": 4
}

[Trace - 07:21:58 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetFileContents Took: 0.00s",
  "type": 4
}

[Trace - 07:21:58 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetGlobalBindingTypeSigs Took: 0.00s",
  "type": 4
}

[Trace - 07:21:58 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GADT.GetParsedModuleWithComments Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetAnnotatedParsedSource Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetAnnotatedParsedSource Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.getIdeOptions Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetParsedModuleWithComments Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetFileContents Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetParsedModuleWithComments Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetAnnotatedParsedSource Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: GhcideCodeActions.getParsedModule Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetHieAst Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GetBindings Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received response 'textDocument/codeAction - (22)' in 56ms.
Result: [
  {
    "kind": "quickfix",
    "title": "Disable \"missing-signatures\" warnings",
    "diagnostics": [],
    "edit": {
      "changes": {
        "file:///home/michael/repos/lsp_test/src/LspTest.hs": [
          {
            "range": {
              "start": {
                "line": 0,
                "character": 0
              },
              "end": {
                "line": 0,
                "character": 0
              }
            },
            "newText": "{-# OPTIONS_GHC -Wno-missing-signatures #-}\n"
          }
        ]
      }
    }
  },
  {
    "kind": "refactor.inline",
    "command": {
      "command": "78811:retrie:retrieCommand",
      "title": "Unfold inc",
      "arguments": [
        {
          "restrictToOriginatingFile": null,
          "originatingFile": "file:///home/michael/repos/lsp_test/src/LspTest.hs",
          "description": "Unfold inc",
          "rewrites": [
            {
              "contents": "LspTest.inc",
              "tag": "Unfold"
            }
          ]
        }
      ]
    },
    "title": "Unfold inc"
  },
  {
    "kind": "refactor.inline",
    "command": {
      "command": "78811:retrie:retrieCommand",
      "title": "Unfold inc in current file",
      "arguments": [
        {
          "restrictToOriginatingFile": true,
          "originatingFile": "file:///home/michael/repos/lsp_test/src/LspTest.hs",
          "description": "Unfold inc in current file",
          "rewrites": [
            {
              "contents": "LspTest.inc",
              "tag": "Unfold"
            }
          ]
        }
      ]
    },
    "title": "Unfold inc in current file"
  },
  {
    "kind": "refactor.extract",
    "command": {
      "command": "78811:retrie:retrieCommand",
      "title": "Fold inc",
      "arguments": [
        {
          "restrictToOriginatingFile": null,
          "originatingFile": "file:///home/michael/repos/lsp_test/src/LspTest.hs",
          "description": "Fold inc",
          "rewrites": [
            {
              "contents": "LspTest.inc",
              "tag": "Fold"
            }
          ]
        }
      ]
    },
    "title": "Fold inc"
  },
  {
    "kind": "refactor.extract",
    "command": {
      "command": "78811:retrie:retrieCommand",
      "title": "Fold inc in current file",
      "arguments": [
        {
          "restrictToOriginatingFile": true,
          "originatingFile": "file:///home/michael/repos/lsp_test/src/LspTest.hs",
          "description": "Fold inc in current file",
          "rewrites": [
            {
              "contents": "LspTest.inc",
              "tag": "Fold"
            }
          ]
        }
      ]
    },
    "title": "Fold inc in current file"
  },
  {
    "kind": "quickfix",
    "title": "add signature: inc :: Num a => a -> a",
    "diagnostics": [
      {
        "message": "Top-level binding with no type signature: inc :: Num a => a -> a",
        "severity": 2,
        "code": "-Wmissing-signatures",
        "source": "typecheck",
        "range": {
          "start": {
            "line": 2,
            "character": 0
          },
          "end": {
            "line": 2,
            "character": 3
          }
        }
      }
    ],
    "edit": {
      "changes": {
        "file:///home/michael/repos/lsp_test/src/LspTest.hs": [
          {
            "range": {
              "start": {
                "line": 2,
                "character": 0
              },
              "end": {
                "line": 2,
                "character": 0
              }
            },
            "newText": "inc :: Num a => a -> a\n"
          }
        ]
      }
    }
  }
]

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.TypeCheck Took: 0.00s",
  "type": 4
}

[Trace - 07:21:59 ] Received notification 'window/logMessage'.
Params: {
  "message": "Finished: Wingman.judgementForHole.GhcSessionDeps Took: 0.00s",
  "type": 4
}

[Trace - 07:22:02 ] Received notification 'window/logMessage'.
Params: {
  "message": "Live bytes: 0.00MB Heap size: 0.00MB",
  "type": 3
}
yyoncho commented 1 year ago

PR at https://github.com/emacs-lsp/lsp-mode/pull/3791

0x28 commented 1 year ago

@yyoncho thank you.