* bug#62194: 30.0.50; Two Eglot-over-Tramp tests are failing on master, passing on emacs-29 @ 2023-03-14 23:08 João Távora 2023-03-15 9:40 ` Michael Albinus 0 siblings, 1 reply; 29+ messages in thread From: João Távora @ 2023-03-14 23:08 UTC (permalink / raw) To: 62194; +Cc: Michael Albinus Hi Michael, I've noticd that these two Eglot tests are passing on emacs-29 but failing on emacs master. I haven't checked if this is due to your recent work on Tramp or some other factor. Sometimes one of the tests passes, but having the two of them pass is rare. In emacs-29, they always pass. Both emacs-master and emacs-29 have the version of Eglot _with_ the ControlMaster-neutering workaround. To reproduce, you need the "clangd" language server installed (which is one of the easiest to get language servers, should be available in your package manager). Then: make -C test lisp/progmodes/eglot-tests SELECTOR=\"tramp\" The error output is after my sig. Let me know if you need more info. João make: Entering directory '/home/capitaomorte/Source/Emacs/emacs-master/test' make[1]: Entering directory '/home/capitaomorte/Source/Emacs/emacs-master/test' GEN lisp/progmodes/eglot-tests.log Running 2 tests (2023-03-14 23:04:34+0000, selector ‘"tramp"’) [eglot-tests] [eglot-test-tramp-test]: test start [eglot] Connected! Server `clangd' now managing `(c-mode c-ts-mode c++-mode c++-ts-mode)' buffers in project `project'. File error: Couldn’t find exit status of ‘\readlink --canonicalize-missing /tmp/eglot--fixturezQyQYv/project/merdix.c’ [eglot-tests] [eglot-test-tramp-test]: FAILED [eglot] Asking EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) politely to terminate [jsonrpc] Server exited with status 9 [eglot-tests] contents of ` *EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) output*': [eglot-tests] contents of ` *EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) stderr*': I[23:04:35.143] clangd version 15.0.7 I[23:04:35.143] Features: linux I[23:04:35.143] PID: 251491 I[23:04:35.143] Working directory: /tmp/eglot--fixturezQyQYv/project I[23:04:35.143] argv[0]: /usr/bin/clangd I[23:04:35.143] Starting LSP over stdin/stdout I[23:04:35.143] <-- initialize(1) I[23:04:35.144] --> reply:initialize(1) 0 ms I[23:04:35.145] <-- initialized I[23:04:35.153] <-- textDocument/didOpen I[23:04:35.153] <-- workspace/didChangeConfiguration I[23:04:35.153] Failed to find compilation database for /tmp/eglot--fixturezQyQYv/project/coiso.c I[23:04:35.153] ASTWorker building file /tmp/eglot--fixturezQyQYv/project/coiso.c version 0 with command clangd fallback [/tmp/eglot--fixturezQyQYv/project] /usr/bin/clang -resource-dir=/usr/lib/clang/15.0.7 -- /tmp/eglot--fixturezQyQYv/project/coiso.c I[23:04:35.163] --> textDocument/publishDiagnostics I[23:04:35.184] <-- textDocument/didOpen I[23:04:35.184] Failed to find compilation database for /tmp/eglot--fixturezQyQYv/project/merdix.c I[23:04:35.184] ASTWorker building file /tmp/eglot--fixturezQyQYv/project/merdix.c version 0 with command clangd fallback [/tmp/eglot--fixturezQyQYv/project] /usr/bin/clang -resource-dir=/usr/lib/clang/15.0.7 -- /tmp/eglot--fixturezQyQYv/project/merdix.c I[23:04:35.194] --> textDocument/publishDiagnostics I[23:04:35.274] <-- shutdown(2) I[23:04:35.274] --> reply:shutdown(2) 0 ms I[23:04:35.274] <-- exit I[23:04:35.274] LSP finished, exiting with status 0 [eglot-tests] contents of `*EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) events*': [stderr] nil [stderr] [stderr] nil [stderr] [stderr] nil [stderr] [stderr] nil [stderr] [stderr] nil [stderr] [stderr] foo [stderr] foo [stderr] foo [stderr] [stderr] foo [stderr] bar [stderr] nil [stderr] bar [stderr] [stderr] nil [stderr] [stderr] nil [stderr] [stderr] nil [stderr] [stderr] nil [stderr] [stderr] "/dev/pts/8" [stderr] tramp_exit_status 0 [stderr] tramp_exit_status 0 [stderr] tramp_exit_status 0 [stderr] "/dev/pts/8" [stderr] [stderr] nil [stderr] [stderr] nil [stderr] [stderr] 251483 [stderr] tramp_exit_status 0 [stderr] tramp_exit_status 0 [stderr] tramp_exit_status 0 [stderr] 251483 [stderr] [internal] Tue Mar 14 23:04:35 2023: (:message "Running language server: /bin/sh -c stty raw > /dev/null; /usr/bin/clangd") [client-request] (id:1) Tue Mar 14 23:04:35 2023: (:jsonrpc "2.0" :id 1 :method "initialize" :params (:processId nil :rootPath "/tmp/eglot--fixturezQyQYv/project/" :rootUri "file:///tmp/eglot--fixturezQyQYv/project" :initializationOptions #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()) :capabilities (:workspace (:applyEdit t :executeCommand (:dynamicRegistration :json-false) :workspaceEdit (:documentChanges t) :didChangeWatchedFiles (:dynamicRegistration :json-false) :symbol (:dynamicRegistration :json-false) :configuration t :workspaceFolders t) :textDocument (:synchronization (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t) :completion (:dynamicRegistration :json-false :completionItem (:snippetSupport :json-false :deprecatedSupport t :resolveSupport (:properties ["documentation" "details" "additionalTextEdits"]) :tagSupport (:valueSet [1])) :contextSupport t) :hover (:dynamicRegistration :json-false :contentFormat ["plaintext"]) :signatureHelp (:dynamicRegistration :json-false :signatureInformation (:parameterInformation (:labelOffsetSupport t) :activeParameterSupport t)) :references (:dynamicRegistration :json-false) :definition (:dynamicRegistration :json-false :linkSupport t) :declaration (:dynamicRegistration :json-false :linkSupport t) :implementation (:dynamicRegistration :json-false :linkSupport t) :typeDefinition (:dynamicRegistration :json-false :linkSupport t) :documentSymbol (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind (:valueSet [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26])) :documentHighlight (:dynamicRegistration :json-false) :codeAction (:dynamicRegistration :json-false :codeActionLiteralSupport (:codeActionKind (:valueSet ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"])) :isPreferredSupport t) :formatting (:dynamicRegistration :json-false) :rangeFormatting (:dynamicRegistration :json-false) :rename (:dynamicRegistration :json-false) :inlayHint (:dynamicRegistration :json-false) :publishDiagnostics (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport (:valueSet [1 2]))) :general (:positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) :workspaceFolders [(:uri "file:///tmp/eglot--fixturezQyQYv/project" :name "/mock:krug:/tmp/eglot--fixturezQyQYv/project/")])) [stderr] I[23:04:35.143] clangd version 15.0.7 [stderr] I[23:04:35.143] Features: linux [stderr] I[23:04:35.143] PID: 251491 [stderr] I[23:04:35.143] Working directory: /tmp/eglot--fixturezQyQYv/project [stderr] I[23:04:35.143] argv[0]: /usr/bin/clangd [stderr] I[23:04:35.143] Starting LSP over stdin/stdout [stderr] I[23:04:35.143] <-- initialize(1) [server-reply] (id:1) Tue Mar 14 23:04:35 2023: (:id 1 :jsonrpc "2.0" :result (:capabilities (:astProvider t :callHierarchyProvider t :clangdInlayHintsProvider t :codeActionProvider (:codeActionKinds ["quickfix" "refactor" "info"]) :compilationDatabase (:automaticReload t) :completionProvider (:resolveProvider :json-false :triggerCharacters ["." "<" ">" ":" "\"" "/" "*"]) :declarationProvider t :definitionProvider t :documentFormattingProvider t :documentHighlightProvider t :documentLinkProvider (:resolveProvider :json-false) :documentOnTypeFormattingProvider (:firstTriggerCharacter "\n" :moreTriggerCharacter []) :documentRangeFormattingProvider t :documentSymbolProvider t :executeCommandProvider (:commands ["clangd.applyFix" "clangd.applyTweak"]) :hoverProvider t :implementationProvider t :inlayHintProvider t :memoryUsageProvider t :referencesProvider t :renameProvider t :selectionRangeProvider t :semanticTokensProvider (:full (:delta t) :legend (:tokenModifiers ["declaration" "deprecated" "deduced" "readonly" "static" "abstract" "virtual" "dependentName" "defaultLibrary" "usedAsMutableReference" "functionScope" "classScope" "fileScope" "globalScope"] :tokenTypes ["variable" "variable" "parameter" "function" "method" "function" "property" "variable" "class" "interface" "enum" "enumMember" "type" "type" "unknown" "namespace" "typeParameter" "concept" "type" "macro" "comment"]) :range :json-false) :signatureHelpProvider (:triggerCharacters ["(" ")" "{" "}" "<" ">" ","]) :standardTypeHierarchyProvider t :textDocumentSync (:change 2 :openClose t :save t) :typeDefinitionProvider t :typeHierarchyProvider t :workspaceSymbolProvider t) :serverInfo (:name "clangd" :version "clangd version 15.0.7 linux x86_64-pc-linux-gnu"))) [client-notification] Tue Mar 14 23:04:35 2023: (:jsonrpc "2.0" :method "initialized" :params #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) [stderr] I[23:04:35.144] --> reply:initialize(1) 0 ms [stderr] I[23:04:35.145] <-- initialized [client-notification] Tue Mar 14 23:04:35 2023: (:jsonrpc "2.0" :method "textDocument/didOpen" :params (:textDocument (:uri "file:///tmp/eglot--fixturezQyQYv/project/coiso.c" :version 0 :languageId "c" :text "bla"))) [client-notification] Tue Mar 14 23:04:35 2023: (:jsonrpc "2.0" :method "workspace/didChangeConfiguration" :params (:settings #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()))) [stderr] I[23:04:35.153] <-- textDocument/didOpen [stderr] I[23:04:35.153] <-- workspace/didChangeConfiguration [stderr] I[23:04:35.153] Failed to find compilation database for /tmp/eglot--fixturezQyQYv/project/coiso.c [stderr] I[23:04:35.153] ASTWorker building file /tmp/eglot--fixturezQyQYv/project/coiso.c version 0 with command clangd fallback [stderr] [/tmp/eglot--fixturezQyQYv/project] [stderr] /usr/bin/clang -resource-dir=/usr/lib/clang/15.0.7 -- /tmp/eglot--fixturezQyQYv/project/coiso.c [server-notification] Tue Mar 14 23:04:35 2023: (:jsonrpc "2.0" :method "textDocument/publishDiagnostics" :params (:diagnostics [(:code "unknown_typename" :message "Unknown type name 'bla'" :range (:end (:character 3 :line 0) :start (:character 0 :line 0)) :severity 1 :source "clang") (:code "expected_either" :message "Expected identifier or '('" :range (:end (:character 3 :line 0) :start (:character 3 :line 0)) :severity 1 :source "clang")] :uri "file:///tmp/eglot--fixturezQyQYv/project/coiso.c" :version 0)) [stderr] I[23:04:35.163] --> textDocument/publishDiagnostics [client-notification] Tue Mar 14 23:04:35 2023: (:jsonrpc "2.0" :method "textDocument/didOpen" :params (:textDocument (:uri "file:///tmp/eglot--fixturezQyQYv/project/merdix.c" :version 0 :languageId "c" :text "bla"))) [stderr] I[23:04:35.184] <-- textDocument/didOpen [stderr] I[23:04:35.184] Failed to find compilation database for /tmp/eglot--fixturezQyQYv/project/merdix.c [stderr] I[23:04:35.184] ASTWorker building file /tmp/eglot--fixturezQyQYv/project/merdix.c version 0 with command clangd fallback [stderr] [/tmp/eglot--fixturezQyQYv/project] [stderr] /usr/bin/clang -resource-dir=/usr/lib/clang/15.0.7 -- /tmp/eglot--fixturezQyQYv/project/merdix.c [server-notification] Tue Mar 14 23:04:35 2023: (:jsonrpc "2.0" :method "textDocument/publishDiagnostics" :params (:diagnostics [(:code "unknown_typename" :message "Unknown type name 'bla'" :range (:end (:character 3 :line 0) :start (:character 0 :line 0)) :severity 1 :source "clang") (:code "expected_either" :message "Expected identifier or '('" :range (:end (:character 3 :line 0) :start (:character 3 :line 0)) :severity 1 :source "clang")] :uri "file:///tmp/eglot--fixturezQyQYv/project/merdix.c" :version 0)) [stderr] I[23:04:35.194] --> textDocument/publishDiagnostics [client-request] (id:2) Tue Mar 14 23:04:35 2023: (:jsonrpc "2.0" :id 2 :method "shutdown" :params nil) [server-reply] (id:2) Tue Mar 14 23:04:35 2023: (:id 2 :jsonrpc "2.0" :result nil) [client-notification] Tue Mar 14 23:04:35 2023: (:jsonrpc "2.0" :method "exit" :params nil) [internal] Tue Mar 14 23:04:35 2023: (:message "Connection state changed" :change "killed\n") ----------b---y---e---b---y---e---------- [stderr] I[23:04:35.274] <-- shutdown(2) [stderr] I[23:04:35.274] --> reply:shutdown(2) 0 ms [stderr] I[23:04:35.274] <-- exit [stderr] I[23:04:35.274] LSP finished, exiting with status 0 [eglot-tests] Killing (coiso.c merdix.c), wiping /mock:krug:/tmp/eglot--fixturezQyQYv, restoring nil Test eglot-test-tramp-test backtrace: signal(wrong-type-argument ("listp /tmp/tramp.G0HtZ3")) tramp-error((tramp-file-name "mock" nil nil "krug" nil "/tmp/eglot-- tramp-signal-hook-function(wrong-type-argument ("listp /tmp/tramp.G0 signal(wrong-type-argument ("listp /tmp/tramp.G0HtZ3")) tramp-handle-insert-file-contents("/mock:krug:/tmp/eglot--fixturezQy apply(tramp-handle-insert-file-contents ("/mock:krug:/tmp/eglot--fix tramp-sh-file-name-handler(insert-file-contents "/mock:krug:/tmp/egl apply(tramp-sh-file-name-handler insert-file-contents ("/mock:krug:/ tramp-file-name-handler(insert-file-contents "/mock:krug:/tmp/eglot- insert-file-contents("/mock:krug:/tmp/eglot--fixturezQyQYv/project/R vc-insert-file("/mock:krug:/tmp/eglot--fixturezQyQYv/project/RCS/m.. vc-rcs-fetch-master-state("/mock:krug:/tmp/eglot--fixturezQyQYv/proj vc-rcs-state("/mock:krug:/tmp/eglot--fixturezQyQYv/project/merdi..." apply(vc-rcs-state "/mock:krug:/tmp/eglot--fixturezQyQYv/project/mer vc-call-backend(RCS state "/mock:krug:/tmp/eglot--fixturezQyQYv/proj vc-state-refresh("/mock:krug:/tmp/eglot--fixturezQyQYv/project/merdi vc-state("/mock:krug:/tmp/eglot--fixturezQyQYv/project/merdi..." RCS vc-rcs-find-file-hook() apply(vc-rcs-find-file-hook nil) vc-call-backend(RCS find-file-hook) vc-refresh-state() run-hooks(find-file-hook) after-find-file(nil t) find-file-noselect-1(#<killed buffer> "/mock:krug:/tmp/eglot--fixtur find-file-noselect("project/merdix.c") eglot--find-file-noselect("project/merdix.c") (set-buffer (eglot--find-file-noselect "project/merdix.c")) (save-current-buffer (set-buffer (eglot--find-file-noselect "project (closure ((server . #<eglot-lsp-server eglot-lsp-server-15755b2a4d56 funcall((closure ((server . #<eglot-lsp-server eglot-lsp-server-1575 (prog1 (funcall fn) (setq test-body-successful-p t)) (let* ((process-environment (append (list "XDG_CONFIG_HOME=/dev/null (unwind-protect (let* ((process-environment (append (list "XDG_CONFI (let* ((fixture-directory (make-nearby-temp-file "eglot--fixture" t) eglot--call-with-fixture((("project" ("coiso.c" . "bla") ("merdix.c" (let (server) (eglot--call-with-fixture '(("project" ("coiso.c" . "b eglot-tests--auto-detect-running-server-1() funcall(eglot-tests--auto-detect-running-server-1) (let* ((tramp-remote-path (cons 'tramp-own-remote-path tramp-remote- eglot--call-with-tramp-test(eglot-tests--auto-detect-running-server- (closure (tramp-histfile-override company-candidates typescript-mode ert--run-test-internal(#s(ert--test-execution-info :test #s(ert-test ert-run-test(#s(ert-test :name eglot-test-tramp-test :documentation ert-run-or-rerun-test(#s(ert--stats :selector "tramp" :tests ... :te ert-run-tests("tramp" #f(compiled-function (event-type &rest event-a ert-run-tests-batch("tramp") ert-run-tests-batch-and-exit("tramp") eval((ert-run-tests-batch-and-exit '"tramp") t) command-line-1(("-L" ":." "-l" "ert" "-l" "lisp/progmodes/eglot-test command-line() normal-top-level() Test eglot-test-tramp-test condition: (wrong-type-argument "listp /tmp/tramp.G0HtZ3") FAILED 1/2 eglot-test-tramp-test (0.744733 sec) at lisp/progmodes/eglot-tests.el:1285 [eglot-tests] [eglot-test-tramp-test-2]: test start [eglot] Connected! Server `clangd' now managing `(c-mode)' buffers in project `project'. [eglot-tests] waiting for `(should (equal 71 (cadddr (cadadr (aref (cadddr params) 0)))))' [eglot-tests] detected: textDocument/didChange [eglot-tests] [eglot-test-tramp-test-2]: OK [eglot] Asking EGLOT (project/(c-mode)) politely to terminate [jsonrpc] Server exited with status 9 [eglot-tests] Killing (foo.c), wiping /mock:krug:/tmp/eglot--fixtureQ3JgHX, restoring nil File is missing: /mock:krug:/tmp/eglot--fixtureQ3JgHX/project/foo.c~ passed 2/2 eglot-test-tramp-test-2 (0.618120 sec) Ran 2 tests, 1 results as expected, 1 unexpected (2023-03-14 23:04:36+0000, 1.444125 sec) 1 unexpected results: FAILED eglot-test-tramp-test make[1]: *** [Makefile:174: lisp/progmodes/eglot-tests.log] Error 1 make[1]: Leaving directory '/home/capitaomorte/Source/Emacs/emacs-master/test' make: *** [Makefile:240: lisp/progmodes/eglot-tests] Error 2 make: Leaving directory '/home/capitaomorte/Source/Emacs/emacs-master/test' ^ permalink raw reply [flat|nested] 29+ messages in thread
* bug#62194: 30.0.50; Two Eglot-over-Tramp tests are failing on master, passing on emacs-29 2023-03-14 23:08 bug#62194: 30.0.50; Two Eglot-over-Tramp tests are failing on master, passing on emacs-29 João Távora @ 2023-03-15 9:40 ` Michael Albinus 2023-03-15 11:45 ` Michael Albinus 2023-03-15 20:16 ` João Távora 0 siblings, 2 replies; 29+ messages in thread From: Michael Albinus @ 2023-03-15 9:40 UTC (permalink / raw) To: João Távora; +Cc: 62194 [-- Attachment #1: Type: text/plain, Size: 1419 bytes --] João Távora <joaotavora@gmail.com> writes: > Hi Michael, Hi João, > I've noticd that these two Eglot tests are passing on emacs-29 but > failing on emacs master. I haven't checked if this is due to your > recent work on Tramp or some other factor. > > Sometimes one of the tests passes, but having the two of them pass is > rare. In emacs-29, they always pass. Both emacs-master and emacs-29 > have the version of Eglot _with_ the ControlMaster-neutering workaround. > > To reproduce, you need the "clangd" language server installed (which is > one of the easiest to get language servers, should be available in your > package manager). > > Then: > > make -C test lisp/progmodes/eglot-tests SELECTOR=\"tramp\" FTR, the following woulöd be sufficient: --8<---------------cut here---------------start------------->8--- make -C test eglot-tests ... --8<---------------cut here---------------end--------------->8--- Well, if I call it w/o a SELECTOR, I get 14 failing tests. clangd is installed: --8<---------------cut here---------------start------------->8--- # which clangd /var/lib/snapd/snap/bin/clangd --8<---------------cut here---------------end--------------->8--- This might not be the canonical path, but at least the local tests shall find it. I'm running Fedora 37. Could you, pls, check? The log file is appended. > João Best regards, Michael. [-- Attachment #2: eglot-tests.log --] [-- Type: text/plain, Size: 161642 bytes --] Running 50 tests (2023-03-15 10:19:58+0100, selector `(not (or (tag :unstable) (tag :nativecomp)))') [eglot-tests] [eglot-test-auto-detect-running-server]: test start [jsonrpc] Server exited with status 9 [eglot-tests] [eglot-test-auto-detect-running-server]: FAILED [eglot-tests] contents of ` *EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) output*': [eglot-tests] contents of ` *EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) stderr*': Process EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) stderr finished [eglot-tests] contents of `*EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) events*': [internal] Wed Mar 15 10:19:58 2023: (:message "Running language server: /var/lib/snapd/snap/bin/clangd") [client-request] (id:1) Wed Mar 15 10:19:58 2023: (:jsonrpc "2.0" :id 1 :method "initialize" :params (:processId 2017004 :rootPath "/tmp/eglot--fixtureGOqwaT/project/" :rootUri "file:///tmp/eglot--fixtureGOqwaT/project" :initializationOptions #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()) :capabilities (:workspace (:applyEdit t :executeCommand (:dynamicRegistration :json-false) :workspaceEdit (:documentChanges t) :didChangeWatchedFiles (:dynamicRegistration t) :symbol (:dynamicRegistration :json-false) :configuration t :workspaceFolders t) :textDocument (:synchronization (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t) :completion (:dynamicRegistration :json-false :completionItem (:snippetSupport :json-false :deprecatedSupport t :resolveSupport (:properties ["documentation" "details" "additionalTextEdits"]) :tagSupport (:valueSet [1])) :contextSupport t) :hover (:dynamicRegistration :json-false :contentFormat ["plaintext"]) :signatureHelp (:dynamicRegistration :json-false :signatureInformation (:parameterInformation (:labelOffsetSupport t) :activeParameterSupport t)) :references (:dynamicRegistration :json-false) :definition (:dynamicRegistration :json-false :linkSupport t) :declaration (:dynamicRegistration :json-false :linkSupport t) :implementation (:dynamicRegistration :json-false :linkSupport t) :typeDefinition (:dynamicRegistration :json-false :linkSupport t) :documentSymbol (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind (:valueSet [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26])) :documentHighlight (:dynamicRegistration :json-false) :codeAction (:dynamicRegistration :json-false :codeActionLiteralSupport (:codeActionKind (:valueSet ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"])) :isPreferredSupport t) :formatting (:dynamicRegistration :json-false) :rangeFormatting (:dynamicRegistration :json-false) :rename (:dynamicRegistration :json-false) :inlayHint (:dynamicRegistration :json-false) :publishDiagnostics (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport (:valueSet [1 2]))) :general (:positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) :workspaceFolders [(:uri "file:///tmp/eglot--fixtureGOqwaT/project" :name "/tmp/eglot--fixtureGOqwaT/project/")])) [internal] Wed Mar 15 10:20:08 2023: (:message "Connection state changed" :change "killed\n") ----------b---y---e---b---y---e---------- [stderr] [stderr] [stderr] nil [stderr] nil [stderr] Process EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) stderr finished [eglot-tests] Killing (coiso.c), wiping /tmp/eglot--fixtureGOqwaT, restoring nil Test eglot-test-auto-detect-running-server backtrace: signal(error ("[eglot] Timed out after 10 seconds")) error("[eglot] %s" "Timed out after 10 seconds") eglot--error("Timed out after 10 seconds") eglot--connect((c-mode c-ts-mode c++-mode c++-ts-mode) (transient . apply(eglot--connect ((c-mode c-ts-mode c++-mode c++-ts-mode) (trans (let* ((timeout (or timeout 10)) (eglot-sync-connect t) (eglot-conne eglot--tests-connect() (setq server (eglot--tests-connect)) (setq value-10 (setq server (eglot--tests-connect))) (unwind-protect (setq value-10 (setq server (eglot--tests-connect))) (if (unwind-protect (setq value-10 (setq server (eglot--tests-connec (let (form-description-11) (if (unwind-protect (setq value-10 (setq (let ((value-10 (gensym "ert-form-evaluation-aborted-"))) (let (form (save-current-buffer (set-buffer (eglot--find-file-noselect "project (closure ((server)) nil (save-current-buffer (set-buffer (eglot--fin funcall((closure ((server)) nil (save-current-buffer (set-buffer (eg (prog1 (funcall fn) (setq test-body-successful-p t)) (let* ((process-environment (append (list "XDG_CONFIG_HOME=/dev/null (unwind-protect (let* ((process-environment (append (list "XDG_CONFI (let* ((fixture-directory (make-nearby-temp-file "eglot--fixture" t) eglot--call-with-fixture((("project" ("coiso.c" . "bla") ("merdix.c" (let (server) (eglot--call-with-fixture '(("project" ("coiso.c" . "b eglot-tests--auto-detect-running-server-1() (closure (typescript-mode-abbrev-table typescript-mode-syntax-table ert--run-test-internal(#s(ert--test-execution-info :test #s(ert-test ert-run-test(#s(ert-test :name eglot-test-auto-detect-running-server ert-run-or-rerun-test(#s(ert--stats :selector ... :tests ... :test-m ert-run-tests((not (or (tag :unstable) (tag :nativecomp))) #f(compil ert-run-tests-batch((not (or (tag :unstable) (tag :nativecomp)))) ert-run-tests-batch-and-exit((not (or (tag :unstable) (tag :nativeco eval((ert-run-tests-batch-and-exit '(not (or (tag :unstable) (tag :n command-line-1(("-L" ":." "-l" "ert" "-l" "lisp/progmodes/eglot-test command-line() normal-top-level() Test eglot-test-auto-detect-running-server condition: (error "[eglot] Timed out after 10 seconds") FAILED 1/50 eglot-test-auto-detect-running-server (10.149717 sec) at lisp/progmodes/eglot-tests.el:355 [eglot-tests] [eglot-test-auto-reconnect]: test start [jsonrpc] Server exited with status 9 [eglot-tests] [eglot-test-auto-reconnect]: FAILED [eglot-tests] contents of ` *EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) output*': [eglot-tests] contents of ` *EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) stderr*': Process EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) stderr finished [eglot-tests] contents of `*EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) events*': [internal] Wed Mar 15 10:19:58 2023: (:message "Running language server: /var/lib/snapd/snap/bin/clangd") [client-request] (id:1) Wed Mar 15 10:19:58 2023: (:jsonrpc "2.0" :id 1 :method "initialize" :params (:processId 2017004 :rootPath "/tmp/eglot--fixtureGOqwaT/project/" :rootUri "file:///tmp/eglot--fixtureGOqwaT/project" :initializationOptions #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()) :capabilities (:workspace (:applyEdit t :executeCommand (:dynamicRegistration :json-false) :workspaceEdit (:documentChanges t) :didChangeWatchedFiles (:dynamicRegistration t) :symbol (:dynamicRegistration :json-false) :configuration t :workspaceFolders t) :textDocument (:synchronization (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t) :completion (:dynamicRegistration :json-false :completionItem (:snippetSupport :json-false :deprecatedSupport t :resolveSupport (:properties ["documentation" "details" "additionalTextEdits"]) :tagSupport (:valueSet [1])) :contextSupport t) :hover (:dynamicRegistration :json-false :contentFormat ["plaintext"]) :signatureHelp (:dynamicRegistration :json-false :signatureInformation (:parameterInformation (:labelOffsetSupport t) :activeParameterSupport t)) :references (:dynamicRegistration :json-false) :definition (:dynamicRegistration :json-false :linkSupport t) :declaration (:dynamicRegistration :json-false :linkSupport t) :implementation (:dynamicRegistration :json-false :linkSupport t) :typeDefinition (:dynamicRegistration :json-false :linkSupport t) :documentSymbol (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind (:valueSet [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26])) :documentHighlight (:dynamicRegistration :json-false) :codeAction (:dynamicRegistration :json-false :codeActionLiteralSupport (:codeActionKind (:valueSet ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"])) :isPreferredSupport t) :formatting (:dynamicRegistration :json-false) :rangeFormatting (:dynamicRegistration :json-false) :rename (:dynamicRegistration :json-false) :inlayHint (:dynamicRegistration :json-false) :publishDiagnostics (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport (:valueSet [1 2]))) :general (:positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) :workspaceFolders [(:uri "file:///tmp/eglot--fixtureGOqwaT/project" :name "/tmp/eglot--fixtureGOqwaT/project/")])) [internal] Wed Mar 15 10:20:08 2023: (:message "Connection state changed" :change "killed\n") ----------b---y---e---b---y---e---------- [stderr] [stderr] [stderr] nil [stderr] nil [stderr] Process EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) stderr finished [internal] Wed Mar 15 10:20:08 2023: (:message "Running language server: /var/lib/snapd/snap/bin/clangd") [client-request] (id:1) Wed Mar 15 10:20:08 2023: (:jsonrpc "2.0" :id 1 :method "initialize" :params (:processId 2017004 :rootPath "/tmp/eglot--fixturewNlzZp/project/" :rootUri "file:///tmp/eglot--fixturewNlzZp/project" :initializationOptions #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()) :capabilities (:workspace (:applyEdit t :executeCommand (:dynamicRegistration :json-false) :workspaceEdit (:documentChanges t) :didChangeWatchedFiles (:dynamicRegistration t) :symbol (:dynamicRegistration :json-false) :configuration t :workspaceFolders t) :textDocument (:synchronization (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t) :completion (:dynamicRegistration :json-false :completionItem (:snippetSupport :json-false :deprecatedSupport t :resolveSupport (:properties ["documentation" "details" "additionalTextEdits"]) :tagSupport (:valueSet [1])) :contextSupport t) :hover (:dynamicRegistration :json-false :contentFormat ["plaintext"]) :signatureHelp (:dynamicRegistration :json-false :signatureInformation (:parameterInformation (:labelOffsetSupport t) :activeParameterSupport t)) :references (:dynamicRegistration :json-false) :definition (:dynamicRegistration :json-false :linkSupport t) :declaration (:dynamicRegistration :json-false :linkSupport t) :implementation (:dynamicRegistration :json-false :linkSupport t) :typeDefinition (:dynamicRegistration :json-false :linkSupport t) :documentSymbol (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind (:valueSet [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26])) :documentHighlight (:dynamicRegistration :json-false) :codeAction (:dynamicRegistration :json-false :codeActionLiteralSupport (:codeActionKind (:valueSet ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"])) :isPreferredSupport t) :formatting (:dynamicRegistration :json-false) :rangeFormatting (:dynamicRegistration :json-false) :rename (:dynamicRegistration :json-false) :inlayHint (:dynamicRegistration :json-false) :publishDiagnostics (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport (:valueSet [1 2]))) :general (:positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) :workspaceFolders [(:uri "file:///tmp/eglot--fixturewNlzZp/project" :name "/tmp/eglot--fixturewNlzZp/project/")])) [internal] Wed Mar 15 10:20:18 2023: (:message "Connection state changed" :change "killed\n") ----------b---y---e---b---y---e---------- [stderr] [stderr] [stderr] nil [stderr] nil [stderr] Process EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) stderr finished [eglot-tests] Killing (thingy.c), wiping /tmp/eglot--fixturewNlzZp, restoring nil Test eglot-test-auto-reconnect backtrace: signal(error ("[eglot] Timed out after 10 seconds")) error("[eglot] %s" "Timed out after 10 seconds") eglot--error("Timed out after 10 seconds") eglot--connect((c-mode c-ts-mode c++-mode c++-ts-mode) (transient . apply(eglot--connect ((c-mode c-ts-mode c++-mode c++-ts-mode) (trans (let* ((timeout (or timeout 10)) (eglot-sync-connect t) (eglot-conne eglot--tests-connect() (setq server (eglot--tests-connect)) (setq value-66 (setq server (eglot--tests-connect))) (unwind-protect (setq value-66 (setq server (eglot--tests-connect))) (if (unwind-protect (setq value-66 (setq server (eglot--tests-connec (let (form-description-67) (if (unwind-protect (setq value-66 (setq (let ((value-66 (gensym "ert-form-evaluation-aborted-"))) (let (form (save-current-buffer (set-buffer (eglot--find-file-noselect "project (closure ((server)) nil (save-current-buffer (set-buffer (eglot--fin funcall((closure ((server)) nil (save-current-buffer (set-buffer (eg (prog1 (funcall fn) (setq test-body-successful-p t)) (let* ((process-environment (append (list "XDG_CONFIG_HOME=/dev/null (unwind-protect (let* ((process-environment (append (list "XDG_CONFI (let* ((fixture-directory (make-nearby-temp-file "eglot--fixture" t) eglot--call-with-fixture((("project" ("thingy.c" . "bla") ("thingy2. (let (server (eglot-autoreconnect 1)) (eglot--call-with-fixture '((" (closure (typescript-mode-abbrev-table typescript-mode-syntax-table ert--run-test-internal(#s(ert--test-execution-info :test #s(ert-test ert-run-test(#s(ert-test :name eglot-test-auto-reconnect :documentat ert-run-or-rerun-test(#s(ert--stats :selector ... :tests ... :test-m ert-run-tests((not (or (tag :unstable) (tag :nativecomp))) #f(compil ert-run-tests-batch((not (or (tag :unstable) (tag :nativecomp)))) ert-run-tests-batch-and-exit((not (or (tag :unstable) (tag :nativeco eval((ert-run-tests-batch-and-exit '(not (or (tag :unstable) (tag :n command-line-1(("-L" ":." "-l" "ert" "-l" "lisp/progmodes/eglot-test command-line() normal-top-level() Test eglot-test-auto-reconnect condition: (error "[eglot] Timed out after 10 seconds") FAILED 2/50 eglot-test-auto-reconnect (10.142759 sec) at lisp/progmodes/eglot-tests.el:379 [eglot-tests] [eglot-test-auto-shutdown]: test start [jsonrpc] Server exited with status 9 [eglot-tests] [eglot-test-auto-shutdown]: FAILED [eglot-tests] contents of ` *EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) output*': [eglot-tests] contents of ` *EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) stderr*': Process EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) stderr finished [eglot-tests] contents of `*EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) events*': [internal] Wed Mar 15 10:19:58 2023: (:message "Running language server: /var/lib/snapd/snap/bin/clangd") [client-request] (id:1) Wed Mar 15 10:19:58 2023: (:jsonrpc "2.0" :id 1 :method "initialize" :params (:processId 2017004 :rootPath "/tmp/eglot--fixtureGOqwaT/project/" :rootUri "file:///tmp/eglot--fixtureGOqwaT/project" :initializationOptions #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()) :capabilities (:workspace (:applyEdit t :executeCommand (:dynamicRegistration :json-false) :workspaceEdit (:documentChanges t) :didChangeWatchedFiles (:dynamicRegistration t) :symbol (:dynamicRegistration :json-false) :configuration t :workspaceFolders t) :textDocument (:synchronization (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t) :completion (:dynamicRegistration :json-false :completionItem (:snippetSupport :json-false :deprecatedSupport t :resolveSupport (:properties ["documentation" "details" "additionalTextEdits"]) :tagSupport (:valueSet [1])) :contextSupport t) :hover (:dynamicRegistration :json-false :contentFormat ["plaintext"]) :signatureHelp (:dynamicRegistration :json-false :signatureInformation (:parameterInformation (:labelOffsetSupport t) :activeParameterSupport t)) :references (:dynamicRegistration :json-false) :definition (:dynamicRegistration :json-false :linkSupport t) :declaration (:dynamicRegistration :json-false :linkSupport t) :implementation (:dynamicRegistration :json-false :linkSupport t) :typeDefinition (:dynamicRegistration :json-false :linkSupport t) :documentSymbol (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind (:valueSet [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26])) :documentHighlight (:dynamicRegistration :json-false) :codeAction (:dynamicRegistration :json-false :codeActionLiteralSupport (:codeActionKind (:valueSet ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"])) :isPreferredSupport t) :formatting (:dynamicRegistration :json-false) :rangeFormatting (:dynamicRegistration :json-false) :rename (:dynamicRegistration :json-false) :inlayHint (:dynamicRegistration :json-false) :publishDiagnostics (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport (:valueSet [1 2]))) :general (:positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) :workspaceFolders [(:uri "file:///tmp/eglot--fixtureGOqwaT/project" :name "/tmp/eglot--fixtureGOqwaT/project/")])) [internal] Wed Mar 15 10:20:08 2023: (:message "Connection state changed" :change "killed\n") ----------b---y---e---b---y---e---------- [stderr] [stderr] [stderr] nil [stderr] nil [stderr] Process EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) stderr finished [internal] Wed Mar 15 10:20:08 2023: (:message "Running language server: /var/lib/snapd/snap/bin/clangd") [client-request] (id:1) Wed Mar 15 10:20:08 2023: (:jsonrpc "2.0" :id 1 :method "initialize" :params (:processId 2017004 :rootPath "/tmp/eglot--fixturewNlzZp/project/" :rootUri "file:///tmp/eglot--fixturewNlzZp/project" :initializationOptions #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()) :capabilities (:workspace (:applyEdit t :executeCommand (:dynamicRegistration :json-false) :workspaceEdit (:documentChanges t) :didChangeWatchedFiles (:dynamicRegistration t) :symbol (:dynamicRegistration :json-false) :configuration t :workspaceFolders t) :textDocument (:synchronization (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t) :completion (:dynamicRegistration :json-false :completionItem (:snippetSupport :json-false :deprecatedSupport t :resolveSupport (:properties ["documentation" "details" "additionalTextEdits"]) :tagSupport (:valueSet [1])) :contextSupport t) :hover (:dynamicRegistration :json-false :contentFormat ["plaintext"]) :signatureHelp (:dynamicRegistration :json-false :signatureInformation (:parameterInformation (:labelOffsetSupport t) :activeParameterSupport t)) :references (:dynamicRegistration :json-false) :definition (:dynamicRegistration :json-false :linkSupport t) :declaration (:dynamicRegistration :json-false :linkSupport t) :implementation (:dynamicRegistration :json-false :linkSupport t) :typeDefinition (:dynamicRegistration :json-false :linkSupport t) :documentSymbol (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind (:valueSet [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26])) :documentHighlight (:dynamicRegistration :json-false) :codeAction (:dynamicRegistration :json-false :codeActionLiteralSupport (:codeActionKind (:valueSet ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"])) :isPreferredSupport t) :formatting (:dynamicRegistration :json-false) :rangeFormatting (:dynamicRegistration :json-false) :rename (:dynamicRegistration :json-false) :inlayHint (:dynamicRegistration :json-false) :publishDiagnostics (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport (:valueSet [1 2]))) :general (:positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) :workspaceFolders [(:uri "file:///tmp/eglot--fixturewNlzZp/project" :name "/tmp/eglot--fixturewNlzZp/project/")])) [internal] Wed Mar 15 10:20:18 2023: (:message "Connection state changed" :change "killed\n") ----------b---y---e---b---y---e---------- [stderr] [stderr] [stderr] nil [stderr] nil [stderr] Process EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) stderr finished [internal] Wed Mar 15 10:20:18 2023: (:message "Running language server: /var/lib/snapd/snap/bin/clangd") [client-request] (id:1) Wed Mar 15 10:20:18 2023: (:jsonrpc "2.0" :id 1 :method "initialize" :params (:processId 2017004 :rootPath "/tmp/eglot--fixturehfF6Pn/project/" :rootUri "file:///tmp/eglot--fixturehfF6Pn/project" :initializationOptions #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()) :capabilities (:workspace (:applyEdit t :executeCommand (:dynamicRegistration :json-false) :workspaceEdit (:documentChanges t) :didChangeWatchedFiles (:dynamicRegistration t) :symbol (:dynamicRegistration :json-false) :configuration t :workspaceFolders t) :textDocument (:synchronization (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t) :completion (:dynamicRegistration :json-false :completionItem (:snippetSupport :json-false :deprecatedSupport t :resolveSupport (:properties ["documentation" "details" "additionalTextEdits"]) :tagSupport (:valueSet [1])) :contextSupport t) :hover (:dynamicRegistration :json-false :contentFormat ["plaintext"]) :signatureHelp (:dynamicRegistration :json-false :signatureInformation (:parameterInformation (:labelOffsetSupport t) :activeParameterSupport t)) :references (:dynamicRegistration :json-false) :definition (:dynamicRegistration :json-false :linkSupport t) :declaration (:dynamicRegistration :json-false :linkSupport t) :implementation (:dynamicRegistration :json-false :linkSupport t) :typeDefinition (:dynamicRegistration :json-false :linkSupport t) :documentSymbol (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind (:valueSet [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26])) :documentHighlight (:dynamicRegistration :json-false) :codeAction (:dynamicRegistration :json-false :codeActionLiteralSupport (:codeActionKind (:valueSet ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"])) :isPreferredSupport t) :formatting (:dynamicRegistration :json-false) :rangeFormatting (:dynamicRegistration :json-false) :rename (:dynamicRegistration :json-false) :inlayHint (:dynamicRegistration :json-false) :publishDiagnostics (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport (:valueSet [1 2]))) :general (:positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) :workspaceFolders [(:uri "file:///tmp/eglot--fixturehfF6Pn/project" :name "/tmp/eglot--fixturehfF6Pn/project/")])) [internal] Wed Mar 15 10:20:28 2023: (:message "Connection state changed" :change "killed\n") ----------b---y---e---b---y---e---------- [stderr] [stderr] [stderr] nil [stderr] nil [stderr] Process EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) stderr finished [eglot-tests] Killing (thingy.c), wiping /tmp/eglot--fixturehfF6Pn, restoring nil Test eglot-test-auto-shutdown backtrace: signal(error ("[eglot] Timed out after 10 seconds")) error("[eglot] %s" "Timed out after 10 seconds") eglot--error("Timed out after 10 seconds") eglot--connect((c-mode c-ts-mode c++-mode c++-ts-mode) (transient . apply(eglot--connect ((c-mode c-ts-mode c++-mode c++-ts-mode) (trans (let* ((timeout (or timeout 10)) (eglot-sync-connect t) (eglot-conne eglot--tests-connect() (setq server (eglot--tests-connect)) (setq value-44 (setq server (eglot--tests-connect))) (unwind-protect (setq value-44 (setq server (eglot--tests-connect))) (if (unwind-protect (setq value-44 (setq server (eglot--tests-connec (let (form-description-45) (if (unwind-protect (setq value-44 (setq (let ((value-44 (gensym "ert-form-evaluation-aborted-"))) (let (form (save-current-buffer (set-buffer (setq buffer (eglot--find-file-nose (closure ((buffer . #<killed buffer>) (server)) nil (save-current-bu funcall((closure ((buffer . #<killed buffer>) (server)) nil (save-cu (prog1 (funcall fn) (setq test-body-successful-p t)) (let* ((process-environment (append (list "XDG_CONFIG_HOME=/dev/null (unwind-protect (let* ((process-environment (append (list "XDG_CONFI (let* ((fixture-directory (make-nearby-temp-file "eglot--fixture" t) eglot--call-with-fixture((("project" ("thingy.c" . "int main() {retu (let (server buffer) (eglot--call-with-fixture '(("project" ("thingy (closure (typescript-mode-abbrev-table typescript-mode-syntax-table ert--run-test-internal(#s(ert--test-execution-info :test #s(ert-test ert-run-test(#s(ert-test :name eglot-test-auto-shutdown :documentati ert-run-or-rerun-test(#s(ert--stats :selector ... :tests ... :test-m ert-run-tests((not (or (tag :unstable) (tag :nativecomp))) #f(compil ert-run-tests-batch((not (or (tag :unstable) (tag :nativecomp)))) ert-run-tests-batch-and-exit((not (or (tag :unstable) (tag :nativeco eval((ert-run-tests-batch-and-exit '(not (or (tag :unstable) (tag :n command-line-1(("-L" ":." "-l" "ert" "-l" "lisp/progmodes/eglot-test command-line() normal-top-level() Test eglot-test-auto-shutdown condition: (error "[eglot] Timed out after 10 seconds") FAILED 3/50 eglot-test-auto-shutdown (10.154016 sec) at lisp/progmodes/eglot-tests.el:360 skipped 4/50 eglot-test-basic-completions (0.007256 sec) [eglot-tests] [eglot-test-basic-diagnostics]: test start [jsonrpc] Server exited with status 9 [eglot-tests] [eglot-test-basic-diagnostics]: FAILED [eglot-tests] contents of ` *EGLOT (diag-project/(c-mode c-ts-mode c++-mode c++-ts-mode)) output*': [eglot-tests] contents of ` *EGLOT (diag-project/(c-mode c-ts-mode c++-mode c++-ts-mode)) stderr*': Process EGLOT (diag-project/(c-mode c-ts-mode c++-mode c++-ts-mode)) stderr finished [eglot-tests] contents of `*EGLOT (diag-project/(c-mode c-ts-mode c++-mode c++-ts-mode)) events*': [internal] Wed Mar 15 10:20:29 2023: (:message "Running language server: /var/lib/snapd/snap/bin/clangd") [client-request] (id:1) Wed Mar 15 10:20:29 2023: (:jsonrpc "2.0" :id 1 :method "initialize" :params (:processId 2017004 :rootPath "/tmp/eglot--fixtureyg5veW/diag-project/" :rootUri "file:///tmp/eglot--fixtureyg5veW/diag-project" :initializationOptions #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()) :capabilities (:workspace (:applyEdit t :executeCommand (:dynamicRegistration :json-false) :workspaceEdit (:documentChanges t) :didChangeWatchedFiles (:dynamicRegistration t) :symbol (:dynamicRegistration :json-false) :configuration t :workspaceFolders t) :textDocument (:synchronization (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t) :completion (:dynamicRegistration :json-false :completionItem (:snippetSupport :json-false :deprecatedSupport t :resolveSupport (:properties ["documentation" "details" "additionalTextEdits"]) :tagSupport (:valueSet [1])) :contextSupport t) :hover (:dynamicRegistration :json-false :contentFormat ["plaintext"]) :signatureHelp (:dynamicRegistration :json-false :signatureInformation (:parameterInformation (:labelOffsetSupport t) :activeParameterSupport t)) :references (:dynamicRegistration :json-false) :definition (:dynamicRegistration :json-false :linkSupport t) :declaration (:dynamicRegistration :json-false :linkSupport t) :implementation (:dynamicRegistration :json-false :linkSupport t) :typeDefinition (:dynamicRegistration :json-false :linkSupport t) :documentSymbol (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind (:valueSet [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26])) :documentHighlight (:dynamicRegistration :json-false) :codeAction (:dynamicRegistration :json-false :codeActionLiteralSupport (:codeActionKind (:valueSet ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"])) :isPreferredSupport t) :formatting (:dynamicRegistration :json-false) :rangeFormatting (:dynamicRegistration :json-false) :rename (:dynamicRegistration :json-false) :inlayHint (:dynamicRegistration :json-false) :publishDiagnostics (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport (:valueSet [1 2]))) :general (:positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) :workspaceFolders [(:uri "file:///tmp/eglot--fixtureyg5veW/diag-project" :name "/tmp/eglot--fixtureyg5veW/diag-project/")])) [internal] Wed Mar 15 10:20:39 2023: (:message "Connection state changed" :change "killed\n") ----------b---y---e---b---y---e---------- [stderr] [stderr] [stderr] nil [stderr] nil [stderr] Process EGLOT (diag-project/(c-mode c-ts-mode c++-mode c++-ts-mode)) stderr finished [eglot-tests] Killing (main.c), wiping /tmp/eglot--fixtureyg5veW, restoring nil Test eglot-test-basic-diagnostics backtrace: signal(error ("[eglot] Timed out after 10 seconds")) error("[eglot] %s" "Timed out after 10 seconds") eglot--error("Timed out after 10 seconds") eglot--connect((c-mode c-ts-mode c++-mode c++-ts-mode) (transient . apply(eglot--connect ((c-mode c-ts-mode c++-mode c++-ts-mode) (trans (let* ((timeout (or timeout 10)) (eglot-sync-connect t) (eglot-conne eglot--tests-connect() (let (s-notifs) (advice-add #'jsonrpc--log-event :before #'(lambda ( (unwind-protect (let (s-notifs) (advice-add #'jsonrpc--log-event :be (save-current-buffer (set-buffer (eglot--find-file-noselect "diag-pr (closure (typescript-mode-abbrev-table typescript-mode-syntax-table funcall((closure (typescript-mode-abbrev-table typescript-mode-synta (prog1 (funcall fn) (setq test-body-successful-p t)) (let* ((process-environment (append (list "XDG_CONFIG_HOME=/dev/null (unwind-protect (let* ((process-environment (append (list "XDG_CONFI (let* ((fixture-directory (make-nearby-temp-file "eglot--fixture" t) eglot--call-with-fixture((("diag-project" ("main.c" . "int main(){fr (closure (typescript-mode-abbrev-table typescript-mode-syntax-table ert--run-test-internal(#s(ert--test-execution-info :test #s(ert-test ert-run-test(#s(ert-test :name eglot-test-basic-diagnostics :documen ert-run-or-rerun-test(#s(ert--stats :selector ... :tests ... :test-m ert-run-tests((not (or (tag :unstable) (tag :nativecomp))) #f(compil ert-run-tests-batch((not (or (tag :unstable) (tag :nativecomp)))) ert-run-tests-batch-and-exit((not (or (tag :unstable) (tag :nativeco eval((ert-run-tests-batch-and-exit '(not (or (tag :unstable) (tag :n command-line-1(("-L" ":." "-l" "ert" "-l" "lisp/progmodes/eglot-test command-line() normal-top-level() Test eglot-test-basic-diagnostics condition: (error "[eglot] Timed out after 10 seconds") FAILED 5/50 eglot-test-basic-diagnostics (10.148437 sec) at lisp/progmodes/eglot-tests.el:437 skipped 6/50 eglot-test-basic-xref (0.000175 sec) passed 7/50 eglot-test-capabilities (0.000090 sec) passed 8/50 eglot-test-dcase (0.000078 sec) passed 9/50 eglot-test-dcase-issue-452 (0.000057 sec) [eglot-tests] [eglot-test-diagnostic-tags-unnecessary-code]: test start [eglot-tests] [eglot-test-diagnostic-tags-unnecessary-code]: FAILED [eglot-tests] Killing (main.cpp), wiping /tmp/eglot--fixture1mMI9I, restoring nil Test eglot-test-diagnostic-tags-unnecessary-code backtrace: (json-serialize (vector (list ':directory default-directory ':comman (cons "compile_commands.json" (json-serialize (vector (list ':direct (eglot--make-file-or-dir (cons "compile_commands.json" (json-seriali (save-current-buffer (set-buffer (eglot--find-file-noselect "diag-pr (closure (typescript-mode-abbrev-table typescript-mode-syntax-table funcall((closure (typescript-mode-abbrev-table typescript-mode-synta (prog1 (funcall fn) (setq test-body-successful-p t)) (let* ((process-environment (append (list "XDG_CONFIG_HOME=/dev/null (unwind-protect (let* ((process-environment (append (list "XDG_CONFI (let* ((fixture-directory (make-nearby-temp-file "eglot--fixture" t) eglot--call-with-fixture((("diag-project" ("main.cpp" . "int main(){ (closure (typescript-mode-abbrev-table typescript-mode-syntax-table ert--run-test-internal(#s(ert--test-execution-info :test #s(ert-test ert-run-test(#s(ert-test :name eglot-test-diagnostic-tags-unnecessar ert-run-or-rerun-test(#s(ert--stats :selector ... :tests ... :test-m ert-run-tests((not (or (tag :unstable) (tag :nativecomp))) #f(compil ert-run-tests-batch((not (or (tag :unstable) (tag :nativecomp)))) ert-run-tests-batch-and-exit((not (or (tag :unstable) (tag :nativeco eval((ert-run-tests-batch-and-exit '(not (or (tag :unstable) (tag :n command-line-1(("-L" ":." "-l" "ert" "-l" "lisp/progmodes/eglot-test command-line() normal-top-level() Test eglot-test-diagnostic-tags-unnecessary-code condition: (void-function json-serialize) FAILED 10/50 eglot-test-diagnostic-tags-unnecessary-code (0.007393 sec) at lisp/progmodes/eglot-tests.el:455 skipped 11/50 eglot-test-eclipse-connect (0.000350 sec) skipped 12/50 eglot-test-eldoc-after-completions (0.000269 sec) [eglot-tests] [eglot-test-ensure]: test start [eglot] Waiting in background for server `EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode))' [eglot-tests] [eglot-test-ensure]: FAILED [eglot] Asking EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) politely to terminate [jsonrpc] Server exited with status 9 [eglot-tests] Non-critical cleanup error: (error "[eglot] -1: Server died") [eglot-tests] contents of ` *EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) output*': [eglot-tests] contents of ` *EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) stderr*': [eglot-tests] contents of `*EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) events*': [internal] Wed Mar 15 10:19:58 2023: (:message "Running language server: /var/lib/snapd/snap/bin/clangd") [client-request] (id:1) Wed Mar 15 10:19:58 2023: (:jsonrpc "2.0" :id 1 :method "initialize" :params (:processId 2017004 :rootPath "/tmp/eglot--fixtureGOqwaT/project/" :rootUri "file:///tmp/eglot--fixtureGOqwaT/project" :initializationOptions #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()) :capabilities (:workspace (:applyEdit t :executeCommand (:dynamicRegistration :json-false) :workspaceEdit (:documentChanges t) :didChangeWatchedFiles (:dynamicRegistration t) :symbol (:dynamicRegistration :json-false) :configuration t :workspaceFolders t) :textDocument (:synchronization (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t) :completion (:dynamicRegistration :json-false :completionItem (:snippetSupport :json-false :deprecatedSupport t :resolveSupport (:properties ["documentation" "details" "additionalTextEdits"]) :tagSupport (:valueSet [1])) :contextSupport t) :hover (:dynamicRegistration :json-false :contentFormat ["plaintext"]) :signatureHelp (:dynamicRegistration :json-false :signatureInformation (:parameterInformation (:labelOffsetSupport t) :activeParameterSupport t)) :references (:dynamicRegistration :json-false) :definition (:dynamicRegistration :json-false :linkSupport t) :declaration (:dynamicRegistration :json-false :linkSupport t) :implementation (:dynamicRegistration :json-false :linkSupport t) :typeDefinition (:dynamicRegistration :json-false :linkSupport t) :documentSymbol (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind (:valueSet [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26])) :documentHighlight (:dynamicRegistration :json-false) :codeAction (:dynamicRegistration :json-false :codeActionLiteralSupport (:codeActionKind (:valueSet ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"])) :isPreferredSupport t) :formatting (:dynamicRegistration :json-false) :rangeFormatting (:dynamicRegistration :json-false) :rename (:dynamicRegistration :json-false) :inlayHint (:dynamicRegistration :json-false) :publishDiagnostics (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport (:valueSet [1 2]))) :general (:positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) :workspaceFolders [(:uri "file:///tmp/eglot--fixtureGOqwaT/project" :name "/tmp/eglot--fixtureGOqwaT/project/")])) [internal] Wed Mar 15 10:20:08 2023: (:message "Connection state changed" :change "killed\n") ----------b---y---e---b---y---e---------- [stderr] [stderr] [stderr] nil [stderr] nil [stderr] Process EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) stderr finished [internal] Wed Mar 15 10:20:08 2023: (:message "Running language server: /var/lib/snapd/snap/bin/clangd") [client-request] (id:1) Wed Mar 15 10:20:08 2023: (:jsonrpc "2.0" :id 1 :method "initialize" :params (:processId 2017004 :rootPath "/tmp/eglot--fixturewNlzZp/project/" :rootUri "file:///tmp/eglot--fixturewNlzZp/project" :initializationOptions #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()) :capabilities (:workspace (:applyEdit t :executeCommand (:dynamicRegistration :json-false) :workspaceEdit (:documentChanges t) :didChangeWatchedFiles (:dynamicRegistration t) :symbol (:dynamicRegistration :json-false) :configuration t :workspaceFolders t) :textDocument (:synchronization (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t) :completion (:dynamicRegistration :json-false :completionItem (:snippetSupport :json-false :deprecatedSupport t :resolveSupport (:properties ["documentation" "details" "additionalTextEdits"]) :tagSupport (:valueSet [1])) :contextSupport t) :hover (:dynamicRegistration :json-false :contentFormat ["plaintext"]) :signatureHelp (:dynamicRegistration :json-false :signatureInformation (:parameterInformation (:labelOffsetSupport t) :activeParameterSupport t)) :references (:dynamicRegistration :json-false) :definition (:dynamicRegistration :json-false :linkSupport t) :declaration (:dynamicRegistration :json-false :linkSupport t) :implementation (:dynamicRegistration :json-false :linkSupport t) :typeDefinition (:dynamicRegistration :json-false :linkSupport t) :documentSymbol (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind (:valueSet [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26])) :documentHighlight (:dynamicRegistration :json-false) :codeAction (:dynamicRegistration :json-false :codeActionLiteralSupport (:codeActionKind (:valueSet ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"])) :isPreferredSupport t) :formatting (:dynamicRegistration :json-false) :rangeFormatting (:dynamicRegistration :json-false) :rename (:dynamicRegistration :json-false) :inlayHint (:dynamicRegistration :json-false) :publishDiagnostics (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport (:valueSet [1 2]))) :general (:positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) :workspaceFolders [(:uri "file:///tmp/eglot--fixturewNlzZp/project" :name "/tmp/eglot--fixturewNlzZp/project/")])) [internal] Wed Mar 15 10:20:18 2023: (:message "Connection state changed" :change "killed\n") ----------b---y---e---b---y---e---------- [stderr] [stderr] [stderr] nil [stderr] nil [stderr] Process EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) stderr finished [internal] Wed Mar 15 10:20:18 2023: (:message "Running language server: /var/lib/snapd/snap/bin/clangd") [client-request] (id:1) Wed Mar 15 10:20:18 2023: (:jsonrpc "2.0" :id 1 :method "initialize" :params (:processId 2017004 :rootPath "/tmp/eglot--fixturehfF6Pn/project/" :rootUri "file:///tmp/eglot--fixturehfF6Pn/project" :initializationOptions #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()) :capabilities (:workspace (:applyEdit t :executeCommand (:dynamicRegistration :json-false) :workspaceEdit (:documentChanges t) :didChangeWatchedFiles (:dynamicRegistration t) :symbol (:dynamicRegistration :json-false) :configuration t :workspaceFolders t) :textDocument (:synchronization (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t) :completion (:dynamicRegistration :json-false :completionItem (:snippetSupport :json-false :deprecatedSupport t :resolveSupport (:properties ["documentation" "details" "additionalTextEdits"]) :tagSupport (:valueSet [1])) :contextSupport t) :hover (:dynamicRegistration :json-false :contentFormat ["plaintext"]) :signatureHelp (:dynamicRegistration :json-false :signatureInformation (:parameterInformation (:labelOffsetSupport t) :activeParameterSupport t)) :references (:dynamicRegistration :json-false) :definition (:dynamicRegistration :json-false :linkSupport t) :declaration (:dynamicRegistration :json-false :linkSupport t) :implementation (:dynamicRegistration :json-false :linkSupport t) :typeDefinition (:dynamicRegistration :json-false :linkSupport t) :documentSymbol (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind (:valueSet [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26])) :documentHighlight (:dynamicRegistration :json-false) :codeAction (:dynamicRegistration :json-false :codeActionLiteralSupport (:codeActionKind (:valueSet ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"])) :isPreferredSupport t) :formatting (:dynamicRegistration :json-false) :rangeFormatting (:dynamicRegistration :json-false) :rename (:dynamicRegistration :json-false) :inlayHint (:dynamicRegistration :json-false) :publishDiagnostics (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport (:valueSet [1 2]))) :general (:positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) :workspaceFolders [(:uri "file:///tmp/eglot--fixturehfF6Pn/project" :name "/tmp/eglot--fixturehfF6Pn/project/")])) [internal] Wed Mar 15 10:20:28 2023: (:message "Connection state changed" :change "killed\n") ----------b---y---e---b---y---e---------- [stderr] [stderr] [stderr] nil [stderr] nil [stderr] Process EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) stderr finished [internal] Wed Mar 15 10:20:39 2023: (:message "Running language server: /var/lib/snapd/snap/bin/clangd") [client-request] (id:1) Wed Mar 15 10:20:39 2023: (:jsonrpc "2.0" :id 1 :method "initialize" :params (:processId 2017004 :rootPath "/tmp/eglot--fixtureRUxVaa/project/" :rootUri "file:///tmp/eglot--fixtureRUxVaa/project" :initializationOptions #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()) :capabilities (:workspace (:applyEdit t :executeCommand (:dynamicRegistration :json-false) :workspaceEdit (:documentChanges t) :didChangeWatchedFiles (:dynamicRegistration t) :symbol (:dynamicRegistration :json-false) :configuration t :workspaceFolders t) :textDocument (:synchronization (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t) :completion (:dynamicRegistration :json-false :completionItem (:snippetSupport :json-false :deprecatedSupport t :resolveSupport (:properties ["documentation" "details" "additionalTextEdits"]) :tagSupport (:valueSet [1])) :contextSupport t) :hover (:dynamicRegistration :json-false :contentFormat ["plaintext"]) :signatureHelp (:dynamicRegistration :json-false :signatureInformation (:parameterInformation (:labelOffsetSupport t) :activeParameterSupport t)) :references (:dynamicRegistration :json-false) :definition (:dynamicRegistration :json-false :linkSupport t) :declaration (:dynamicRegistration :json-false :linkSupport t) :implementation (:dynamicRegistration :json-false :linkSupport t) :typeDefinition (:dynamicRegistration :json-false :linkSupport t) :documentSymbol (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind (:valueSet [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26])) :documentHighlight (:dynamicRegistration :json-false) :codeAction (:dynamicRegistration :json-false :codeActionLiteralSupport (:codeActionKind (:valueSet ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"])) :isPreferredSupport t) :formatting (:dynamicRegistration :json-false) :rangeFormatting (:dynamicRegistration :json-false) :rename (:dynamicRegistration :json-false) :inlayHint (:dynamicRegistration :json-false) :publishDiagnostics (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport (:valueSet [1 2]))) :general (:positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) :workspaceFolders [(:uri "file:///tmp/eglot--fixtureRUxVaa/project" :name "/tmp/eglot--fixtureRUxVaa/project/")])) [client-request] (id:2) Wed Mar 15 10:20:42 2023: (:jsonrpc "2.0" :id 2 :method "shutdown" :params nil) [internal] Wed Mar 15 10:20:45 2023: (:message "Connection state changed" :change "killed\n") ----------b---y---e---b---y---e---------- [eglot-tests] Killing (foo.c), wiping /tmp/eglot--fixtureRUxVaa, restoring (c-mode-hook) Test eglot-test-ensure backtrace: signal(ert-test-failed (((should (setq server (eglot-current-server) ert-fail(((should (setq server (eglot-current-server))) :form (setq (if (unwind-protect (setq value-452 (setq server (eglot-current-serv (let (form-description-453) (if (unwind-protect (setq value-452 (set (let ((value-452 (gensym "ert-form-evaluation-aborted-"))) (let (for (save-current-buffer (set-buffer (ert-simulate-command '(find-file " (let (server) (save-current-buffer (set-buffer (ert-simulate-command (closure (company-candidates typescript-mode-abbrev-table typescript funcall((closure (company-candidates typescript-mode-abbrev-table ty (prog1 (funcall fn) (setq test-body-successful-p t)) (let* ((process-environment (append (list "XDG_CONFIG_HOME=/dev/null (unwind-protect (let* ((process-environment (append (list "XDG_CONFI (let* ((fixture-directory (make-nearby-temp-file "eglot--fixture" t) eglot--call-with-fixture((("project" ("foo.c" . "int foo() {return 4 (closure (company-candidates typescript-mode-abbrev-table typescript ert--run-test-internal(#s(ert--test-execution-info :test #s(ert-test ert-run-test(#s(ert-test :name eglot-test-ensure :documentation "Tes ert-run-or-rerun-test(#s(ert--stats :selector ... :tests ... :test-m ert-run-tests((not (or (tag :unstable) (tag :nativecomp))) #f(compil ert-run-tests-batch((not (or (tag :unstable) (tag :nativecomp)))) ert-run-tests-batch-and-exit((not (or (tag :unstable) (tag :nativeco eval((ert-run-tests-batch-and-exit '(not (or (tag :unstable) (tag :n command-line-1(("-L" ":." "-l" "ert" "-l" "lisp/progmodes/eglot-test command-line() normal-top-level() Test eglot-test-ensure condition: (ert-test-failed ((should (setq server (eglot-current-server))) :form (setq server (eglot-current-server)) :value nil)) FAILED 13/50 eglot-test-ensure (6.194872 sec) at lisp/progmodes/eglot-tests.el:892 passed 14/50 eglot-test-glob-test (0.064999 sec) skipped 15/50 eglot-test-javascript-basic (0.000263 sec) skipped 16/50 eglot-test-json-basic (0.000168 sec) [eglot-tests] [eglot-test-lsp-abiding-column]: test start [jsonrpc] Server exited with status 9 [eglot-tests] [eglot-test-lsp-abiding-column]: FAILED [eglot-tests] contents of ` *EGLOT (project/(c-mode)) output*': [eglot-tests] contents of ` *EGLOT (project/(c-mode)) stderr*': Process EGLOT (project/(c-mode)) stderr finished [eglot-tests] contents of `*EGLOT (project/(c-mode)) events*': [internal] Wed Mar 15 10:20:46 2023: (:message "Running language server: clangd") [client-request] (id:1) Wed Mar 15 10:20:46 2023: (:jsonrpc "2.0" :id 1 :method "initialize" :params (:processId 2017004 :rootPath "/tmp/eglot--fixturePO4VrS/project/" :rootUri "file:///tmp/eglot--fixturePO4VrS/project" :initializationOptions #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()) :capabilities (:workspace (:applyEdit t :executeCommand (:dynamicRegistration :json-false) :workspaceEdit (:documentChanges t) :didChangeWatchedFiles (:dynamicRegistration t) :symbol (:dynamicRegistration :json-false) :configuration t :workspaceFolders t) :textDocument (:synchronization (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t) :completion (:dynamicRegistration :json-false :completionItem (:snippetSupport :json-false :deprecatedSupport t :resolveSupport (:properties ["documentation" "details" "additionalTextEdits"]) :tagSupport (:valueSet [1])) :contextSupport t) :hover (:dynamicRegistration :json-false :contentFormat ["plaintext"]) :signatureHelp (:dynamicRegistration :json-false :signatureInformation (:parameterInformation (:labelOffsetSupport t) :activeParameterSupport t)) :references (:dynamicRegistration :json-false) :definition (:dynamicRegistration :json-false :linkSupport t) :declaration (:dynamicRegistration :json-false :linkSupport t) :implementation (:dynamicRegistration :json-false :linkSupport t) :typeDefinition (:dynamicRegistration :json-false :linkSupport t) :documentSymbol (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind (:valueSet [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26])) :documentHighlight (:dynamicRegistration :json-false) :codeAction (:dynamicRegistration :json-false :codeActionLiteralSupport (:codeActionKind (:valueSet ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"])) :isPreferredSupport t) :formatting (:dynamicRegistration :json-false) :rangeFormatting (:dynamicRegistration :json-false) :rename (:dynamicRegistration :json-false) :inlayHint (:dynamicRegistration :json-false) :publishDiagnostics (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport (:valueSet [1 2]))) :general (:positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) :workspaceFolders [(:uri "file:///tmp/eglot--fixturePO4VrS/project" :name "/tmp/eglot--fixturePO4VrS/project/")])) [internal] Wed Mar 15 10:20:56 2023: (:message "Connection state changed" :change "killed\n") ----------b---y---e---b---y---e---------- [stderr] [stderr] [stderr] nil [stderr] nil [stderr] Process EGLOT (project/(c-mode)) stderr finished [eglot-tests] Killing (foo.c), wiping /tmp/eglot--fixturePO4VrS, restoring nil Test eglot-test-lsp-abiding-column backtrace: signal(error ("[eglot] Timed out after 10 seconds")) error("[eglot] %s" "Timed out after 10 seconds") eglot--error("Timed out after 10 seconds") eglot--connect((c-mode) (transient . "/tmp/eglot--fixturePO4VrS/proj apply(eglot--connect ((c-mode) (transient . "/tmp/eglot--fixturePO4V (let* ((timeout (or timeout 10)) (eglot-sync-connect t) (eglot-conne eglot--tests-connect() (let (c-notifs) (advice-add #'jsonrpc--log-event :before #'(lambda ( (unwind-protect (let (c-notifs) (advice-add #'jsonrpc--log-event :be (save-current-buffer (set-buffer (eglot--find-file-noselect "project (let ((eglot-server-programs '((c-mode "clangd")))) (save-current-bu (closure (company-candidates typescript-mode-abbrev-table typescript funcall((closure (company-candidates typescript-mode-abbrev-table ty (prog1 (funcall fn) (setq test-body-successful-p t)) (let* ((process-environment (append (list "XDG_CONFIG_HOME=/dev/null (unwind-protect (let* ((process-environment (append (list "XDG_CONFI (let* ((fixture-directory (make-nearby-temp-file "eglot--fixture" t) eglot--call-with-fixture((("project" ("foo.c" . "const char write_da eglot-tests--lsp-abiding-column-1() (closure (company-candidates typescript-mode-abbrev-table typescript ert--run-test-internal(#s(ert--test-execution-info :test #s(ert-test ert-run-test(#s(ert-test :name eglot-test-lsp-abiding-column :docume ert-run-or-rerun-test(#s(ert--stats :selector ... :tests ... :test-m ert-run-tests((not (or (tag :unstable) (tag :nativecomp))) #f(compil ert-run-tests-batch((not (or (tag :unstable) (tag :nativecomp)))) ert-run-tests-batch-and-exit((not (or (tag :unstable) (tag :nativeco eval((ert-run-tests-batch-and-exit '(not (or (tag :unstable) (tag :n command-line-1(("-L" ":." "-l" "ert" "-l" "lisp/progmodes/eglot-test command-line() normal-top-level() Test eglot-test-lsp-abiding-column condition: (error "[eglot] Timed out after 10 seconds") FAILED 17/50 eglot-test-lsp-abiding-column (10.782969 sec) at lisp/progmodes/eglot-tests.el:887 skipped 18/50 eglot-test-multiline-eldoc (0.000179 sec) skipped 19/50 eglot-test-non-unique-completions (0.000155 sec) skipped 20/50 eglot-test-path-to-uri-windows (0.000084 sec) skipped 21/50 eglot-test-project-wide-diagnostics-rust-analyzer (0.000148 sec) skipped 22/50 eglot-test-project-wide-diagnostics-typescript (0.000150 sec) skipped 23/50 eglot-test-python-autopep-formatting (0.000138 sec) skipped 24/50 eglot-test-python-yapf-formatting (0.000265 sec) [eglot-tests] [eglot-test-rename-a-symbol]: test start [jsonrpc] Server exited with status 9 [eglot-tests] [eglot-test-rename-a-symbol]: FAILED [eglot-tests] contents of ` *EGLOT (rename-project/(c-mode c-ts-mode c++-mode c++-ts-mode)) output*': [eglot-tests] contents of ` *EGLOT (rename-project/(c-mode c-ts-mode c++-mode c++-ts-mode)) stderr*': Process EGLOT (rename-project/(c-mode c-ts-mode c++-mode c++-ts-mode)) stderr finished [eglot-tests] contents of `*EGLOT (rename-project/(c-mode c-ts-mode c++-mode c++-ts-mode)) events*': [internal] Wed Mar 15 10:20:56 2023: (:message "Running language server: /var/lib/snapd/snap/bin/clangd") [client-request] (id:1) Wed Mar 15 10:20:56 2023: (:jsonrpc "2.0" :id 1 :method "initialize" :params (:processId 2017004 :rootPath "/tmp/eglot--fixtureG1IY17/rename-project/" :rootUri "file:///tmp/eglot--fixtureG1IY17/rename-project" :initializationOptions #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()) :capabilities (:workspace (:applyEdit t :executeCommand (:dynamicRegistration :json-false) :workspaceEdit (:documentChanges t) :didChangeWatchedFiles (:dynamicRegistration t) :symbol (:dynamicRegistration :json-false) :configuration t :workspaceFolders t) :textDocument (:synchronization (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t) :completion (:dynamicRegistration :json-false :completionItem (:snippetSupport :json-false :deprecatedSupport t :resolveSupport (:properties ["documentation" "details" "additionalTextEdits"]) :tagSupport (:valueSet [1])) :contextSupport t) :hover (:dynamicRegistration :json-false :contentFormat ["plaintext"]) :signatureHelp (:dynamicRegistration :json-false :signatureInformation (:parameterInformation (:labelOffsetSupport t) :activeParameterSupport t)) :references (:dynamicRegistration :json-false) :definition (:dynamicRegistration :json-false :linkSupport t) :declaration (:dynamicRegistration :json-false :linkSupport t) :implementation (:dynamicRegistration :json-false :linkSupport t) :typeDefinition (:dynamicRegistration :json-false :linkSupport t) :documentSymbol (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind (:valueSet [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26])) :documentHighlight (:dynamicRegistration :json-false) :codeAction (:dynamicRegistration :json-false :codeActionLiteralSupport (:codeActionKind (:valueSet ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"])) :isPreferredSupport t) :formatting (:dynamicRegistration :json-false) :rangeFormatting (:dynamicRegistration :json-false) :rename (:dynamicRegistration :json-false) :inlayHint (:dynamicRegistration :json-false) :publishDiagnostics (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport (:valueSet [1 2]))) :general (:positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) :workspaceFolders [(:uri "file:///tmp/eglot--fixtureG1IY17/rename-project" :name "/tmp/eglot--fixtureG1IY17/rename-project/")])) [internal] Wed Mar 15 10:21:06 2023: (:message "Connection state changed" :change "killed\n") ----------b---y---e---b---y---e---------- [stderr] [stderr] [stderr] nil [stderr] nil [stderr] Process EGLOT (rename-project/(c-mode c-ts-mode c++-mode c++-ts-mode)) stderr finished [eglot-tests] Killing (main.c), wiping /tmp/eglot--fixtureG1IY17, restoring nil Test eglot-test-rename-a-symbol backtrace: signal(error ("[eglot] Timed out after 10 seconds")) error("[eglot] %s" "Timed out after 10 seconds") eglot--error("Timed out after 10 seconds") eglot--connect((c-mode c-ts-mode c++-mode c++-ts-mode) (transient . apply(eglot--connect ((c-mode c-ts-mode c++-mode c++-ts-mode) (trans (let* ((timeout (or timeout 10)) (eglot-sync-connect t) (eglot-conne eglot--tests-connect() (save-current-buffer (set-buffer (eglot--find-file-noselect "rename- (closure (typescript-mode-abbrev-table typescript-mode-syntax-table funcall((closure (typescript-mode-abbrev-table typescript-mode-synta (prog1 (funcall fn) (setq test-body-successful-p t)) (let* ((process-environment (append (list "XDG_CONFIG_HOME=/dev/null (unwind-protect (let* ((process-environment (append (list "XDG_CONFI (let* ((fixture-directory (make-nearby-temp-file "eglot--fixture" t) eglot--call-with-fixture((("rename-project" ("main.c" . "int foo() { (closure (typescript-mode-abbrev-table typescript-mode-syntax-table ert--run-test-internal(#s(ert--test-execution-info :test #s(ert-test ert-run-test(#s(ert-test :name eglot-test-rename-a-symbol :documenta ert-run-or-rerun-test(#s(ert--stats :selector ... :tests ... :test-m ert-run-tests((not (or (tag :unstable) (tag :nativecomp))) #f(compil ert-run-tests-batch((not (or (tag :unstable) (tag :nativecomp)))) ert-run-tests-batch-and-exit((not (or (tag :unstable) (tag :nativeco eval((ert-run-tests-batch-and-exit '(not (or (tag :unstable) (tag :n command-line-1(("-L" ":." "-l" "ert" "-l" "lisp/progmodes/eglot-test command-line() normal-top-level() Test eglot-test-rename-a-symbol condition: (error "[eglot] Timed out after 10 seconds") FAILED 25/50 eglot-test-rename-a-symbol (10.163936 sec) at lisp/progmodes/eglot-tests.el:534 skipped 26/50 eglot-test-rust-analyzer-hover-after-edit (0.000172 sec) skipped 27/50 eglot-test-rust-analyzer-watches-files (0.000147 sec) skipped 28/50 eglot-test-rust-on-type-formatting (0.000152 sec) [eglot-tests] [eglot-test-same-server-multi-mode]: test start [jsonrpc] Server exited with status 9 [eglot-tests] [eglot-test-same-server-multi-mode]: FAILED [eglot-tests] contents of ` *EGLOT (project/(c++-mode c-mode c-ts-mode c++-ts-mode)) output*': [eglot-tests] contents of ` *EGLOT (project/(c++-mode c-mode c-ts-mode c++-ts-mode)) stderr*': Process EGLOT (project/(c++-mode c-mode c-ts-mode c++-ts-mode)) stderr finished [eglot-tests] contents of `*EGLOT (project/(c++-mode c-mode c-ts-mode c++-ts-mode)) events*': [internal] Wed Mar 15 10:21:07 2023: (:message "Running language server: /var/lib/snapd/snap/bin/clangd") [client-request] (id:1) Wed Mar 15 10:21:07 2023: (:jsonrpc "2.0" :id 1 :method "initialize" :params (:processId 2017004 :rootPath "/tmp/eglot--fixtureZNVza4/project/" :rootUri "file:///tmp/eglot--fixtureZNVza4/project" :initializationOptions #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()) :capabilities (:workspace (:applyEdit t :executeCommand (:dynamicRegistration :json-false) :workspaceEdit (:documentChanges t) :didChangeWatchedFiles (:dynamicRegistration t) :symbol (:dynamicRegistration :json-false) :configuration t :workspaceFolders t) :textDocument (:synchronization (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t) :completion (:dynamicRegistration :json-false :completionItem (:snippetSupport :json-false :deprecatedSupport t :resolveSupport (:properties ["documentation" "details" "additionalTextEdits"]) :tagSupport (:valueSet [1])) :contextSupport t) :hover (:dynamicRegistration :json-false :contentFormat ["plaintext"]) :signatureHelp (:dynamicRegistration :json-false :signatureInformation (:parameterInformation (:labelOffsetSupport t) :activeParameterSupport t)) :references (:dynamicRegistration :json-false) :definition (:dynamicRegistration :json-false :linkSupport t) :declaration (:dynamicRegistration :json-false :linkSupport t) :implementation (:dynamicRegistration :json-false :linkSupport t) :typeDefinition (:dynamicRegistration :json-false :linkSupport t) :documentSymbol (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind (:valueSet [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26])) :documentHighlight (:dynamicRegistration :json-false) :codeAction (:dynamicRegistration :json-false :codeActionLiteralSupport (:codeActionKind (:valueSet ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"])) :isPreferredSupport t) :formatting (:dynamicRegistration :json-false) :rangeFormatting (:dynamicRegistration :json-false) :rename (:dynamicRegistration :json-false) :inlayHint (:dynamicRegistration :json-false) :publishDiagnostics (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport (:valueSet [1 2]))) :general (:positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) :workspaceFolders [(:uri "file:///tmp/eglot--fixtureZNVza4/project" :name "/tmp/eglot--fixtureZNVza4/project/")])) [internal] Wed Mar 15 10:21:17 2023: (:message "Connection state changed" :change "killed\n") ----------b---y---e---b---y---e---------- [stderr] [stderr] [stderr] nil [stderr] nil [stderr] Process EGLOT (project/(c++-mode c-mode c-ts-mode c++-ts-mode)) stderr finished [eglot-tests] Killing (foo.cpp), wiping /tmp/eglot--fixtureZNVza4, restoring nil Test eglot-test-same-server-multi-mode backtrace: signal(error ("[eglot] Timed out after 10 seconds")) error("[eglot] %s" "Timed out after 10 seconds") eglot--error("Timed out after 10 seconds") eglot--connect((c++-mode c-mode c-ts-mode c++-ts-mode) (transient . apply(eglot--connect ((c++-mode c-mode c-ts-mode c++-ts-mode) (trans (let* ((timeout (or timeout 10)) (eglot-sync-connect t) (eglot-conne eglot--tests-connect() (setq server (eglot--tests-connect)) (setq value-935 (setq server (eglot--tests-connect))) (unwind-protect (setq value-935 (setq server (eglot--tests-connect)) (if (unwind-protect (setq value-935 (setq server (eglot--tests-conne (let (form-description-936) (if (unwind-protect (setq value-935 (set (let ((value-935 (gensym "ert-form-evaluation-aborted-"))) (let (for (save-current-buffer (set-buffer (eglot--find-file-noselect "project (closure ((server)) nil (save-current-buffer (set-buffer (eglot--fin funcall((closure ((server)) nil (save-current-buffer (set-buffer (eg (prog1 (funcall fn) (setq test-body-successful-p t)) (let* ((process-environment (append (list "XDG_CONFIG_HOME=/dev/null (unwind-protect (let* ((process-environment (append (list "XDG_CONFI (let* ((fixture-directory (make-nearby-temp-file "eglot--fixture" t) eglot--call-with-fixture((("project" ("foo.cpp" . "#include \"foolib (let (server) (eglot--call-with-fixture '(("project" ("foo.cpp" . "# (closure (tramp-histfile-override company-candidates typescript-mode ert--run-test-internal(#s(ert--test-execution-info :test #s(ert-test ert-run-test(#s(ert-test :name eglot-test-same-server-multi-mode :do ert-run-or-rerun-test(#s(ert--stats :selector ... :tests ... :test-m ert-run-tests((not (or (tag :unstable) (tag :nativecomp))) #f(compil ert-run-tests-batch((not (or (tag :unstable) (tag :nativecomp)))) ert-run-tests-batch-and-exit((not (or (tag :unstable) (tag :nativeco eval((ert-run-tests-batch-and-exit '(not (or (tag :unstable) (tag :n command-line-1(("-L" ":." "-l" "ert" "-l" "lisp/progmodes/eglot-test command-line() normal-top-level() Test eglot-test-same-server-multi-mode condition: (error "[eglot] Timed out after 10 seconds") FAILED 29/50 eglot-test-same-server-multi-mode (10.139735 sec) at lisp/progmodes/eglot-tests.el:1306 passed 30/50 eglot-test-server-programs-class-name-and-contact-spec (0.017128 sec) passed 31/50 eglot-test-server-programs-class-name-and-plist (0.000161 sec) passed 32/50 eglot-test-server-programs-executable-multiple-major-modes (0.000165 sec) passed 33/50 eglot-test-server-programs-executable-with-arg (0.000158 sec) passed 34/50 eglot-test-server-programs-executable-with-args-and-autoport (0.000167 sec) passed 35/50 eglot-test-server-programs-function (0.000157 sec) passed 36/50 eglot-test-server-programs-guess-lang (0.000319 sec) passed 37/50 eglot-test-server-programs-host-and-port (0.000149 sec) passed 38/50 eglot-test-server-programs-host-and-port-and-tcp-args (0.000148 sec) passed 39/50 eglot-test-server-programs-simple-executable (0.000155 sec) passed 40/50 eglot-test-server-programs-simple-missing-executable (0.000160 sec) skipped 41/50 eglot-test-single-line-eldoc (0.000162 sec) [eglot-tests] [eglot-test-slow-async-connection]: test start [eglot] Waiting in background for server `EGLOT (project/(c-mode))' [eglot-tests] [eglot-test-slow-async-connection]: FAILED [eglot] Asking EGLOT (project/(c-mode)) politely to terminate [jsonrpc] Server exited with status 9 [eglot-tests] Non-critical cleanup error: (error "[eglot] -1: Server died") [eglot-tests] contents of ` *EGLOT (project/(c-mode)) output*': [eglot-tests] contents of ` *EGLOT (project/(c-mode)) stderr*': [eglot-tests] contents of `*EGLOT (project/(c-mode)) events*': [internal] Wed Mar 15 10:20:46 2023: (:message "Running language server: clangd") [client-request] (id:1) Wed Mar 15 10:20:46 2023: (:jsonrpc "2.0" :id 1 :method "initialize" :params (:processId 2017004 :rootPath "/tmp/eglot--fixturePO4VrS/project/" :rootUri "file:///tmp/eglot--fixturePO4VrS/project" :initializationOptions #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()) :capabilities (:workspace (:applyEdit t :executeCommand (:dynamicRegistration :json-false) :workspaceEdit (:documentChanges t) :didChangeWatchedFiles (:dynamicRegistration t) :symbol (:dynamicRegistration :json-false) :configuration t :workspaceFolders t) :textDocument (:synchronization (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t) :completion (:dynamicRegistration :json-false :completionItem (:snippetSupport :json-false :deprecatedSupport t :resolveSupport (:properties ["documentation" "details" "additionalTextEdits"]) :tagSupport (:valueSet [1])) :contextSupport t) :hover (:dynamicRegistration :json-false :contentFormat ["plaintext"]) :signatureHelp (:dynamicRegistration :json-false :signatureInformation (:parameterInformation (:labelOffsetSupport t) :activeParameterSupport t)) :references (:dynamicRegistration :json-false) :definition (:dynamicRegistration :json-false :linkSupport t) :declaration (:dynamicRegistration :json-false :linkSupport t) :implementation (:dynamicRegistration :json-false :linkSupport t) :typeDefinition (:dynamicRegistration :json-false :linkSupport t) :documentSymbol (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind (:valueSet [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26])) :documentHighlight (:dynamicRegistration :json-false) :codeAction (:dynamicRegistration :json-false :codeActionLiteralSupport (:codeActionKind (:valueSet ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"])) :isPreferredSupport t) :formatting (:dynamicRegistration :json-false) :rangeFormatting (:dynamicRegistration :json-false) :rename (:dynamicRegistration :json-false) :inlayHint (:dynamicRegistration :json-false) :publishDiagnostics (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport (:valueSet [1 2]))) :general (:positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) :workspaceFolders [(:uri "file:///tmp/eglot--fixturePO4VrS/project" :name "/tmp/eglot--fixturePO4VrS/project/")])) [internal] Wed Mar 15 10:20:56 2023: (:message "Connection state changed" :change "killed\n") ----------b---y---e---b---y---e---------- [stderr] [stderr] [stderr] nil [stderr] nil [stderr] Process EGLOT (project/(c-mode)) stderr finished [internal] Wed Mar 15 10:21:17 2023: (:message "Running language server: sh -c sleep 2 && clangd") [client-request] (id:1) Wed Mar 15 10:21:17 2023: (:jsonrpc "2.0" :id 1 :method "initialize" :params (:processId 2017004 :rootPath "/tmp/eglot--fixturevereoR/project/" :rootUri "file:///tmp/eglot--fixturevereoR/project" :initializationOptions #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()) :capabilities (:workspace (:applyEdit t :executeCommand (:dynamicRegistration :json-false) :workspaceEdit (:documentChanges t) :didChangeWatchedFiles (:dynamicRegistration t) :symbol (:dynamicRegistration :json-false) :configuration t :workspaceFolders t) :textDocument (:synchronization (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t) :completion (:dynamicRegistration :json-false :completionItem (:snippetSupport :json-false :deprecatedSupport t :resolveSupport (:properties ["documentation" "details" "additionalTextEdits"]) :tagSupport (:valueSet [1])) :contextSupport t) :hover (:dynamicRegistration :json-false :contentFormat ["plaintext"]) :signatureHelp (:dynamicRegistration :json-false :signatureInformation (:parameterInformation (:labelOffsetSupport t) :activeParameterSupport t)) :references (:dynamicRegistration :json-false) :definition (:dynamicRegistration :json-false :linkSupport t) :declaration (:dynamicRegistration :json-false :linkSupport t) :implementation (:dynamicRegistration :json-false :linkSupport t) :typeDefinition (:dynamicRegistration :json-false :linkSupport t) :documentSymbol (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind (:valueSet [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26])) :documentHighlight (:dynamicRegistration :json-false) :codeAction (:dynamicRegistration :json-false :codeActionLiteralSupport (:codeActionKind (:valueSet ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"])) :isPreferredSupport t) :formatting (:dynamicRegistration :json-false) :rangeFormatting (:dynamicRegistration :json-false) :rename (:dynamicRegistration :json-false) :inlayHint (:dynamicRegistration :json-false) :publishDiagnostics (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport (:valueSet [1 2]))) :general (:positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) :workspaceFolders [(:uri "file:///tmp/eglot--fixturevereoR/project" :name "/tmp/eglot--fixturevereoR/project/")])) [client-request] (id:2) Wed Mar 15 10:21:21 2023: (:jsonrpc "2.0" :id 2 :method "shutdown" :params nil) [internal] Wed Mar 15 10:21:24 2023: (:message "Connection state changed" :change "killed\n") ----------b---y---e---b---y---e---------- [eglot-tests] Killing (something.c), wiping /tmp/eglot--fixturevereoR, restoring nil Test eglot-test-slow-async-connection backtrace: signal(error ("Timed out waiting for test to finish")) error("%s" "Timed out waiting for test to finish") (progn (error "%s" (concat "Timed out " message))) (if (eq retval timed-out) (progn (error "%s" (concat "Timed out " me (unwind-protect (setq retval (catch tag (setq timer (run-with-timer (let* ((tag (gensym "eglot-test-timeout")) (timed-out (make-symbol " eglot--call-with-timeout(3 (closure (company-candidates typescript-m (let ((eglot-sync-connect 1) (eglot-server-programs '((c-mode "sh" " (save-current-buffer (set-buffer (eglot--find-file-noselect "project (closure (company-candidates typescript-mode-abbrev-table typescript funcall((closure (company-candidates typescript-mode-abbrev-table ty (prog1 (funcall fn) (setq test-body-successful-p t)) (let* ((process-environment (append (list "XDG_CONFIG_HOME=/dev/null (unwind-protect (let* ((process-environment (append (list "XDG_CONFI (let* ((fixture-directory (make-nearby-temp-file "eglot--fixture" t) eglot--call-with-fixture((("project" ("something.c" . "int foo() {re (closure (company-candidates typescript-mode-abbrev-table typescript ert--run-test-internal(#s(ert--test-execution-info :test #s(ert-test ert-run-test(#s(ert-test :name eglot-test-slow-async-connection :doc ert-run-or-rerun-test(#s(ert--stats :selector ... :tests ... :test-m ert-run-tests((not (or (tag :unstable) (tag :nativecomp))) #f(compil ert-run-tests-batch((not (or (tag :unstable) (tag :nativecomp)))) ert-run-tests-batch-and-exit((not (or (tag :unstable) (tag :nativeco eval((ert-run-tests-batch-and-exit '(not (or (tag :unstable) (tag :n command-line-1(("-L" ":." "-l" "ert" "-l" "lisp/progmodes/eglot-test command-line() normal-top-level() Test eglot-test-slow-async-connection condition: (error "Timed out waiting for test to finish") FAILED 42/50 eglot-test-slow-async-connection (7.049764 sec) at lisp/progmodes/eglot-tests.el:938 [eglot-tests] [eglot-test-slow-sync-connection-intime]: test start [jsonrpc] Server exited with status 9 [eglot-tests] [eglot-test-slow-sync-connection-intime]: FAILED [eglot-tests] contents of ` *EGLOT (project/(c-mode)) output*': [eglot-tests] contents of ` *EGLOT (project/(c-mode)) stderr*': Process EGLOT (project/(c-mode)) stderr<1> finished [eglot-tests] contents of `*EGLOT (project/(c-mode)) events*': [internal] Wed Mar 15 10:20:46 2023: (:message "Running language server: clangd") [client-request] (id:1) Wed Mar 15 10:20:46 2023: (:jsonrpc "2.0" :id 1 :method "initialize" :params (:processId 2017004 :rootPath "/tmp/eglot--fixturePO4VrS/project/" :rootUri "file:///tmp/eglot--fixturePO4VrS/project" :initializationOptions #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()) :capabilities (:workspace (:applyEdit t :executeCommand (:dynamicRegistration :json-false) :workspaceEdit (:documentChanges t) :didChangeWatchedFiles (:dynamicRegistration t) :symbol (:dynamicRegistration :json-false) :configuration t :workspaceFolders t) :textDocument (:synchronization (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t) :completion (:dynamicRegistration :json-false :completionItem (:snippetSupport :json-false :deprecatedSupport t :resolveSupport (:properties ["documentation" "details" "additionalTextEdits"]) :tagSupport (:valueSet [1])) :contextSupport t) :hover (:dynamicRegistration :json-false :contentFormat ["plaintext"]) :signatureHelp (:dynamicRegistration :json-false :signatureInformation (:parameterInformation (:labelOffsetSupport t) :activeParameterSupport t)) :references (:dynamicRegistration :json-false) :definition (:dynamicRegistration :json-false :linkSupport t) :declaration (:dynamicRegistration :json-false :linkSupport t) :implementation (:dynamicRegistration :json-false :linkSupport t) :typeDefinition (:dynamicRegistration :json-false :linkSupport t) :documentSymbol (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind (:valueSet [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26])) :documentHighlight (:dynamicRegistration :json-false) :codeAction (:dynamicRegistration :json-false :codeActionLiteralSupport (:codeActionKind (:valueSet ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"])) :isPreferredSupport t) :formatting (:dynamicRegistration :json-false) :rangeFormatting (:dynamicRegistration :json-false) :rename (:dynamicRegistration :json-false) :inlayHint (:dynamicRegistration :json-false) :publishDiagnostics (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport (:valueSet [1 2]))) :general (:positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) :workspaceFolders [(:uri "file:///tmp/eglot--fixturePO4VrS/project" :name "/tmp/eglot--fixturePO4VrS/project/")])) [internal] Wed Mar 15 10:20:56 2023: (:message "Connection state changed" :change "killed\n") ----------b---y---e---b---y---e---------- [stderr] [stderr] [stderr] nil [stderr] nil [stderr] Process EGLOT (project/(c-mode)) stderr finished [internal] Wed Mar 15 10:21:17 2023: (:message "Running language server: sh -c sleep 2 && clangd") [client-request] (id:1) Wed Mar 15 10:21:17 2023: (:jsonrpc "2.0" :id 1 :method "initialize" :params (:processId 2017004 :rootPath "/tmp/eglot--fixturevereoR/project/" :rootUri "file:///tmp/eglot--fixturevereoR/project" :initializationOptions #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()) :capabilities (:workspace (:applyEdit t :executeCommand (:dynamicRegistration :json-false) :workspaceEdit (:documentChanges t) :didChangeWatchedFiles (:dynamicRegistration t) :symbol (:dynamicRegistration :json-false) :configuration t :workspaceFolders t) :textDocument (:synchronization (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t) :completion (:dynamicRegistration :json-false :completionItem (:snippetSupport :json-false :deprecatedSupport t :resolveSupport (:properties ["documentation" "details" "additionalTextEdits"]) :tagSupport (:valueSet [1])) :contextSupport t) :hover (:dynamicRegistration :json-false :contentFormat ["plaintext"]) :signatureHelp (:dynamicRegistration :json-false :signatureInformation (:parameterInformation (:labelOffsetSupport t) :activeParameterSupport t)) :references (:dynamicRegistration :json-false) :definition (:dynamicRegistration :json-false :linkSupport t) :declaration (:dynamicRegistration :json-false :linkSupport t) :implementation (:dynamicRegistration :json-false :linkSupport t) :typeDefinition (:dynamicRegistration :json-false :linkSupport t) :documentSymbol (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind (:valueSet [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26])) :documentHighlight (:dynamicRegistration :json-false) :codeAction (:dynamicRegistration :json-false :codeActionLiteralSupport (:codeActionKind (:valueSet ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"])) :isPreferredSupport t) :formatting (:dynamicRegistration :json-false) :rangeFormatting (:dynamicRegistration :json-false) :rename (:dynamicRegistration :json-false) :inlayHint (:dynamicRegistration :json-false) :publishDiagnostics (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport (:valueSet [1 2]))) :general (:positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) :workspaceFolders [(:uri "file:///tmp/eglot--fixturevereoR/project" :name "/tmp/eglot--fixturevereoR/project/")])) [client-request] (id:2) Wed Mar 15 10:21:21 2023: (:jsonrpc "2.0" :id 2 :method "shutdown" :params nil) [internal] Wed Mar 15 10:21:24 2023: (:message "Connection state changed" :change "killed\n") ----------b---y---e---b---y---e---------- [stderr] [stderr] [stderr] nil [stderr] nil [stderr] Process EGLOT (project/(c-mode)) stderr finished [internal] Wed Mar 15 10:21:24 2023: (:message "Running language server: sh -c sleep 1 && clangd") [client-request] (id:1) Wed Mar 15 10:21:24 2023: (:jsonrpc "2.0" :id 1 :method "initialize" :params (:processId 2017004 :rootPath "/tmp/eglot--fixturergwKZj/project/" :rootUri "file:///tmp/eglot--fixturergwKZj/project" :initializationOptions #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()) :capabilities (:workspace (:applyEdit t :executeCommand (:dynamicRegistration :json-false) :workspaceEdit (:documentChanges t) :didChangeWatchedFiles (:dynamicRegistration t) :symbol (:dynamicRegistration :json-false) :configuration t :workspaceFolders t) :textDocument (:synchronization (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t) :completion (:dynamicRegistration :json-false :completionItem (:snippetSupport :json-false :deprecatedSupport t :resolveSupport (:properties ["documentation" "details" "additionalTextEdits"]) :tagSupport (:valueSet [1])) :contextSupport t) :hover (:dynamicRegistration :json-false :contentFormat ["plaintext"]) :signatureHelp (:dynamicRegistration :json-false :signatureInformation (:parameterInformation (:labelOffsetSupport t) :activeParameterSupport t)) :references (:dynamicRegistration :json-false) :definition (:dynamicRegistration :json-false :linkSupport t) :declaration (:dynamicRegistration :json-false :linkSupport t) :implementation (:dynamicRegistration :json-false :linkSupport t) :typeDefinition (:dynamicRegistration :json-false :linkSupport t) :documentSymbol (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind (:valueSet [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26])) :documentHighlight (:dynamicRegistration :json-false) :codeAction (:dynamicRegistration :json-false :codeActionLiteralSupport (:codeActionKind (:valueSet ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"])) :isPreferredSupport t) :formatting (:dynamicRegistration :json-false) :rangeFormatting (:dynamicRegistration :json-false) :rename (:dynamicRegistration :json-false) :inlayHint (:dynamicRegistration :json-false) :publishDiagnostics (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport (:valueSet [1 2]))) :general (:positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) :workspaceFolders [(:uri "file:///tmp/eglot--fixturergwKZj/project" :name "/tmp/eglot--fixturergwKZj/project/")])) [internal] Wed Mar 15 10:21:27 2023: (:message "Connection state changed" :change "killed\n") ----------b---y---e---b---y---e---------- [stderr] [stderr] [stderr] nil [stderr] nil [stderr] Process EGLOT (project/(c-mode)) stderr<1> finished [eglot-tests] Killing (something.c), wiping /tmp/eglot--fixturergwKZj, restoring nil Test eglot-test-slow-sync-connection-intime backtrace: signal(error ("[eglot] Timed out after 3 seconds")) error("[eglot] %s" "Timed out after 3 seconds") eglot--error("Timed out after 3 seconds") eglot--connect((c-mode) (transient . "/tmp/eglot--fixturergwKZj/proj apply(eglot--connect ((c-mode) (transient . "/tmp/eglot--fixturergwK (let* ((timeout (or timeout 10)) (eglot-sync-connect t) (eglot-conne eglot--tests-connect(3) apply(eglot--tests-connect 3) (setq value-476 (apply fn-474 args-475)) (unwind-protect (setq value-476 (apply fn-474 args-475)) (setq form- (if (unwind-protect (setq value-476 (apply fn-474 args-475)) (setq f (let (form-description-478) (if (unwind-protect (setq value-476 (app (let ((value-476 'ert-form-evaluation-aborted-477)) (let (form-descr (let* ((fn-474 #'eglot--tests-connect) (args-475 (condition-case err (let ((eglot-sync-connect 2) (eglot-server-programs '((c-mode "sh" " (save-current-buffer (set-buffer (eglot--find-file-noselect "project (closure (company-candidates typescript-mode-abbrev-table typescript funcall((closure (company-candidates typescript-mode-abbrev-table ty (prog1 (funcall fn) (setq test-body-successful-p t)) (let* ((process-environment (append (list "XDG_CONFIG_HOME=/dev/null (unwind-protect (let* ((process-environment (append (list "XDG_CONFI (let* ((fixture-directory (make-nearby-temp-file "eglot--fixture" t) eglot--call-with-fixture((("project" ("something.c" . "int foo() {re (closure (company-candidates typescript-mode-abbrev-table typescript ert--run-test-internal(#s(ert--test-execution-info :test #s(ert-test ert-run-test(#s(ert-test :name eglot-test-slow-sync-connection-intim ert-run-or-rerun-test(#s(ert--stats :selector ... :tests ... :test-m ert-run-tests((not (or (tag :unstable) (tag :nativecomp))) #f(compil ert-run-tests-batch((not (or (tag :unstable) (tag :nativecomp)))) ert-run-tests-batch-and-exit((not (or (tag :unstable) (tag :nativeco eval((ert-run-tests-batch-and-exit '(not (or (tag :unstable) (tag :n command-line-1(("-L" ":." "-l" "ert" "-l" "lisp/progmodes/eglot-test command-line() normal-top-level() Test eglot-test-slow-sync-connection-intime condition: (error "[eglot] Timed out after 3 seconds") FAILED 43/50 eglot-test-slow-sync-connection-intime (3.150838 sec) at lisp/progmodes/eglot-tests.el:926 [eglot-tests] [eglot-test-slow-sync-connection-wait]: test start [jsonrpc] Server exited with status 9 [eglot-tests] [eglot-test-slow-sync-connection-wait]: FAILED [eglot-tests] contents of ` *EGLOT (project/(c-mode)) output*': [eglot-tests] contents of ` *EGLOT (project/(c-mode)) stderr*': Process EGLOT (project/(c-mode)) stderr finished [eglot-tests] contents of `*EGLOT (project/(c-mode)) events*': [internal] Wed Mar 15 10:20:46 2023: (:message "Running language server: clangd") [client-request] (id:1) Wed Mar 15 10:20:46 2023: (:jsonrpc "2.0" :id 1 :method "initialize" :params (:processId 2017004 :rootPath "/tmp/eglot--fixturePO4VrS/project/" :rootUri "file:///tmp/eglot--fixturePO4VrS/project" :initializationOptions #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()) :capabilities (:workspace (:applyEdit t :executeCommand (:dynamicRegistration :json-false) :workspaceEdit (:documentChanges t) :didChangeWatchedFiles (:dynamicRegistration t) :symbol (:dynamicRegistration :json-false) :configuration t :workspaceFolders t) :textDocument (:synchronization (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t) :completion (:dynamicRegistration :json-false :completionItem (:snippetSupport :json-false :deprecatedSupport t :resolveSupport (:properties ["documentation" "details" "additionalTextEdits"]) :tagSupport (:valueSet [1])) :contextSupport t) :hover (:dynamicRegistration :json-false :contentFormat ["plaintext"]) :signatureHelp (:dynamicRegistration :json-false :signatureInformation (:parameterInformation (:labelOffsetSupport t) :activeParameterSupport t)) :references (:dynamicRegistration :json-false) :definition (:dynamicRegistration :json-false :linkSupport t) :declaration (:dynamicRegistration :json-false :linkSupport t) :implementation (:dynamicRegistration :json-false :linkSupport t) :typeDefinition (:dynamicRegistration :json-false :linkSupport t) :documentSymbol (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind (:valueSet [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26])) :documentHighlight (:dynamicRegistration :json-false) :codeAction (:dynamicRegistration :json-false :codeActionLiteralSupport (:codeActionKind (:valueSet ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"])) :isPreferredSupport t) :formatting (:dynamicRegistration :json-false) :rangeFormatting (:dynamicRegistration :json-false) :rename (:dynamicRegistration :json-false) :inlayHint (:dynamicRegistration :json-false) :publishDiagnostics (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport (:valueSet [1 2]))) :general (:positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) :workspaceFolders [(:uri "file:///tmp/eglot--fixturePO4VrS/project" :name "/tmp/eglot--fixturePO4VrS/project/")])) [internal] Wed Mar 15 10:20:56 2023: (:message "Connection state changed" :change "killed\n") ----------b---y---e---b---y---e---------- [stderr] [stderr] [stderr] nil [stderr] nil [stderr] Process EGLOT (project/(c-mode)) stderr finished [internal] Wed Mar 15 10:21:17 2023: (:message "Running language server: sh -c sleep 2 && clangd") [client-request] (id:1) Wed Mar 15 10:21:17 2023: (:jsonrpc "2.0" :id 1 :method "initialize" :params (:processId 2017004 :rootPath "/tmp/eglot--fixturevereoR/project/" :rootUri "file:///tmp/eglot--fixturevereoR/project" :initializationOptions #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()) :capabilities (:workspace (:applyEdit t :executeCommand (:dynamicRegistration :json-false) :workspaceEdit (:documentChanges t) :didChangeWatchedFiles (:dynamicRegistration t) :symbol (:dynamicRegistration :json-false) :configuration t :workspaceFolders t) :textDocument (:synchronization (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t) :completion (:dynamicRegistration :json-false :completionItem (:snippetSupport :json-false :deprecatedSupport t :resolveSupport (:properties ["documentation" "details" "additionalTextEdits"]) :tagSupport (:valueSet [1])) :contextSupport t) :hover (:dynamicRegistration :json-false :contentFormat ["plaintext"]) :signatureHelp (:dynamicRegistration :json-false :signatureInformation (:parameterInformation (:labelOffsetSupport t) :activeParameterSupport t)) :references (:dynamicRegistration :json-false) :definition (:dynamicRegistration :json-false :linkSupport t) :declaration (:dynamicRegistration :json-false :linkSupport t) :implementation (:dynamicRegistration :json-false :linkSupport t) :typeDefinition (:dynamicRegistration :json-false :linkSupport t) :documentSymbol (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind (:valueSet [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26])) :documentHighlight (:dynamicRegistration :json-false) :codeAction (:dynamicRegistration :json-false :codeActionLiteralSupport (:codeActionKind (:valueSet ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"])) :isPreferredSupport t) :formatting (:dynamicRegistration :json-false) :rangeFormatting (:dynamicRegistration :json-false) :rename (:dynamicRegistration :json-false) :inlayHint (:dynamicRegistration :json-false) :publishDiagnostics (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport (:valueSet [1 2]))) :general (:positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) :workspaceFolders [(:uri "file:///tmp/eglot--fixturevereoR/project" :name "/tmp/eglot--fixturevereoR/project/")])) [client-request] (id:2) Wed Mar 15 10:21:21 2023: (:jsonrpc "2.0" :id 2 :method "shutdown" :params nil) [internal] Wed Mar 15 10:21:24 2023: (:message "Connection state changed" :change "killed\n") ----------b---y---e---b---y---e---------- [stderr] [stderr] [stderr] nil [stderr] nil [stderr] Process EGLOT (project/(c-mode)) stderr finished [internal] Wed Mar 15 10:21:24 2023: (:message "Running language server: sh -c sleep 1 && clangd") [client-request] (id:1) Wed Mar 15 10:21:24 2023: (:jsonrpc "2.0" :id 1 :method "initialize" :params (:processId 2017004 :rootPath "/tmp/eglot--fixturergwKZj/project/" :rootUri "file:///tmp/eglot--fixturergwKZj/project" :initializationOptions #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()) :capabilities (:workspace (:applyEdit t :executeCommand (:dynamicRegistration :json-false) :workspaceEdit (:documentChanges t) :didChangeWatchedFiles (:dynamicRegistration t) :symbol (:dynamicRegistration :json-false) :configuration t :workspaceFolders t) :textDocument (:synchronization (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t) :completion (:dynamicRegistration :json-false :completionItem (:snippetSupport :json-false :deprecatedSupport t :resolveSupport (:properties ["documentation" "details" "additionalTextEdits"]) :tagSupport (:valueSet [1])) :contextSupport t) :hover (:dynamicRegistration :json-false :contentFormat ["plaintext"]) :signatureHelp (:dynamicRegistration :json-false :signatureInformation (:parameterInformation (:labelOffsetSupport t) :activeParameterSupport t)) :references (:dynamicRegistration :json-false) :definition (:dynamicRegistration :json-false :linkSupport t) :declaration (:dynamicRegistration :json-false :linkSupport t) :implementation (:dynamicRegistration :json-false :linkSupport t) :typeDefinition (:dynamicRegistration :json-false :linkSupport t) :documentSymbol (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind (:valueSet [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26])) :documentHighlight (:dynamicRegistration :json-false) :codeAction (:dynamicRegistration :json-false :codeActionLiteralSupport (:codeActionKind (:valueSet ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"])) :isPreferredSupport t) :formatting (:dynamicRegistration :json-false) :rangeFormatting (:dynamicRegistration :json-false) :rename (:dynamicRegistration :json-false) :inlayHint (:dynamicRegistration :json-false) :publishDiagnostics (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport (:valueSet [1 2]))) :general (:positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) :workspaceFolders [(:uri "file:///tmp/eglot--fixturergwKZj/project" :name "/tmp/eglot--fixturergwKZj/project/")])) [internal] Wed Mar 15 10:21:27 2023: (:message "Connection state changed" :change "killed\n") ----------b---y---e---b---y---e---------- [stderr] [stderr] [stderr] nil [stderr] nil [stderr] Process EGLOT (project/(c-mode)) stderr<1> finished [internal] Wed Mar 15 10:21:28 2023: (:message "Running language server: sh -c sleep 1 && clangd") [client-request] (id:1) Wed Mar 15 10:21:28 2023: (:jsonrpc "2.0" :id 1 :method "initialize" :params (:processId 2017004 :rootPath "/tmp/eglot--fixturePSEZX9/project/" :rootUri "file:///tmp/eglot--fixturePSEZX9/project" :initializationOptions #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()) :capabilities (:workspace (:applyEdit t :executeCommand (:dynamicRegistration :json-false) :workspaceEdit (:documentChanges t) :didChangeWatchedFiles (:dynamicRegistration t) :symbol (:dynamicRegistration :json-false) :configuration t :workspaceFolders t) :textDocument (:synchronization (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t) :completion (:dynamicRegistration :json-false :completionItem (:snippetSupport :json-false :deprecatedSupport t :resolveSupport (:properties ["documentation" "details" "additionalTextEdits"]) :tagSupport (:valueSet [1])) :contextSupport t) :hover (:dynamicRegistration :json-false :contentFormat ["plaintext"]) :signatureHelp (:dynamicRegistration :json-false :signatureInformation (:parameterInformation (:labelOffsetSupport t) :activeParameterSupport t)) :references (:dynamicRegistration :json-false) :definition (:dynamicRegistration :json-false :linkSupport t) :declaration (:dynamicRegistration :json-false :linkSupport t) :implementation (:dynamicRegistration :json-false :linkSupport t) :typeDefinition (:dynamicRegistration :json-false :linkSupport t) :documentSymbol (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind (:valueSet [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26])) :documentHighlight (:dynamicRegistration :json-false) :codeAction (:dynamicRegistration :json-false :codeActionLiteralSupport (:codeActionKind (:valueSet ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"])) :isPreferredSupport t) :formatting (:dynamicRegistration :json-false) :rangeFormatting (:dynamicRegistration :json-false) :rename (:dynamicRegistration :json-false) :inlayHint (:dynamicRegistration :json-false) :publishDiagnostics (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport (:valueSet [1 2]))) :general (:positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) :workspaceFolders [(:uri "file:///tmp/eglot--fixturePSEZX9/project" :name "/tmp/eglot--fixturePSEZX9/project/")])) [internal] Wed Mar 15 10:21:31 2023: (:message "Connection state changed" :change "killed\n") ----------b---y---e---b---y---e---------- [stderr] [stderr] [stderr] nil [stderr] nil [stderr] Process EGLOT (project/(c-mode)) stderr finished [eglot-tests] Killing (something.c), wiping /tmp/eglot--fixturePSEZX9, restoring nil Test eglot-test-slow-sync-connection-wait backtrace: signal(error ("[eglot] Timed out after 3 seconds")) error("[eglot] %s" "Timed out after 3 seconds") eglot--error("Timed out after 3 seconds") eglot--connect((c-mode) (transient . "/tmp/eglot--fixturePSEZX9/proj apply(eglot--connect ((c-mode) (transient . "/tmp/eglot--fixturePSEZ (let* ((timeout (or timeout 10)) (eglot-sync-connect t) (eglot-conne eglot--tests-connect(3) apply(eglot--tests-connect 3) (setq value-466 (apply fn-464 args-465)) (unwind-protect (setq value-466 (apply fn-464 args-465)) (setq form- (if (unwind-protect (setq value-466 (apply fn-464 args-465)) (setq f (let (form-description-468) (if (unwind-protect (setq value-466 (app (let ((value-466 'ert-form-evaluation-aborted-467)) (let (form-descr (let* ((fn-464 #'eglot--tests-connect) (args-465 (condition-case err (let ((eglot-sync-connect t) (eglot-server-programs '((c-mode "sh" " (save-current-buffer (set-buffer (eglot--find-file-noselect "project (closure (company-candidates typescript-mode-abbrev-table typescript funcall((closure (company-candidates typescript-mode-abbrev-table ty (prog1 (funcall fn) (setq test-body-successful-p t)) (let* ((process-environment (append (list "XDG_CONFIG_HOME=/dev/null (unwind-protect (let* ((process-environment (append (list "XDG_CONFI (let* ((fixture-directory (make-nearby-temp-file "eglot--fixture" t) eglot--call-with-fixture((("project" ("something.c" . "int foo() {re (closure (company-candidates typescript-mode-abbrev-table typescript ert--run-test-internal(#s(ert--test-execution-info :test #s(ert-test ert-run-test(#s(ert-test :name eglot-test-slow-sync-connection-wait ert-run-or-rerun-test(#s(ert--stats :selector ... :tests ... :test-m ert-run-tests((not (or (tag :unstable) (tag :nativecomp))) #f(compil ert-run-tests-batch((not (or (tag :unstable) (tag :nativecomp)))) ert-run-tests-batch-and-exit((not (or (tag :unstable) (tag :nativeco eval((ert-run-tests-batch-and-exit '(not (or (tag :unstable) (tag :n command-line-1(("-L" ":." "-l" "ert" "-l" "lisp/progmodes/eglot-test command-line() normal-top-level() Test eglot-test-slow-sync-connection-wait condition: (error "[eglot] Timed out after 3 seconds") FAILED 44/50 eglot-test-slow-sync-connection-wait (3.193473 sec) at lisp/progmodes/eglot-tests.el:914 [eglot-tests] [eglot-test-slow-sync-timeout]: test start [jsonrpc] Server exited with status 9 [eglot-tests] [eglot-test-slow-sync-timeout]: OK [eglot-tests] Killing (something.c), wiping /tmp/eglot--fixtureqvce4y, restoring nil passed 45/50 eglot-test-slow-sync-timeout (1.129448 sec) skipped 46/50 eglot-test-snippet-completions (0.010595 sec) skipped 47/50 eglot-test-snippet-completions-with-company (0.000331 sec) passed 48/50 eglot-test-strict-interfaces (0.000356 sec) [eglot-tests] [eglot-test-tramp-test]: test start [jsonrpc] Server exited with status 9 [eglot-tests] [eglot-test-tramp-test]: FAILED [eglot-tests] contents of ` *EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) output*': [eglot-tests] contents of ` *EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) stderr*': [eglot-tests] contents of `*EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) events*': [internal] Wed Mar 15 10:19:58 2023: (:message "Running language server: /var/lib/snapd/snap/bin/clangd") [client-request] (id:1) Wed Mar 15 10:19:58 2023: (:jsonrpc "2.0" :id 1 :method "initialize" :params (:processId 2017004 :rootPath "/tmp/eglot--fixtureGOqwaT/project/" :rootUri "file:///tmp/eglot--fixtureGOqwaT/project" :initializationOptions #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()) :capabilities (:workspace (:applyEdit t :executeCommand (:dynamicRegistration :json-false) :workspaceEdit (:documentChanges t) :didChangeWatchedFiles (:dynamicRegistration t) :symbol (:dynamicRegistration :json-false) :configuration t :workspaceFolders t) :textDocument (:synchronization (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t) :completion (:dynamicRegistration :json-false :completionItem (:snippetSupport :json-false :deprecatedSupport t :resolveSupport (:properties ["documentation" "details" "additionalTextEdits"]) :tagSupport (:valueSet [1])) :contextSupport t) :hover (:dynamicRegistration :json-false :contentFormat ["plaintext"]) :signatureHelp (:dynamicRegistration :json-false :signatureInformation (:parameterInformation (:labelOffsetSupport t) :activeParameterSupport t)) :references (:dynamicRegistration :json-false) :definition (:dynamicRegistration :json-false :linkSupport t) :declaration (:dynamicRegistration :json-false :linkSupport t) :implementation (:dynamicRegistration :json-false :linkSupport t) :typeDefinition (:dynamicRegistration :json-false :linkSupport t) :documentSymbol (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind (:valueSet [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26])) :documentHighlight (:dynamicRegistration :json-false) :codeAction (:dynamicRegistration :json-false :codeActionLiteralSupport (:codeActionKind (:valueSet ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"])) :isPreferredSupport t) :formatting (:dynamicRegistration :json-false) :rangeFormatting (:dynamicRegistration :json-false) :rename (:dynamicRegistration :json-false) :inlayHint (:dynamicRegistration :json-false) :publishDiagnostics (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport (:valueSet [1 2]))) :general (:positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) :workspaceFolders [(:uri "file:///tmp/eglot--fixtureGOqwaT/project" :name "/tmp/eglot--fixtureGOqwaT/project/")])) [internal] Wed Mar 15 10:20:08 2023: (:message "Connection state changed" :change "killed\n") ----------b---y---e---b---y---e---------- [stderr] [stderr] [stderr] nil [stderr] nil [stderr] Process EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) stderr finished [internal] Wed Mar 15 10:20:08 2023: (:message "Running language server: /var/lib/snapd/snap/bin/clangd") [client-request] (id:1) Wed Mar 15 10:20:08 2023: (:jsonrpc "2.0" :id 1 :method "initialize" :params (:processId 2017004 :rootPath "/tmp/eglot--fixturewNlzZp/project/" :rootUri "file:///tmp/eglot--fixturewNlzZp/project" :initializationOptions #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()) :capabilities (:workspace (:applyEdit t :executeCommand (:dynamicRegistration :json-false) :workspaceEdit (:documentChanges t) :didChangeWatchedFiles (:dynamicRegistration t) :symbol (:dynamicRegistration :json-false) :configuration t :workspaceFolders t) :textDocument (:synchronization (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t) :completion (:dynamicRegistration :json-false :completionItem (:snippetSupport :json-false :deprecatedSupport t :resolveSupport (:properties ["documentation" "details" "additionalTextEdits"]) :tagSupport (:valueSet [1])) :contextSupport t) :hover (:dynamicRegistration :json-false :contentFormat ["plaintext"]) :signatureHelp (:dynamicRegistration :json-false :signatureInformation (:parameterInformation (:labelOffsetSupport t) :activeParameterSupport t)) :references (:dynamicRegistration :json-false) :definition (:dynamicRegistration :json-false :linkSupport t) :declaration (:dynamicRegistration :json-false :linkSupport t) :implementation (:dynamicRegistration :json-false :linkSupport t) :typeDefinition (:dynamicRegistration :json-false :linkSupport t) :documentSymbol (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind (:valueSet [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26])) :documentHighlight (:dynamicRegistration :json-false) :codeAction (:dynamicRegistration :json-false :codeActionLiteralSupport (:codeActionKind (:valueSet ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"])) :isPreferredSupport t) :formatting (:dynamicRegistration :json-false) :rangeFormatting (:dynamicRegistration :json-false) :rename (:dynamicRegistration :json-false) :inlayHint (:dynamicRegistration :json-false) :publishDiagnostics (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport (:valueSet [1 2]))) :general (:positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) :workspaceFolders [(:uri "file:///tmp/eglot--fixturewNlzZp/project" :name "/tmp/eglot--fixturewNlzZp/project/")])) [internal] Wed Mar 15 10:20:18 2023: (:message "Connection state changed" :change "killed\n") ----------b---y---e---b---y---e---------- [stderr] [stderr] [stderr] nil [stderr] nil [stderr] Process EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) stderr finished [internal] Wed Mar 15 10:20:18 2023: (:message "Running language server: /var/lib/snapd/snap/bin/clangd") [client-request] (id:1) Wed Mar 15 10:20:18 2023: (:jsonrpc "2.0" :id 1 :method "initialize" :params (:processId 2017004 :rootPath "/tmp/eglot--fixturehfF6Pn/project/" :rootUri "file:///tmp/eglot--fixturehfF6Pn/project" :initializationOptions #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()) :capabilities (:workspace (:applyEdit t :executeCommand (:dynamicRegistration :json-false) :workspaceEdit (:documentChanges t) :didChangeWatchedFiles (:dynamicRegistration t) :symbol (:dynamicRegistration :json-false) :configuration t :workspaceFolders t) :textDocument (:synchronization (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t) :completion (:dynamicRegistration :json-false :completionItem (:snippetSupport :json-false :deprecatedSupport t :resolveSupport (:properties ["documentation" "details" "additionalTextEdits"]) :tagSupport (:valueSet [1])) :contextSupport t) :hover (:dynamicRegistration :json-false :contentFormat ["plaintext"]) :signatureHelp (:dynamicRegistration :json-false :signatureInformation (:parameterInformation (:labelOffsetSupport t) :activeParameterSupport t)) :references (:dynamicRegistration :json-false) :definition (:dynamicRegistration :json-false :linkSupport t) :declaration (:dynamicRegistration :json-false :linkSupport t) :implementation (:dynamicRegistration :json-false :linkSupport t) :typeDefinition (:dynamicRegistration :json-false :linkSupport t) :documentSymbol (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind (:valueSet [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26])) :documentHighlight (:dynamicRegistration :json-false) :codeAction (:dynamicRegistration :json-false :codeActionLiteralSupport (:codeActionKind (:valueSet ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"])) :isPreferredSupport t) :formatting (:dynamicRegistration :json-false) :rangeFormatting (:dynamicRegistration :json-false) :rename (:dynamicRegistration :json-false) :inlayHint (:dynamicRegistration :json-false) :publishDiagnostics (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport (:valueSet [1 2]))) :general (:positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) :workspaceFolders [(:uri "file:///tmp/eglot--fixturehfF6Pn/project" :name "/tmp/eglot--fixturehfF6Pn/project/")])) [internal] Wed Mar 15 10:20:28 2023: (:message "Connection state changed" :change "killed\n") ----------b---y---e---b---y---e---------- [stderr] [stderr] [stderr] nil [stderr] nil [stderr] Process EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) stderr finished [internal] Wed Mar 15 10:20:39 2023: (:message "Running language server: /var/lib/snapd/snap/bin/clangd") [client-request] (id:1) Wed Mar 15 10:20:39 2023: (:jsonrpc "2.0" :id 1 :method "initialize" :params (:processId 2017004 :rootPath "/tmp/eglot--fixtureRUxVaa/project/" :rootUri "file:///tmp/eglot--fixtureRUxVaa/project" :initializationOptions #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()) :capabilities (:workspace (:applyEdit t :executeCommand (:dynamicRegistration :json-false) :workspaceEdit (:documentChanges t) :didChangeWatchedFiles (:dynamicRegistration t) :symbol (:dynamicRegistration :json-false) :configuration t :workspaceFolders t) :textDocument (:synchronization (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t) :completion (:dynamicRegistration :json-false :completionItem (:snippetSupport :json-false :deprecatedSupport t :resolveSupport (:properties ["documentation" "details" "additionalTextEdits"]) :tagSupport (:valueSet [1])) :contextSupport t) :hover (:dynamicRegistration :json-false :contentFormat ["plaintext"]) :signatureHelp (:dynamicRegistration :json-false :signatureInformation (:parameterInformation (:labelOffsetSupport t) :activeParameterSupport t)) :references (:dynamicRegistration :json-false) :definition (:dynamicRegistration :json-false :linkSupport t) :declaration (:dynamicRegistration :json-false :linkSupport t) :implementation (:dynamicRegistration :json-false :linkSupport t) :typeDefinition (:dynamicRegistration :json-false :linkSupport t) :documentSymbol (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind (:valueSet [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26])) :documentHighlight (:dynamicRegistration :json-false) :codeAction (:dynamicRegistration :json-false :codeActionLiteralSupport (:codeActionKind (:valueSet ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"])) :isPreferredSupport t) :formatting (:dynamicRegistration :json-false) :rangeFormatting (:dynamicRegistration :json-false) :rename (:dynamicRegistration :json-false) :inlayHint (:dynamicRegistration :json-false) :publishDiagnostics (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport (:valueSet [1 2]))) :general (:positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) :workspaceFolders [(:uri "file:///tmp/eglot--fixtureRUxVaa/project" :name "/tmp/eglot--fixtureRUxVaa/project/")])) [client-request] (id:2) Wed Mar 15 10:20:42 2023: (:jsonrpc "2.0" :id 2 :method "shutdown" :params nil) [internal] Wed Mar 15 10:20:45 2023: (:message "Connection state changed" :change "killed\n") ----------b---y---e---b---y---e---------- [stderr] [stderr] [stderr] nil [stderr] nil [stderr] Process EGLOT (project/(c-mode c-ts-mode c++-mode c++-ts-mode)) stderr finished [stderr] nil [stderr] [stderr] nil [stderr] [stderr] nil [stderr] [stderr] nil [stderr] [stderr] nil [stderr] [stderr] foo [stderr] foo [stderr] foo [stderr] [stderr] foo [stderr] bar [stderr] nil [stderr] bar [stderr] [stderr] nil [stderr] [stderr] nil [stderr] [stderr] nil [stderr] [stderr] nil [stderr] [stderr] "/dev/pts/5" [stderr] tramp_exit_status 0 [stderr] nil [stderr] tramp_exit_status 0 [stderr] "/dev/pts/5" [stderr] [stderr] nil [stderr] [stderr] nil [stderr] [stderr] 2090098 [stderr] tramp_exit_status 0 [stderr] tramp_exit_status 0 [stderr] tramp_exit_status 0 [stderr] 2090098 [stderr] [internal] Wed Mar 15 10:21:33 2023: (:message "Running language server: /bin/sh -c stty raw > /dev/null; /var/lib/snapd/snap/bin/clangd") [client-request] (id:1) Wed Mar 15 10:21:33 2023: (:jsonrpc "2.0" :id 1 :method "initialize" :params (:processId nil :rootPath "/tmp/eglot--fixtureMz8x0y/project/" :rootUri "file:///tmp/eglot--fixtureMz8x0y/project" :initializationOptions #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()) :capabilities (:workspace (:applyEdit t :executeCommand (:dynamicRegistration :json-false) :workspaceEdit (:documentChanges t) :didChangeWatchedFiles (:dynamicRegistration :json-false) :symbol (:dynamicRegistration :json-false) :configuration t :workspaceFolders t) :textDocument (:synchronization (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t) :completion (:dynamicRegistration :json-false :completionItem (:snippetSupport :json-false :deprecatedSupport t :resolveSupport (:properties ["documentation" "details" "additionalTextEdits"]) :tagSupport (:valueSet [1])) :contextSupport t) :hover (:dynamicRegistration :json-false :contentFormat ["plaintext"]) :signatureHelp (:dynamicRegistration :json-false :signatureInformation (:parameterInformation (:labelOffsetSupport t) :activeParameterSupport t)) :references (:dynamicRegistration :json-false) :definition (:dynamicRegistration :json-false :linkSupport t) :declaration (:dynamicRegistration :json-false :linkSupport t) :implementation (:dynamicRegistration :json-false :linkSupport t) :typeDefinition (:dynamicRegistration :json-false :linkSupport t) :documentSymbol (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind (:valueSet [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26])) :documentHighlight (:dynamicRegistration :json-false) :codeAction (:dynamicRegistration :json-false :codeActionLiteralSupport (:codeActionKind (:valueSet ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"])) :isPreferredSupport t) :formatting (:dynamicRegistration :json-false) :rangeFormatting (:dynamicRegistration :json-false) :rename (:dynamicRegistration :json-false) :inlayHint (:dynamicRegistration :json-false) :publishDiagnostics (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport (:valueSet [1 2]))) :general (:positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) :workspaceFolders [(:uri "file:///tmp/eglot--fixtureMz8x0y/project" :name "/mock:gandalf:/tmp/eglot--fixtureMz8x0y/project/")])) [internal] Wed Mar 15 10:21:43 2023: (:message "Connection state changed" :change "killed\n") ----------b---y---e---b---y---e---------- [eglot-tests] Killing (coiso.c), wiping /mock:gandalf:/tmp/eglot--fixtureMz8x0y, restoring nil Test eglot-test-tramp-test backtrace: signal(error ("[eglot] Timed out after 10 seconds")) error("[eglot] %s" "Timed out after 10 seconds") eglot--error("Timed out after 10 seconds") eglot--connect((c-mode c-ts-mode c++-mode c++-ts-mode) (transient . apply(eglot--connect ((c-mode c-ts-mode c++-mode c++-ts-mode) (trans (let* ((timeout (or timeout 10)) (eglot-sync-connect t) (eglot-conne eglot--tests-connect() (setq server (eglot--tests-connect)) (setq value-10 (setq server (eglot--tests-connect))) (unwind-protect (setq value-10 (setq server (eglot--tests-connect))) (if (unwind-protect (setq value-10 (setq server (eglot--tests-connec (let (form-description-11) (if (unwind-protect (setq value-10 (setq (let ((value-10 (gensym "ert-form-evaluation-aborted-"))) (let (form (save-current-buffer (set-buffer (eglot--find-file-noselect "project (closure ((server)) nil (save-current-buffer (set-buffer (eglot--fin funcall((closure ((server)) nil (save-current-buffer (set-buffer (eg (prog1 (funcall fn) (setq test-body-successful-p t)) (let* ((process-environment (append (list "XDG_CONFIG_HOME=/dev/null (unwind-protect (let* ((process-environment (append (list "XDG_CONFI (let* ((fixture-directory (make-nearby-temp-file "eglot--fixture" t) eglot--call-with-fixture((("project" ("coiso.c" . "bla") ("merdix.c" (let (server) (eglot--call-with-fixture '(("project" ("coiso.c" . "b eglot-tests--auto-detect-running-server-1() funcall(eglot-tests--auto-detect-running-server-1) (let* ((tramp-remote-path (cons 'tramp-own-remote-path tramp-remote- eglot--call-with-tramp-test(eglot-tests--auto-detect-running-server- (closure (tramp-histfile-override company-candidates typescript-mode ert--run-test-internal(#s(ert--test-execution-info :test #s(ert-test ert-run-test(#s(ert-test :name eglot-test-tramp-test :documentation ert-run-or-rerun-test(#s(ert--stats :selector ... :tests ... :test-m ert-run-tests((not (or (tag :unstable) (tag :nativecomp))) #f(compil ert-run-tests-batch((not (or (tag :unstable) (tag :nativecomp)))) ert-run-tests-batch-and-exit((not (or (tag :unstable) (tag :nativeco eval((ert-run-tests-batch-and-exit '(not (or (tag :unstable) (tag :n command-line-1(("-L" ":." "-l" "ert" "-l" "lisp/progmodes/eglot-test command-line() normal-top-level() Test eglot-test-tramp-test condition: (error "[eglot] Timed out after 10 seconds") FAILED 49/50 eglot-test-tramp-test (10.994329 sec) at lisp/progmodes/eglot-tests.el:1289 [eglot-tests] [eglot-test-tramp-test-2]: test start [jsonrpc] Server exited with status 9 [eglot-tests] [eglot-test-tramp-test-2]: FAILED [eglot-tests] contents of ` *EGLOT (project/(c-mode)) output*': [eglot-tests] contents of ` *EGLOT (project/(c-mode)) stderr*': [eglot-tests] contents of `*EGLOT (project/(c-mode)) events*': [internal] Wed Mar 15 10:20:46 2023: (:message "Running language server: clangd") [client-request] (id:1) Wed Mar 15 10:20:46 2023: (:jsonrpc "2.0" :id 1 :method "initialize" :params (:processId 2017004 :rootPath "/tmp/eglot--fixturePO4VrS/project/" :rootUri "file:///tmp/eglot--fixturePO4VrS/project" :initializationOptions #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()) :capabilities (:workspace (:applyEdit t :executeCommand (:dynamicRegistration :json-false) :workspaceEdit (:documentChanges t) :didChangeWatchedFiles (:dynamicRegistration t) :symbol (:dynamicRegistration :json-false) :configuration t :workspaceFolders t) :textDocument (:synchronization (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t) :completion (:dynamicRegistration :json-false :completionItem (:snippetSupport :json-false :deprecatedSupport t :resolveSupport (:properties ["documentation" "details" "additionalTextEdits"]) :tagSupport (:valueSet [1])) :contextSupport t) :hover (:dynamicRegistration :json-false :contentFormat ["plaintext"]) :signatureHelp (:dynamicRegistration :json-false :signatureInformation (:parameterInformation (:labelOffsetSupport t) :activeParameterSupport t)) :references (:dynamicRegistration :json-false) :definition (:dynamicRegistration :json-false :linkSupport t) :declaration (:dynamicRegistration :json-false :linkSupport t) :implementation (:dynamicRegistration :json-false :linkSupport t) :typeDefinition (:dynamicRegistration :json-false :linkSupport t) :documentSymbol (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind (:valueSet [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26])) :documentHighlight (:dynamicRegistration :json-false) :codeAction (:dynamicRegistration :json-false :codeActionLiteralSupport (:codeActionKind (:valueSet ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"])) :isPreferredSupport t) :formatting (:dynamicRegistration :json-false) :rangeFormatting (:dynamicRegistration :json-false) :rename (:dynamicRegistration :json-false) :inlayHint (:dynamicRegistration :json-false) :publishDiagnostics (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport (:valueSet [1 2]))) :general (:positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) :workspaceFolders [(:uri "file:///tmp/eglot--fixturePO4VrS/project" :name "/tmp/eglot--fixturePO4VrS/project/")])) [internal] Wed Mar 15 10:20:56 2023: (:message "Connection state changed" :change "killed\n") ----------b---y---e---b---y---e---------- [stderr] [stderr] [stderr] nil [stderr] nil [stderr] Process EGLOT (project/(c-mode)) stderr finished [internal] Wed Mar 15 10:21:17 2023: (:message "Running language server: sh -c sleep 2 && clangd") [client-request] (id:1) Wed Mar 15 10:21:17 2023: (:jsonrpc "2.0" :id 1 :method "initialize" :params (:processId 2017004 :rootPath "/tmp/eglot--fixturevereoR/project/" :rootUri "file:///tmp/eglot--fixturevereoR/project" :initializationOptions #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()) :capabilities (:workspace (:applyEdit t :executeCommand (:dynamicRegistration :json-false) :workspaceEdit (:documentChanges t) :didChangeWatchedFiles (:dynamicRegistration t) :symbol (:dynamicRegistration :json-false) :configuration t :workspaceFolders t) :textDocument (:synchronization (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t) :completion (:dynamicRegistration :json-false :completionItem (:snippetSupport :json-false :deprecatedSupport t :resolveSupport (:properties ["documentation" "details" "additionalTextEdits"]) :tagSupport (:valueSet [1])) :contextSupport t) :hover (:dynamicRegistration :json-false :contentFormat ["plaintext"]) :signatureHelp (:dynamicRegistration :json-false :signatureInformation (:parameterInformation (:labelOffsetSupport t) :activeParameterSupport t)) :references (:dynamicRegistration :json-false) :definition (:dynamicRegistration :json-false :linkSupport t) :declaration (:dynamicRegistration :json-false :linkSupport t) :implementation (:dynamicRegistration :json-false :linkSupport t) :typeDefinition (:dynamicRegistration :json-false :linkSupport t) :documentSymbol (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind (:valueSet [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26])) :documentHighlight (:dynamicRegistration :json-false) :codeAction (:dynamicRegistration :json-false :codeActionLiteralSupport (:codeActionKind (:valueSet ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"])) :isPreferredSupport t) :formatting (:dynamicRegistration :json-false) :rangeFormatting (:dynamicRegistration :json-false) :rename (:dynamicRegistration :json-false) :inlayHint (:dynamicRegistration :json-false) :publishDiagnostics (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport (:valueSet [1 2]))) :general (:positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) :workspaceFolders [(:uri "file:///tmp/eglot--fixturevereoR/project" :name "/tmp/eglot--fixturevereoR/project/")])) [client-request] (id:2) Wed Mar 15 10:21:21 2023: (:jsonrpc "2.0" :id 2 :method "shutdown" :params nil) [internal] Wed Mar 15 10:21:24 2023: (:message "Connection state changed" :change "killed\n") ----------b---y---e---b---y---e---------- [stderr] [stderr] [stderr] nil [stderr] nil [stderr] Process EGLOT (project/(c-mode)) stderr finished [internal] Wed Mar 15 10:21:24 2023: (:message "Running language server: sh -c sleep 1 && clangd") [client-request] (id:1) Wed Mar 15 10:21:24 2023: (:jsonrpc "2.0" :id 1 :method "initialize" :params (:processId 2017004 :rootPath "/tmp/eglot--fixturergwKZj/project/" :rootUri "file:///tmp/eglot--fixturergwKZj/project" :initializationOptions #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()) :capabilities (:workspace (:applyEdit t :executeCommand (:dynamicRegistration :json-false) :workspaceEdit (:documentChanges t) :didChangeWatchedFiles (:dynamicRegistration t) :symbol (:dynamicRegistration :json-false) :configuration t :workspaceFolders t) :textDocument (:synchronization (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t) :completion (:dynamicRegistration :json-false :completionItem (:snippetSupport :json-false :deprecatedSupport t :resolveSupport (:properties ["documentation" "details" "additionalTextEdits"]) :tagSupport (:valueSet [1])) :contextSupport t) :hover (:dynamicRegistration :json-false :contentFormat ["plaintext"]) :signatureHelp (:dynamicRegistration :json-false :signatureInformation (:parameterInformation (:labelOffsetSupport t) :activeParameterSupport t)) :references (:dynamicRegistration :json-false) :definition (:dynamicRegistration :json-false :linkSupport t) :declaration (:dynamicRegistration :json-false :linkSupport t) :implementation (:dynamicRegistration :json-false :linkSupport t) :typeDefinition (:dynamicRegistration :json-false :linkSupport t) :documentSymbol (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind (:valueSet [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26])) :documentHighlight (:dynamicRegistration :json-false) :codeAction (:dynamicRegistration :json-false :codeActionLiteralSupport (:codeActionKind (:valueSet ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"])) :isPreferredSupport t) :formatting (:dynamicRegistration :json-false) :rangeFormatting (:dynamicRegistration :json-false) :rename (:dynamicRegistration :json-false) :inlayHint (:dynamicRegistration :json-false) :publishDiagnostics (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport (:valueSet [1 2]))) :general (:positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) :workspaceFolders [(:uri "file:///tmp/eglot--fixturergwKZj/project" :name "/tmp/eglot--fixturergwKZj/project/")])) [internal] Wed Mar 15 10:21:27 2023: (:message "Connection state changed" :change "killed\n") ----------b---y---e---b---y---e---------- [stderr] [stderr] [stderr] nil [stderr] nil [stderr] Process EGLOT (project/(c-mode)) stderr<1> finished [internal] Wed Mar 15 10:21:28 2023: (:message "Running language server: sh -c sleep 1 && clangd") [client-request] (id:1) Wed Mar 15 10:21:28 2023: (:jsonrpc "2.0" :id 1 :method "initialize" :params (:processId 2017004 :rootPath "/tmp/eglot--fixturePSEZX9/project/" :rootUri "file:///tmp/eglot--fixturePSEZX9/project" :initializationOptions #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()) :capabilities (:workspace (:applyEdit t :executeCommand (:dynamicRegistration :json-false) :workspaceEdit (:documentChanges t) :didChangeWatchedFiles (:dynamicRegistration t) :symbol (:dynamicRegistration :json-false) :configuration t :workspaceFolders t) :textDocument (:synchronization (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t) :completion (:dynamicRegistration :json-false :completionItem (:snippetSupport :json-false :deprecatedSupport t :resolveSupport (:properties ["documentation" "details" "additionalTextEdits"]) :tagSupport (:valueSet [1])) :contextSupport t) :hover (:dynamicRegistration :json-false :contentFormat ["plaintext"]) :signatureHelp (:dynamicRegistration :json-false :signatureInformation (:parameterInformation (:labelOffsetSupport t) :activeParameterSupport t)) :references (:dynamicRegistration :json-false) :definition (:dynamicRegistration :json-false :linkSupport t) :declaration (:dynamicRegistration :json-false :linkSupport t) :implementation (:dynamicRegistration :json-false :linkSupport t) :typeDefinition (:dynamicRegistration :json-false :linkSupport t) :documentSymbol (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind (:valueSet [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26])) :documentHighlight (:dynamicRegistration :json-false) :codeAction (:dynamicRegistration :json-false :codeActionLiteralSupport (:codeActionKind (:valueSet ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"])) :isPreferredSupport t) :formatting (:dynamicRegistration :json-false) :rangeFormatting (:dynamicRegistration :json-false) :rename (:dynamicRegistration :json-false) :inlayHint (:dynamicRegistration :json-false) :publishDiagnostics (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport (:valueSet [1 2]))) :general (:positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) :workspaceFolders [(:uri "file:///tmp/eglot--fixturePSEZX9/project" :name "/tmp/eglot--fixturePSEZX9/project/")])) [internal] Wed Mar 15 10:21:31 2023: (:message "Connection state changed" :change "killed\n") ----------b---y---e---b---y---e---------- [stderr] [stderr] [stderr] nil [stderr] nil [stderr] Process EGLOT (project/(c-mode)) stderr finished [internal] Wed Mar 15 10:21:31 2023: (:message "Running language server: sh -c sleep 2 && clangd") [client-request] (id:1) Wed Mar 15 10:21:31 2023: (:jsonrpc "2.0" :id 1 :method "initialize" :params (:processId 2017004 :rootPath "/tmp/eglot--fixtureqvce4y/project/" :rootUri "file:///tmp/eglot--fixtureqvce4y/project" :initializationOptions #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()) :capabilities (:workspace (:applyEdit t :executeCommand (:dynamicRegistration :json-false) :workspaceEdit (:documentChanges t) :didChangeWatchedFiles (:dynamicRegistration t) :symbol (:dynamicRegistration :json-false) :configuration t :workspaceFolders t) :textDocument (:synchronization (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t) :completion (:dynamicRegistration :json-false :completionItem (:snippetSupport :json-false :deprecatedSupport t :resolveSupport (:properties ["documentation" "details" "additionalTextEdits"]) :tagSupport (:valueSet [1])) :contextSupport t) :hover (:dynamicRegistration :json-false :contentFormat ["plaintext"]) :signatureHelp (:dynamicRegistration :json-false :signatureInformation (:parameterInformation (:labelOffsetSupport t) :activeParameterSupport t)) :references (:dynamicRegistration :json-false) :definition (:dynamicRegistration :json-false :linkSupport t) :declaration (:dynamicRegistration :json-false :linkSupport t) :implementation (:dynamicRegistration :json-false :linkSupport t) :typeDefinition (:dynamicRegistration :json-false :linkSupport t) :documentSymbol (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind (:valueSet [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26])) :documentHighlight (:dynamicRegistration :json-false) :codeAction (:dynamicRegistration :json-false :codeActionLiteralSupport (:codeActionKind (:valueSet ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"])) :isPreferredSupport t) :formatting (:dynamicRegistration :json-false) :rangeFormatting (:dynamicRegistration :json-false) :rename (:dynamicRegistration :json-false) :inlayHint (:dynamicRegistration :json-false) :publishDiagnostics (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport (:valueSet [1 2]))) :general (:positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) :workspaceFolders [(:uri "file:///tmp/eglot--fixtureqvce4y/project" :name "/tmp/eglot--fixtureqvce4y/project/")])) [internal] Wed Mar 15 10:21:32 2023: (:message "Connection state changed" :change "killed\n") ----------b---y---e---b---y---e---------- [stderr] [stderr] [stderr] nil [stderr] nil [stderr] Process EGLOT (project/(c-mode)) stderr finished [stderr] nil [stderr] [stderr] nil [stderr] [stderr] nil [stderr] [stderr] nil [stderr] [stderr] nil [stderr] [stderr] foo [stderr] foo [stderr] foo [stderr] [stderr] foo [stderr] bar [stderr] nil [stderr] bar [stderr] [stderr] nil [stderr] [stderr] nil [stderr] [stderr] nil [stderr] [stderr] nil [stderr] [stderr] "/dev/pts/5" [stderr] tramp_exit_status 0 [stderr] tramp_exit_status 0 [stderr] tramp_exit_status 0 [stderr] "/dev/pts/5" [stderr] [stderr] nil [stderr] [stderr] nil [stderr] [stderr] 2098678 [stderr] tramp_exit_status 0 [stderr] nil [stderr] tramp_exit_status 0 [stderr] 2098678 [stderr] [internal] Wed Mar 15 10:21:44 2023: (:message "Running language server: /bin/sh -c stty raw > /dev/null; clangd") [client-request] (id:1) Wed Mar 15 10:21:44 2023: (:jsonrpc "2.0" :id 1 :method "initialize" :params (:processId nil :rootPath "/tmp/eglot--fixtureNbu0m1/project/" :rootUri "file:///tmp/eglot--fixtureNbu0m1/project" :initializationOptions #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ()) :capabilities (:workspace (:applyEdit t :executeCommand (:dynamicRegistration :json-false) :workspaceEdit (:documentChanges t) :didChangeWatchedFiles (:dynamicRegistration :json-false) :symbol (:dynamicRegistration :json-false) :configuration t :workspaceFolders t) :textDocument (:synchronization (:dynamicRegistration :json-false :willSave t :willSaveWaitUntil t :didSave t) :completion (:dynamicRegistration :json-false :completionItem (:snippetSupport :json-false :deprecatedSupport t :resolveSupport (:properties ["documentation" "details" "additionalTextEdits"]) :tagSupport (:valueSet [1])) :contextSupport t) :hover (:dynamicRegistration :json-false :contentFormat ["plaintext"]) :signatureHelp (:dynamicRegistration :json-false :signatureInformation (:parameterInformation (:labelOffsetSupport t) :activeParameterSupport t)) :references (:dynamicRegistration :json-false) :definition (:dynamicRegistration :json-false :linkSupport t) :declaration (:dynamicRegistration :json-false :linkSupport t) :implementation (:dynamicRegistration :json-false :linkSupport t) :typeDefinition (:dynamicRegistration :json-false :linkSupport t) :documentSymbol (:dynamicRegistration :json-false :hierarchicalDocumentSymbolSupport t :symbolKind (:valueSet [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26])) :documentHighlight (:dynamicRegistration :json-false) :codeAction (:dynamicRegistration :json-false :codeActionLiteralSupport (:codeActionKind (:valueSet ["quickfix" "refactor" "refactor.extract" "refactor.inline" "refactor.rewrite" "source" "source.organizeImports"])) :isPreferredSupport t) :formatting (:dynamicRegistration :json-false) :rangeFormatting (:dynamicRegistration :json-false) :rename (:dynamicRegistration :json-false) :inlayHint (:dynamicRegistration :json-false) :publishDiagnostics (:relatedInformation :json-false :codeDescriptionSupport :json-false :tagSupport (:valueSet [1 2]))) :general (:positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental #s(hash-table size 1 test eql rehash-size 1.5 rehash-threshold 0.8125 data ())) :workspaceFolders [(:uri "file:///tmp/eglot--fixtureNbu0m1/project" :name "/mock:gandalf:/tmp/eglot--fixtureNbu0m1/project/")])) [internal] Wed Mar 15 10:21:54 2023: (:message "Connection state changed" :change "killed\n") ----------b---y---e---b---y---e---------- [eglot-tests] Killing (foo.c), wiping /mock:gandalf:/tmp/eglot--fixtureNbu0m1, restoring nil Test eglot-test-tramp-test-2 backtrace: signal(error ("[eglot] Timed out after 10 seconds")) error("[eglot] %s" "Timed out after 10 seconds") eglot--error("Timed out after 10 seconds") eglot--connect((c-mode) (transient . "/mock:gandalf:/tmp/eglot--fixt apply(eglot--connect ((c-mode) (transient . "/mock:gandalf:/tmp/eglo (let* ((timeout (or timeout 10)) (eglot-sync-connect t) (eglot-conne eglot--tests-connect() (let (c-notifs) (advice-add #'jsonrpc--log-event :before #'(lambda ( (unwind-protect (let (c-notifs) (advice-add #'jsonrpc--log-event :be (save-current-buffer (set-buffer (eglot--find-file-noselect "project (let ((eglot-server-programs '((c-mode "clangd")))) (save-current-bu (closure (company-candidates typescript-mode-abbrev-table typescript funcall((closure (company-candidates typescript-mode-abbrev-table ty (prog1 (funcall fn) (setq test-body-successful-p t)) (let* ((process-environment (append (list "XDG_CONFIG_HOME=/dev/null (unwind-protect (let* ((process-environment (append (list "XDG_CONFI (let* ((fixture-directory (make-nearby-temp-file "eglot--fixture" t) eglot--call-with-fixture((("project" ("foo.c" . "const char write_da eglot-tests--lsp-abiding-column-1() funcall(eglot-tests--lsp-abiding-column-1) (let* ((tramp-remote-path (cons 'tramp-own-remote-path tramp-remote- eglot--call-with-tramp-test(eglot-tests--lsp-abiding-column-1) (closure (tramp-histfile-override company-candidates typescript-mode ert--run-test-internal(#s(ert--test-execution-info :test #s(ert-test ert-run-test(#s(ert-test :name eglot-test-tramp-test-2 :documentatio ert-run-or-rerun-test(#s(ert--stats :selector ... :tests ... :test-m ert-run-tests((not (or (tag :unstable) (tag :nativecomp))) #f(compil ert-run-tests-batch((not (or (tag :unstable) (tag :nativecomp)))) ert-run-tests-batch-and-exit((not (or (tag :unstable) (tag :nativeco eval((ert-run-tests-batch-and-exit '(not (or (tag :unstable) (tag :n command-line-1(("-L" ":." "-l" "ert" "-l" "lisp/progmodes/eglot-test command-line() normal-top-level() Test eglot-test-tramp-test-2 condition: (error "[eglot] Timed out after 10 seconds") FAILED 50/50 eglot-test-tramp-test-2 (10.629741 sec) at lisp/progmodes/eglot-tests.el:1294 Ran 50 tests, 17 results as expected, 14 unexpected, 19 skipped (2023-03-15 10:21:54+0100, 116.658086 sec) 14 unexpected results: FAILED eglot-test-auto-detect-running-server FAILED eglot-test-auto-reconnect FAILED eglot-test-auto-shutdown FAILED eglot-test-basic-diagnostics FAILED eglot-test-diagnostic-tags-unnecessary-code FAILED eglot-test-ensure FAILED eglot-test-lsp-abiding-column FAILED eglot-test-rename-a-symbol FAILED eglot-test-same-server-multi-mode FAILED eglot-test-slow-async-connection FAILED eglot-test-slow-sync-connection-intime FAILED eglot-test-slow-sync-connection-wait FAILED eglot-test-tramp-test FAILED eglot-test-tramp-test-2 19 skipped results: SKIPPED eglot-test-basic-completions SKIPPED eglot-test-basic-xref SKIPPED eglot-test-eclipse-connect SKIPPED eglot-test-eldoc-after-completions SKIPPED eglot-test-javascript-basic SKIPPED eglot-test-json-basic SKIPPED eglot-test-multiline-eldoc SKIPPED eglot-test-non-unique-completions SKIPPED eglot-test-path-to-uri-windows SKIPPED eglot-test-project-wide-diagnostics-rust-analyzer SKIPPED eglot-test-project-wide-diagnostics-typescript SKIPPED eglot-test-python-autopep-formatting SKIPPED eglot-test-python-yapf-formatting SKIPPED eglot-test-rust-analyzer-hover-after-edit SKIPPED eglot-test-rust-analyzer-watches-files SKIPPED eglot-test-rust-on-type-formatting SKIPPED eglot-test-single-line-eldoc SKIPPED eglot-test-snippet-completions SKIPPED eglot-test-snippet-completions-with-company ^ permalink raw reply [flat|nested] 29+ messages in thread
* bug#62194: 30.0.50; Two Eglot-over-Tramp tests are failing on master, passing on emacs-29 2023-03-15 9:40 ` Michael Albinus @ 2023-03-15 11:45 ` Michael Albinus 2023-03-15 20:24 ` João Távora 2023-03-15 20:36 ` miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors 2023-03-15 20:16 ` João Távora 1 sibling, 2 replies; 29+ messages in thread From: Michael Albinus @ 2023-03-15 11:45 UTC (permalink / raw) To: João Távora; +Cc: 62194 Michael Albinus <michael.albinus@gmx.de> writes: Hi João, > This might not be the canonical path, but at least the local tests shall > find it. I'm running Fedora 37. Could you, pls, check? The log file is appended. In order to force analysis, I have used as remote server another one, which runs Ubuntu 22.10. clangd is installed there at a canonical location: --8<---------------cut here---------------start------------->8--- # which clangd /usr/bin/clangd --8<---------------cut here---------------end--------------->8--- And I run the tests from my Fedora laptop like --8<---------------cut here---------------start------------->8--- env REMOTE_TEMPORARY_FILE_DIRECTORY='/ssh:albinus@detlef:/tmp' make -C test eglot-tests.log SELECTOR='"tramp"' --8<---------------cut here---------------end--------------->8--- Sometimes the tests pass, sometimes not. In the latter case, it is the same picture as you have reported. But I wanted to reproduce it locally. The most interesting part is the backtrace: --8<---------------cut here---------------start------------->8--- Test eglot-test-tramp-test backtrace: tramp-sh-handle-file-attributes("/ssh:albinus@detlef:/tmp/eglot--fix apply(tramp-sh-handle-file-attributes "/ssh:albinus@detlef:/tmp/eglo tramp-vc-file-name-handler(file-attributes "/ssh:albinus@detlef:/tmp file-attributes("/ssh:albinus@detlef:/tmp/eglot--fixture2kRNPt/proj. tramp-handle-file-symlink-p("/ssh:albinus@detlef:/tmp/eglot--fixture apply(tramp-handle-file-symlink-p "/ssh:albinus@detlef:/tmp/eglot--f tramp-vc-file-name-handler(file-symlink-p "/ssh:albinus@detlef:/tmp/ file-symlink-p("/ssh:albinus@detlef:/tmp/eglot--fixture2kRNPt/proj.. tramp-sh-handle-file-truename("/ssh:albinus@detlef:/tmp/eglot--fixtu apply(tramp-sh-handle-file-truename "/ssh:albinus@detlef:/tmp/eglot- tramp-vc-file-name-handler(file-truename "/ssh:albinus@detlef:/tmp/e file-truename("/ssh:albinus@detlef:/tmp/eglot--fixture2kRNPt/proj... find-buffer-visiting("/ssh:albinus@detlef:/tmp/eglot--fixture2kRNPt/ #f(compiled-function (arg1 arg2 &rest rest) "Handle notification pub apply(#f(compiled-function (arg1 arg2 &rest rest) "Handle notificati eglot-handle-notification(#<eglot-lsp-server eglot-lsp-server-9d34aa apply(eglot-handle-notification #<eglot-lsp-server eglot-lsp-server- #f(compiled-function (server method params) #<bytecode -0xa39641d878 jsonrpc-connection-receive(#<eglot-lsp-server eglot-lsp-server-9d34a jsonrpc--process-filter(#<process EGLOT (project/(c-mode c-ts-mode c accept-process-output(#<process EGLOT (project/(c-mode c-ts-mode c++ tramp-accept-process-output(#<process *tramp/ssh albinus@detlef*>) tramp-wait-for-regexp(#<process *tramp/ssh albinus@detlef*> nil "\\( tramp-wait-for-output(#<process *tramp/ssh albinus@detlef*>) tramp-send-command((tramp-file-name "ssh" "albinus" nil "detlef" nil tramp-send-command-and-check((tramp-file-name "ssh" "albinus" nil "d tramp-run-test("-d" "/ssh:albinus@detlef:/tmp/eglot--fixture2kRNPt") tramp-sh-handle-file-directory-p("/ssh:albinus@detlef:/tmp/eglot--fi apply(tramp-sh-handle-file-directory-p "/ssh:albinus@detlef:/tmp/egl tramp-vc-file-name-handler(file-directory-p "/ssh:albinus@detlef:/tm file-directory-p("/ssh:albinus@detlef:/tmp/eglot--fixture2kRNPt/") locate-dominating-file("/ssh:albinus@detlef:/tmp/eglot--fixture2kRNP vc-find-root("/ssh:albinus@detlef:/tmp/eglot--fixture2kRNPt/proj..." vc-svn-registered("/ssh:albinus@detlef:/tmp/eglot--fixture2kRNPt/pro apply(vc-svn-registered "/ssh:albinus@detlef:/tmp/eglot--fixture2kRN vc-call-backend(SVN registered "/ssh:albinus@detlef:/tmp/eglot--fixt #f(compiled-function (b) #<bytecode 0x133be07a00af7442>)(SVN) mapc(#f(compiled-function (b) #<bytecode 0x133be07a00af7442>) (RCS C vc-registered("/ssh:albinus@detlef:/tmp/eglot--fixture2kRNPt/proj... apply(vc-registered "/ssh:albinus@detlef:/tmp/eglot--fixture2kRNPt/p tramp-run-real-handler(vc-registered ("/ssh:albinus@detlef:/tmp/eglo tramp-sh-handle-vc-registered("/ssh:albinus@detlef:/tmp/eglot--fixtu apply(tramp-sh-handle-vc-registered "/ssh:albinus@detlef:/tmp/eglot- tramp-sh-file-name-handler(vc-registered "/ssh:albinus@detlef:/tmp/e apply(tramp-sh-file-name-handler vc-registered "/ssh:albinus@detlef: tramp-file-name-handler(vc-registered "/ssh:albinus@detlef:/tmp/eglo vc-registered("/ssh:albinus@detlef:/tmp/eglot--fixture2kRNPt/proj... vc-backend("/ssh:albinus@detlef:/tmp/eglot--fixture2kRNPt/proj...") vc-refresh-state() run-hooks(find-file-hook) after-find-file(nil t) find-file-noselect-1(#<killed buffer> "/ssh:albinus@detlef:/tmp/eglo find-file-noselect("project/merdix.c") eglot--find-file-noselect("project/merdix.c") (set-buffer (eglot--find-file-noselect "project/merdix.c")) (save-current-buffer (set-buffer (eglot--find-file-noselect "project (closure ((server . #<eglot-lsp-server eglot-lsp-server-9d34aa>)) ni funcall((closure ((server . #<eglot-lsp-server eglot-lsp-server-9d34 (prog1 (funcall fn) (setq test-body-successful-p t)) (let* ((process-environment (append (list "XDG_CONFIG_HOME=/dev/null (unwind-protect (let* ((process-environment (append (list "XDG_CONFI (let* ((fixture-directory (make-nearby-temp-file "eglot--fixture" t) eglot--call-with-fixture((("project" ("coiso.c" . "bla") ("merdix.c" (let (server) (eglot--call-with-fixture '(("project" ("coiso.c" . "b eglot-tests--auto-detect-running-server-1() funcall(eglot-tests--auto-detect-running-server-1) (let* ((tramp-remote-path (cons 'tramp-own-remote-path tramp-remote- eglot--call-with-tramp-test(eglot-tests--auto-detect-running-server- (closure (tramp-histfile-override company-candidates typescript-mode ert--run-test-internal(#s(ert--test-execution-info :test #s(ert-test ert-run-test(#s(ert-test :name eglot-test-tramp-test :documentation ert-run-or-rerun-test(#s(ert--stats :selector "tramp" :tests ... :te ert-run-tests("tramp" #f(compiled-function (event-type &rest event-a ert-run-tests-batch("tramp") ert-run-tests-batch-and-exit("tramp") eval((ert-run-tests-batch-and-exit '"tramp") t) command-line-1(("-L" ":." "-l" "ert" "-l" "lisp/progmodes/eglot-test command-line() normal-top-level() --8<---------------cut here---------------end--------------->8--- Let's analyze bottom up. The very first time Tramp is involved is here: --8<---------------cut here---------------start------------->8--- tramp-file-name-handler(vc-registered "/ssh:albinus@detlef:/tmp/eglo vc-registered("/ssh:albinus@detlef:/tmp/eglot--fixture2kRNPt/proj... vc-backend("/ssh:albinus@detlef:/tmp/eglot--fixture2kRNPt/proj...") vc-refresh-state() run-hooks(find-file-hook) after-find-file(nil t) find-file-noselect-1(#<killed buffer> "/ssh:albinus@detlef:/tmp/eglo find-file-noselect("project/merdix.c") eglot--find-file-noselect("project/merdix.c") --8<---------------cut here---------------end--------------->8--- That is, file "project/merdix.c" is viewed, which has the absolute path "/ssh:albinus@detlef:/tmp/eglot--fixture2kRNPt/project/merdix.c". It has been loaded into the buffer successfully, and 'run-hooks(find-file-hook)' is applied. Since the file is under vc control, 'vc-registerd' is invoked. Some lines up in the backtrace, we see --8<---------------cut here---------------start------------->8--- jsonrpc--process-filter(#<process EGLOT (project/(c-mode c-ts-mode c accept-process-output(#<process EGLOT (project/(c-mode c-ts-mode c++ tramp-accept-process-output(#<process *tramp/ssh albinus@detlef*>) tramp-wait-for-regexp(#<process *tramp/ssh albinus@detlef*> nil "\\( tramp-wait-for-output(#<process *tramp/ssh albinus@detlef*>) tramp-send-command((tramp-file-name "ssh" "albinus" nil "detlef" nil tramp-send-command-and-check((tramp-file-name "ssh" "albinus" nil "d tramp-run-test("-d" "/ssh:albinus@detlef:/tmp/eglot--fixture2kRNPt") tramp-sh-handle-file-directory-p("/ssh:albinus@detlef:/tmp/eglot--fi --8<---------------cut here---------------end--------------->8--- Tramp needs to know, whether a remote file is a directory, and it sends the command "test -d /tmp/eglot--fixture2kRNPt". It waits for the result in 'tramp-accept-process-output(#<process *tramp/ssh albinus@detlef*>)' However, 'tramp-accept-process-output' reads also the jsonrpc output by 'accept-process-output(#<process EGLOT (project/(c-mode c-ts-mode c++...', which triggers 'jsonrpc--process-filter'. This results finally, on top of the backtrace, in another remote Tramp command: --8<---------------cut here---------------start------------->8--- tramp-sh-handle-file-attributes("/ssh:albinus@detlef:/tmp/eglot--fix apply(tramp-sh-handle-file-attributes "/ssh:albinus@detlef:/tmp/eglo tramp-vc-file-name-handler(file-attributes "/ssh:albinus@detlef:/tmp file-attributes("/ssh:albinus@detlef:/tmp/eglot--fixture2kRNPt/proj. --8<---------------cut here---------------end--------------->8--- It isn't visible in the backtrace, but it is for sure the famous "Forbidden reentrant call of Tramp" error. So I reommend the following: - At least in 'eglot--call-with-tramp-test', better in your Eglot package, suppress vc related checks, by binding --8<---------------cut here---------------start------------->8--- (let ((vc-ignore-dir-regexp (format "\\(%s\\)\\|\\(%s\\)" vc-ignore-dir-regexp tramp-file-name-regexp))) ...) --8<---------------cut here---------------end--------------->8--- - If this works sufficiently, this bug shall be either closed, or merged with bug#60534, which tracks this error. Best regards, Michael. ^ permalink raw reply [flat|nested] 29+ messages in thread
* bug#62194: 30.0.50; Two Eglot-over-Tramp tests are failing on master, passing on emacs-29 2023-03-15 11:45 ` Michael Albinus @ 2023-03-15 20:24 ` João Távora 2023-03-15 20:36 ` miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors 1 sibling, 0 replies; 29+ messages in thread From: João Távora @ 2023-03-15 20:24 UTC (permalink / raw) To: Michael Albinus; +Cc: 62194 merge 62194 61350 thanks Michael Albinus <michael.albinus@gmx.de> writes: > So I reommend the following: > > - At least in 'eglot--call-with-tramp-test', better in your Eglot > package, suppress vc related checks, by binding > > (let ((vc-ignore-dir-regexp > (format "\\(%s\\)\\|\\(%s\\)" > vc-ignore-dir-regexp > tramp-file-name-regexp))) > ...) > > - If this works sufficiently, this bug shall be either closed, or merged > with bug#60534, which tracks this error. I don't think I should be doing something this in eglot-tests.el, because the tests pass on emacs-29 and this failure was introduced very recently. I've just confirmed inequivocally that these failures are direct fallout from the fix to bug#61350, so I'm merging the two bugs: 62194 and 61350. As I wrote in bug#61350, if I revert that commit and apply the simpler patch that we discussed, everything's good, and I can remove the ControlMaster supression workaround in Eglot, too. João diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 47173b95bea..885b29f9471 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -5800,6 +5800,11 @@ tramp-accept-process-output This is needed in order to hide `last-coding-system-used', which is set for process communication also. If the user quits via `C-g', it is propagated up to `tramp-file-name-handler'." + (when-let (((process-get proc 'shared-socket)) + (v (process-get proc 'vector))) + (dolist (p (delq proc (process-list))) + (when (tramp-file-name-equal-p v (process-get p 'vector)) + (while (accept-process-output p 0 nil t))))) (with-current-buffer (process-buffer proc) (let ((inhibit-read-only t) last-coding-system-used ^ permalink raw reply related [flat|nested] 29+ messages in thread
* bug#62194: 30.0.50; Two Eglot-over-Tramp tests are failing on master, passing on emacs-29 2023-03-15 11:45 ` Michael Albinus 2023-03-15 20:24 ` João Távora @ 2023-03-15 20:36 ` miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors 2023-03-15 20:45 ` João Távora 1 sibling, 1 reply; 29+ messages in thread From: miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-03-15 20:36 UTC (permalink / raw) To: Michael Albinus, João Távora; +Cc: 62194 [-- Attachment #1: Type: text/plain, Size: 4696 bytes --] Michael Albinus <michael.albinus@gmx.de> writes: > That is, file "project/merdix.c" is viewed, which has the absolute path > "/ssh:albinus@detlef:/tmp/eglot--fixture2kRNPt/project/merdix.c". It has > been loaded into the buffer successfully, and 'run-hooks(find-file-hook)' > is applied. Since the file is under vc control, 'vc-registerd' is invoked. > Some lines up in the backtrace, we see > > --8<---------------cut here---------------start------------->8--- > jsonrpc--process-filter(#<process EGLOT (project/(c-mode c-ts-mode c > accept-process-output(#<process EGLOT (project/(c-mode c-ts-mode c++ > tramp-accept-process-output(#<process *tramp/ssh albinus@detlef*>) > tramp-wait-for-regexp(#<process *tramp/ssh albinus@detlef*> nil "\\( > tramp-wait-for-output(#<process *tramp/ssh albinus@detlef*>) > tramp-send-command((tramp-file-name "ssh" "albinus" nil "detlef" nil > tramp-send-command-and-check((tramp-file-name "ssh" "albinus" nil "d > tramp-run-test("-d" "/ssh:albinus@detlef:/tmp/eglot--fixture2kRNPt") > tramp-sh-handle-file-directory-p("/ssh:albinus@detlef:/tmp/eglot--fi > --8<---------------cut here---------------end--------------->8--- > > Tramp needs to know, whether a remote file is a directory, and it > sends the command "test -d /tmp/eglot--fixture2kRNPt". It waits for the > result in 'tramp-accept-process-output(#<process *tramp/ssh albinus@detlef*>)' > However, 'tramp-accept-process-output' reads also the jsonrpc output by > 'accept-process-output(#<process EGLOT (project/(c-mode c-ts-mode c++...', I guess that this must be due to (defun tramp-accept-process-output (proc &optional _timeout) "Like `accept-process-output' for Tramp processes. This is needed in order to hide `last-coding-system-used', which is set for process communication also. If the user quits via `C-g', it is propagated up to `tramp-file-name-handler'." (declare (advertised-calling-convention (proc) "29.2")) ;; There could be other processes which use the same socket for ;; communication. This could block the output for the current ;; process. Read such output first. (Bug#61350) (when-let (((process-get proc 'shared-socket)) (v (process-get proc 'vector))) (dolist (p (delq proc (process-list))) (when (tramp-file-name-equal-p v (process-get p 'vector)) THIS --> (accept-process-output p 0 nil t)))) I'm somewhat against these additional accept-process-output calls. While we do limit them to processes from the same ssh connection, I'd argue that usually, such processes aren't really related to the main tramp ssh process. They could be a random *shell* process that doesn't really belong to tramp.el any more IMO. Or in this case, eglot's jsonrpc process. On a bright note, I've been playing around with the original Eglot freeze bug#61350. It seems that, given two ControlMaster ssh processes where one refuses to produce output due to the other filling up the shared ssh connection, we can unblock the blocked process by sending it SIGWINCH. Here is a POC tramp-accept-process-output implementation that does this, and it seems to fix the freeze bug: (defun tramp-accept-process-output (proc &optional _timeout) "Like `accept-process-output' for Tramp processes. This is needed in order to hide `last-coding-system-used', which is set for process communication also. If the user quits via `C-g', it is propagated up to `tramp-file-name-handler'." (declare (advertised-calling-convention (proc) "29.2")) (with-current-buffer (process-buffer proc) (let ((inhibit-read-only t) last-coding-system-used result) ;; This must be protected by the "locked" property. (with-tramp-locked-connection proc ;; JUST-THIS-ONE is set due to Bug#12145. `with-local-quit' ;; returns t in order to report success. (if (with-local-quit (setq result (accept-process-output proc 0 nil t)) (when (and (not result) (process-get proc 'shared-socket)) ;; bug#62194 (tramp-message proc 10 "%s: Trying to unblock process with SIGWINCH" proc) (internal-default-signal-process proc 'sigwinch)) t) (tramp-message proc 10 "%s %s %s\n%s" proc (process-status proc) result (buffer-string)) ;; Propagate quit. (keyboard-quit))) result))) Best regards. [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 861 bytes --] ^ permalink raw reply [flat|nested] 29+ messages in thread
* bug#62194: 30.0.50; Two Eglot-over-Tramp tests are failing on master, passing on emacs-29 2023-03-15 20:36 ` miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-03-15 20:45 ` João Távora 2023-03-16 12:02 ` Michael Albinus 0 siblings, 1 reply; 29+ messages in thread From: João Távora @ 2023-03-15 20:45 UTC (permalink / raw) To: miha; +Cc: Michael Albinus, 62194 On Wed, Mar 15, 2023 at 8:31 PM <miha@kamnitnik.top> wrote: > > (dolist (p (delq proc (process-list))) > (when (tramp-file-name-equal-p v (process-get p 'vector)) > THIS --> (accept-process-output p 0 nil t)))) > > I'm somewhat against these additional accept-process-output calls. While > we do limit them to processes from the same ssh connection, I'd argue > that usually, such processes aren't really related to the main tramp ssh > process. They could be a random *shell* process that doesn't really > belong to tramp.el any more IMO. Or in this case, eglot's jsonrpc > process. I'm "against" this too, but hard facts here trump arguments and opinion. This is exactly what fixes the ControlMaster hang, that's well understood, and is really intended. It brings about some other failures but I've just confirmed that if you put (while (accept-process-output p 0 nil t)) then all's well. Of course, it's only _one_ of the ways to fix the problem. If you have another more elegant one, but I don't know if signals is a great one. I'd guess SIGWINCH to be somewhat limited in platform support, right? João ^ permalink raw reply [flat|nested] 29+ messages in thread
* bug#62194: 30.0.50; Two Eglot-over-Tramp tests are failing on master, passing on emacs-29 2023-03-15 20:45 ` João Távora @ 2023-03-16 12:02 ` Michael Albinus 2023-03-16 12:20 ` João Távora 0 siblings, 1 reply; 29+ messages in thread From: Michael Albinus @ 2023-03-16 12:02 UTC (permalink / raw) To: João Távora; +Cc: 62194, miha João Távora <joaotavora@gmail.com> writes: Hi, > I'm "against" this too, but hard facts here trump arguments and opinion. > This is exactly what fixes the ControlMaster hang, that's well understood, > and is really intended. It brings about some other failures but I've just > confirmed that if you put > > (while (accept-process-output p 0 nil t)) > > then all's well. > > Of course, it's only _one_ of the ways to fix the problem. If you have another > more elegant one, but I don't know if signals is a great one. I'd guess > SIGWINCH to be somewhat limited in platform support, right? I'm also against using SIGWINCH at this point. It isn't portable, and it isn't even known whether it is needed always. The proposed patch wraps it by --8<---------------cut here---------------start------------->8--- (when (and (not result) (process-get proc 'shared-socket)) --8<---------------cut here---------------end--------------->8--- But the reason why result is nil could be simply the case that the remote side hasn't something to tell yet, and we need to wait. And this would complicate the scenario further. We have already a very fragile tramp-accept-process-output, which has changed again and again ove the last 20 years. I *really* would like to see a simple and robust implementation. My attempt with the additional process property `shared-socket' has failed, and I've reverted it. Pushed to master. The Eglot Tramp tests pass now, so I recommend to close this bug. > João Best regards, Michael. ^ permalink raw reply [flat|nested] 29+ messages in thread
* bug#62194: 30.0.50; Two Eglot-over-Tramp tests are failing on master, passing on emacs-29 2023-03-16 12:02 ` Michael Albinus @ 2023-03-16 12:20 ` João Távora 2023-03-16 14:57 ` Michael Albinus 0 siblings, 1 reply; 29+ messages in thread From: João Távora @ 2023-03-16 12:20 UTC (permalink / raw) To: Michael Albinus; +Cc: 62194, miha Michael Albinus <michael.albinus@gmx.de> writes: > João Távora <joaotavora@gmail.com> writes: > > Hi, > >> I'm "against" this too, but hard facts here trump arguments and opinion. >> This is exactly what fixes the ControlMaster hang, that's well understood, >> and is really intended. It brings about some other failures but I've just >> confirmed that if you put >> >> (while (accept-process-output p 0 nil t)) >> >> then all's well. >> >> Of course, it's only _one_ of the ways to fix the problem. If you have another >> more elegant one, but I don't know if signals is a great one. I'd guess >> SIGWINCH to be somewhat limited in platform support, right? > > I'm also against using SIGWINCH at this point. It isn't portable, and it > isn't even known whether it is needed always. The proposed patch wraps > it by > > (when (and (not result) (process-get proc 'shared-socket)) > > But the reason why result is nil could be simply the case that the > remote side hasn't something to tell yet, and we need to wait. > > And this would complicate the scenario further. We have already a very > fragile tramp-accept-process-output, which has changed again and again > ove the last 20 years. I *really* would like to see a simple and robust > implementation. > > My attempt with the additional process property `shared-socket' has > failed, and I've reverted it. > > Pushed to master. The Eglot Tramp tests pass now, so I recommend to > close this bug. Michael, now you've brought back the Eglot/Tramp hang of bug#61350! Really Michael, please consider reverting 0330cff65ae (your latest) and 54ef338ba36 (from two days ago), and going back to the simpler version that you originally proposed, with just the 'while' added there. It fixes all this mess. _Then_ we can go get to thinking about the "simple and robust" implementation. João ^ permalink raw reply [flat|nested] 29+ messages in thread
* bug#62194: 30.0.50; Two Eglot-over-Tramp tests are failing on master, passing on emacs-29 2023-03-16 12:20 ` João Távora @ 2023-03-16 14:57 ` Michael Albinus 2023-03-16 15:12 ` João Távora 0 siblings, 1 reply; 29+ messages in thread From: Michael Albinus @ 2023-03-16 14:57 UTC (permalink / raw) To: João Távora; +Cc: 62194, miha João Távora <joaotavora@gmail.com> writes: Hi João, > Michael, now you've brought back the Eglot/Tramp hang of bug#61350! > > Really Michael, please consider reverting 0330cff65ae (your latest) and > 54ef338ba36 (from two days ago), and going back to the simpler version > that you originally proposed, with just the 'while' added there. Honestly, I'm lost with all the patches back forth and back. Could you pls show me the change you propose, based on the current master state? I don't believe we need to revert the timeout change I have applied, because in fact any tramp-accept-process-output shall use a timeout of 0; otherwise it could block. > It fixes all this mess. _Then_ we can go get to thinking about the > "simple and robust" implementation. Yes. Although I have no clue yet what shall be done. > João Best regards, Michael. ^ permalink raw reply [flat|nested] 29+ messages in thread
* bug#62194: 30.0.50; Two Eglot-over-Tramp tests are failing on master, passing on emacs-29 2023-03-16 14:57 ` Michael Albinus @ 2023-03-16 15:12 ` João Távora 2023-03-16 17:35 ` Michael Albinus 0 siblings, 1 reply; 29+ messages in thread From: João Távora @ 2023-03-16 15:12 UTC (permalink / raw) To: Michael Albinus; +Cc: 62194, miha [-- Attachment #1: Type: text/plain, Size: 1875 bytes --] Michael Albinus <michael.albinus@gmx.de> writes: > João Távora <joaotavora@gmail.com> writes: > > Hi João, > >> Michael, now you've brought back the Eglot/Tramp hang of bug#61350! >> >> Really Michael, please consider reverting 0330cff65ae (your latest) and >> 54ef338ba36 (from two days ago), and going back to the simpler version >> that you originally proposed, with just the 'while' added there. > > Honestly, I'm lost with all the patches back forth and back. Could you > pls show me the change you propose, based on the current master state? OK. Based on the current master state, I'm sending you 4 (four patches). I known it looks a lot, but is quite simple. '0001-Revert-Michael-Albinus-Fix-regression-in-Tramp-bug-6.patch' Reverts your latest commit 0330cff65ae, where some settings of 'shared-socket' are commented out. '0002-Revert-Michael-Albinus-Improve-Tramp-processes-to-ac.patch' Reverts 54ef338ba36 from two days ago, for all purposes restoring the state of Tramp to what is in emacs-29. '0003-A-simpler-fix-for-bug-61350-a-small-tweak-Michael-s-.patch' This is the simpler patch that adds the (while (accept-process-output)). It is directly based on your first idea. It keeps the timeout. It is the most conservative patch. '0004-Just-for-testing-Remove-Tramp-specific-workaround-in.patch' This removes the Tramp-specific Eglot workaround. It's good for testing the original hang reporting in bug#61350 After you have applied these four patches, the following should happen: * Tramp tests should have the same pass rate in master as in emacs-29 * bug#61350 should be fixed -- even without the Eglot workaround. Let me know if you need help testing this (I have a nifty dockerfile and some command-line incantations that make testing very easy). João [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-Revert-Michael-Albinus-Fix-regression-in-Tramp-bug-6.patch --] [-- Type: text/x-patch, Size: 2829 bytes --] From a168ef267aadf2d83627806c18853a7aaf1e88ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20T=C3=A1vora?= <joaotavora@gmail.com> Date: Thu, 16 Mar 2023 12:24:29 +0000 Subject: [PATCH 1/4] Revert Michael Albinus' "Fix regression in Tramp (bug#62194)" This reverts commit 0330cff65ae837e93ae4d059acf643734d16386d. --- lisp/net/tramp-sh.el | 6 +++--- lisp/net/tramp.el | 3 +-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index 2f990af334d..882b79b3ee7 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -2427,7 +2427,7 @@ tramp-do-copy-or-rename-file-out-of-band ;; This is neded for ssh or PuTTY based processes, and ;; only if the respective options are set. Perhaps, ;; the setting could be more fine-grained. - ;; (process-put p 'shared-socket t) + (process-put p 'shared-socket t) (process-put p 'adjust-window-size-function #'ignore) (set-process-query-on-exit-flag p nil) @@ -3760,7 +3760,7 @@ tramp-sh-handle-file-notify-add-watch ;; This is neded for ssh or PuTTY based processes, and only if ;; the respective options are set. Perhaps, the setting could ;; be more fine-grained. - ;; (process-put p 'shared-socket t) + (process-put p 'shared-socket t) ;; Needed for process filter. (process-put p 'events events) (process-put p 'watch-name localname) @@ -5124,7 +5124,7 @@ tramp-maybe-open-connection ;; This is neded for ssh or PuTTY based processes, and ;; only if the respective options are set. Perhaps, ;; the setting could be more fine-grained. - ;; (process-put p 'shared-socket t) + (process-put p 'shared-socket t) (process-put p 'adjust-window-size-function #'ignore) (set-process-query-on-exit-flag p nil) (setq tramp-current-connection (cons vec (current-time))) diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 0c8f8acc07d..b6e985db6b1 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -5091,7 +5091,7 @@ tramp-handle-make-process ;; This is neded for ssh or PuTTY based processes, and ;; only if the respective options are set. Perhaps, the ;; setting could be more fine-grained. - ;; (process-put p 'shared-socket t) + (process-put p 'shared-socket t) (process-put p 'remote-command orig-command) (tramp-set-connection-property p "remote-command" orig-command) @@ -5809,7 +5809,6 @@ tramp-accept-process-output ;; There could be other processes which use the same socket for ;; communication. This could block the output for the current ;; process. Read such output first. (Bug#61350) - ;; The process property isn't set anymore due to Bug#62194. (when-let (((process-get proc 'shared-socket)) (v (process-get proc 'vector))) (dolist (p (delq proc (process-list))) -- 2.39.2 [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #3: 0002-Revert-Michael-Albinus-Improve-Tramp-processes-to-ac.patch --] [-- Type: text/x-patch, Size: 9930 bytes --] From 14e37318dd5f170771fb1a74d69e89d5e756d1cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20T=C3=A1vora?= <joaotavora@gmail.com> Date: Thu, 16 Mar 2023 12:26:04 +0000 Subject: [PATCH 2/4] Revert Michael Albinus' "Improve Tramp processes to accept..." It was found to cause the failure of test file-notify-test04-autorevert-remote, among other instabilities. This reverts commit 54ef338ba3670415cf47fabc33a92d4904707c7e. --- lisp/net/tramp-adb.el | 2 +- lisp/net/tramp-gvfs.el | 2 +- lisp/net/tramp-sh.el | 14 +------------- lisp/net/tramp-smb.el | 6 +++--- lisp/net/tramp-sudoedit.el | 2 +- lisp/net/tramp.el | 33 +++++++++------------------------ 6 files changed, 16 insertions(+), 43 deletions(-) diff --git a/lisp/net/tramp-adb.el b/lisp/net/tramp-adb.el index d338201ab72..64f45e7958d 100644 --- a/lisp/net/tramp-adb.el +++ b/lisp/net/tramp-adb.el @@ -990,7 +990,7 @@ tramp-adb-handle-make-process (progn (goto-char (point-min)) (not (search-forward "\n" nil t))) - (tramp-accept-process-output p)) + (tramp-accept-process-output p 0)) (delete-region (point-min) (point))) ;; Provide error buffer. This shows only ;; initial error messages; messages diff --git a/lisp/net/tramp-gvfs.el b/lisp/net/tramp-gvfs.el index c1ad37de1d2..266724c587f 100644 --- a/lisp/net/tramp-gvfs.el +++ b/lisp/net/tramp-gvfs.el @@ -1469,7 +1469,7 @@ tramp-gvfs-handle-file-notify-add-watch (set-process-sentinel p #'tramp-file-notify-process-sentinel) ;; There might be an error if the monitor is not supported. ;; Give the filter a chance to read the output. - (while (tramp-accept-process-output p)) + (while (tramp-accept-process-output p 0)) (unless (process-live-p p) (tramp-error p 'file-notify-error "Monitoring not supported for `%s'" file-name)) diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index 882b79b3ee7..48ebfff6cfe 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -2424,10 +2424,6 @@ tramp-do-copy-or-rename-file-out-of-band copy-program copy-args))) (tramp-message v 6 "%s" (string-join (process-command p) " ")) (process-put p 'vector v) - ;; This is neded for ssh or PuTTY based processes, and - ;; only if the respective options are set. Perhaps, - ;; the setting could be more fine-grained. - (process-put p 'shared-socket t) (process-put p 'adjust-window-size-function #'ignore) (set-process-query-on-exit-flag p nil) @@ -3757,10 +3753,6 @@ tramp-sh-handle-file-notify-add-watch (string-join sequence " ")) (tramp-message v 6 "Run `%s', %S" (string-join sequence " ") p) (process-put p 'vector v) - ;; This is neded for ssh or PuTTY based processes, and only if - ;; the respective options are set. Perhaps, the setting could - ;; be more fine-grained. - (process-put p 'shared-socket t) ;; Needed for process filter. (process-put p 'events events) (process-put p 'watch-name localname) @@ -3769,7 +3761,7 @@ tramp-sh-handle-file-notify-add-watch (set-process-sentinel p #'tramp-file-notify-process-sentinel) ;; There might be an error if the monitor is not supported. ;; Give the filter a chance to read the output. - (while (tramp-accept-process-output p)) + (while (tramp-accept-process-output p 0)) (unless (process-live-p p) (tramp-error p 'file-notify-error "Monitoring not supported for `%s'" file-name)) @@ -5121,10 +5113,6 @@ tramp-maybe-open-connection ;; Set sentinel and query flag. Initialize variables. (set-process-sentinel p #'tramp-process-sentinel) (process-put p 'vector vec) - ;; This is neded for ssh or PuTTY based processes, and - ;; only if the respective options are set. Perhaps, - ;; the setting could be more fine-grained. - (process-put p 'shared-socket t) (process-put p 'adjust-window-size-function #'ignore) (set-process-query-on-exit-flag p nil) (setq tramp-current-connection (cons vec (current-time))) diff --git a/lisp/net/tramp-smb.el b/lisp/net/tramp-smb.el index bb4ab9e3057..1aa4520eeb6 100644 --- a/lisp/net/tramp-smb.el +++ b/lisp/net/tramp-smb.el @@ -757,7 +757,7 @@ tramp-smb-action-get-acl "Read ACL data from connection buffer." (unless (process-live-p proc) ;; Accept pending output. - (while (tramp-accept-process-output proc)) + (while (tramp-accept-process-output proc 0)) (with-current-buffer (tramp-get-connection-buffer vec) ;; There might be a hidden password prompt. (widen) @@ -1363,7 +1363,7 @@ tramp-smb-action-set-acl "Set ACL data." (unless (process-live-p proc) ;; Accept pending output. - (while (tramp-accept-process-output proc)) + (while (tramp-accept-process-output proc 0)) (tramp-message vec 10 "\n%s" (tramp-get-buffer-string (tramp-get-connection-buffer vec))) (throw 'tramp-action 'ok))) @@ -2023,7 +2023,7 @@ tramp-smb-wait-for-output ;; Read pending output. (while (not (re-search-forward tramp-smb-prompt nil t)) - (while (tramp-accept-process-output p)) + (while (tramp-accept-process-output p 0)) (goto-char (point-min))) (tramp-message vec 6 "\n%s" (buffer-string)) diff --git a/lisp/net/tramp-sudoedit.el b/lisp/net/tramp-sudoedit.el index 3cacde2468c..abb9afc570b 100644 --- a/lisp/net/tramp-sudoedit.el +++ b/lisp/net/tramp-sudoedit.el @@ -692,7 +692,7 @@ tramp-sudoedit-action-sudo "Check, whether a sudo process has finished. Remove unneeded output." ;; There might be pending output for the exit status. (unless (process-live-p proc) - (while (tramp-accept-process-output proc)) + (while (tramp-accept-process-output proc 0)) ;; Delete narrowed region, it would be in the way reading a Lisp form. (goto-char (point-min)) (widen) diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index b6e985db6b1..47173b95bea 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -5087,11 +5087,6 @@ tramp-handle-make-process ;; t. See Bug#51177. (when filter (set-process-filter p filter)) - (process-put p 'vector v) - ;; This is neded for ssh or PuTTY based processes, and - ;; only if the respective options are set. Perhaps, the - ;; setting could be more fine-grained. - (process-put p 'shared-socket t) (process-put p 'remote-command orig-command) (tramp-set-connection-property p "remote-command" orig-command) @@ -5494,7 +5489,7 @@ tramp-handle-file-notify-rm-watch ;; There might be pending output. Avoid problems with reentrant ;; call of Tramp. (ignore-errors - (while (tramp-accept-process-output proc))) + (while (tramp-accept-process-output proc 0))) (tramp-message proc 6 "Kill %S" proc) (delete-process proc)) @@ -5646,13 +5641,13 @@ tramp-action-process-alive "Check, whether a process has finished." (unless (process-live-p proc) ;; There might be pending output. - (while (tramp-accept-process-output proc)) + (while (tramp-accept-process-output proc 0)) (throw 'tramp-action 'process-died))) (defun tramp-action-out-of-band (proc vec) "Check, whether an out-of-band copy has finished." ;; There might be pending output for the exit status. - (while (tramp-accept-process-output proc)) + (while (tramp-accept-process-output proc 0)) (cond ((and (not (process-live-p proc)) (zerop (process-exit-status proc))) (tramp-message vec 3 "Process has finished.") @@ -5683,7 +5678,7 @@ tramp-process-one-action (while (not found) ;; Reread output once all actions have been performed. ;; Obviously, the output was not complete. - (while (tramp-accept-process-output proc)) + (while (tramp-accept-process-output proc 0)) (setq todo actions) (while todo (setq item (pop todo) @@ -5800,21 +5795,11 @@ with-tramp-locked-connection ,@body) (tramp-flush-connection-property ,proc "locked")))) -(defun tramp-accept-process-output (proc &optional _timeout) +(defun tramp-accept-process-output (proc &optional timeout) "Like `accept-process-output' for Tramp processes. This is needed in order to hide `last-coding-system-used', which is set for process communication also. If the user quits via `C-g', it is propagated up to `tramp-file-name-handler'." - (declare (advertised-calling-convention (proc) "29.2")) - ;; There could be other processes which use the same socket for - ;; communication. This could block the output for the current - ;; process. Read such output first. (Bug#61350) - (when-let (((process-get proc 'shared-socket)) - (v (process-get proc 'vector))) - (dolist (p (delq proc (process-list))) - (when (tramp-file-name-equal-p v (process-get p 'vector)) - (accept-process-output p 0 nil t)))) - (with-current-buffer (process-buffer proc) (let ((inhibit-read-only t) last-coding-system-used @@ -5824,10 +5809,10 @@ tramp-accept-process-output ;; JUST-THIS-ONE is set due to Bug#12145. `with-local-quit' ;; returns t in order to report success. (if (with-local-quit - (setq result (accept-process-output proc 0 nil t)) t) + (setq result (accept-process-output proc timeout nil t)) t) (tramp-message - proc 10 "%s %s %s\n%s" - proc (process-status proc) result (buffer-string)) + proc 10 "%s %s %s %s\n%s" + proc timeout (process-status proc) result (buffer-string)) ;; Propagate quit. (keyboard-quit))) result))) @@ -6840,7 +6825,7 @@ tramp-interrupt-process (tramp-get-remote-null-device (process-get proc 'vector)))) ;; Wait, until the process has disappeared. If it doesn't, ;; fall back to the default implementation. - (while (tramp-accept-process-output proc)) + (while (tramp-accept-process-output proc 0)) (not (process-live-p proc)))))) (add-hook 'interrupt-process-functions #'tramp-interrupt-process) -- 2.39.2 [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #4: 0003-A-simpler-fix-for-bug-61350-a-small-tweak-Michael-s-.patch --] [-- Type: text/x-patch, Size: 1161 bytes --] From 08f32d4026bcd657c78d147e61af467d88e12748 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20T=C3=A1vora?= <joaotavora@gmail.com> Date: Wed, 15 Mar 2023 20:02:43 +0000 Subject: [PATCH 3/4] A simpler fix for bug#61350, a small tweak Michael's original idea. * lisp/net/tramp.el (tramp-accept-process-output): Accept process from related processes. --- lisp/net/tramp.el | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 47173b95bea..885b29f9471 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -5800,6 +5800,11 @@ tramp-accept-process-output This is needed in order to hide `last-coding-system-used', which is set for process communication also. If the user quits via `C-g', it is propagated up to `tramp-file-name-handler'." + (when-let (((process-get proc 'shared-socket)) + (v (process-get proc 'vector))) + (dolist (p (delq proc (process-list))) + (when (tramp-file-name-equal-p v (process-get p 'vector)) + (while (accept-process-output p 0 nil t))))) (with-current-buffer (process-buffer proc) (let ((inhibit-read-only t) last-coding-system-used -- 2.39.2 [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #5: 0004-Just-for-testing-Remove-Tramp-specific-workaround-in.patch --] [-- Type: text/x-patch, Size: 1935 bytes --] From 7bb5dc7cfa7ff3d553369270f7cc6cd9868c69e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20T=C3=A1vora?= <joaotavora@gmail.com> Date: Wed, 15 Mar 2023 19:52:34 +0000 Subject: [PATCH 4/4] Just for testing: Remove Tramp-specific workaround in Eglot * lisp/progmodes/eglot.el (eglot--connect): No longer bind tramp vars. (tramp-ssh-controlmaster-options) (tramp-use-ssh-controlmaster-options): Remove. --- lisp/progmodes/eglot.el | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el index 6c1b9eafe43..f96f7dd254f 100644 --- a/lisp/progmodes/eglot.el +++ b/lisp/progmodes/eglot.el @@ -130,8 +130,6 @@ (defvar markdown-fontify-code-blocks-natively) (defvar company-backends) (defvar company-tooltip-align-annotations) -(defvar tramp-ssh-controlmaster-options) -(defvar tramp-use-ssh-controlmaster-options) \f ;;; User tweakable stuff @@ -1251,15 +1249,7 @@ eglot--connect (contact (cl-subseq contact 0 probe))) `(:process ,(lambda () - (let ((default-directory default-directory) - ;; bug#61350: Tramp turns on a feature - ;; by default that can't (yet) handle - ;; very much data so we turn it off - ;; unconditionally -- just for our - ;; process. - (tramp-use-ssh-controlmaster-options t) - (tramp-ssh-controlmaster-options - "-o ControlMaster=no -o ControlPath=none")) + (let ((default-directory default-directory)) (make-process :name readable-name :command (setq server-info (eglot--cmd contact)) -- 2.39.2 ^ permalink raw reply related [flat|nested] 29+ messages in thread
* bug#62194: 30.0.50; Two Eglot-over-Tramp tests are failing on master, passing on emacs-29 2023-03-16 15:12 ` João Távora @ 2023-03-16 17:35 ` Michael Albinus 2023-03-16 17:59 ` João Távora 0 siblings, 1 reply; 29+ messages in thread From: Michael Albinus @ 2023-03-16 17:35 UTC (permalink / raw) To: João Távora; +Cc: 62194, miha João Távora <joaotavora@gmail.com> writes: Hi João, >> Honestly, I'm lost with all the patches back forth and back. Could you >> pls show me the change you propose, based on the current master state? > > OK. Based on the current master state, I'm sending you 4 (four > patches). I known it looks a lot, but is quite simple. I've applied the 4 patches. As expected, eglot-tests, tramp-tests, and filenotify-tests run successfully. > * bug#61350 should be fixed -- even without the Eglot workaround. Let > me know if you need help testing this (I have a nifty dockerfile and > some command-line incantations that make testing very easy). The example given by Thomas blocks, again. So we are back to the beginning, aren't we? > João Best regards, Michael. ^ permalink raw reply [flat|nested] 29+ messages in thread
* bug#62194: 30.0.50; Two Eglot-over-Tramp tests are failing on master, passing on emacs-29 2023-03-16 17:35 ` Michael Albinus @ 2023-03-16 17:59 ` João Távora 2023-03-16 21:18 ` miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors 2023-03-17 10:44 ` Michael Albinus 0 siblings, 2 replies; 29+ messages in thread From: João Távora @ 2023-03-16 17:59 UTC (permalink / raw) To: Michael Albinus; +Cc: 62194, miha [-- Attachment #1: Type: text/plain, Size: 1759 bytes --] Michael Albinus <michael.albinus@gmx.de> writes: > João Távora <joaotavora@gmail.com> writes: > > Hi João, > >>> Honestly, I'm lost with all the patches back forth and back. Could you >>> pls show me the change you propose, based on the current master state? >> >> OK. Based on the current master state, I'm sending you 4 (four >> patches). I known it looks a lot, but is quite simple. > > I've applied the 4 patches. As expected, eglot-tests, tramp-tests, and > filenotify-tests run successfully. > >> * bug#61350 should be fixed -- even without the Eglot workaround. Let >> me know if you need help testing this (I have a nifty dockerfile and >> some command-line incantations that make testing very easy). > > The example given by Thomas blocks, again. So we are back to the > beginning, aren't we? Doh! I gave you a wrong patch-0003. It needs a tweak. You can either apply this one-line diff or re-aplply attached patchset of 4 over origin/master again. Then please try again, and sorry for the extra confusion. diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 885b29f9471..a7406a9d80e 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -5804,7 +5804,7 @@ tramp-accept-process-output (v (process-get proc 'vector))) (dolist (p (delq proc (process-list))) (when (tramp-file-name-equal-p v (process-get p 'vector)) - (while (accept-process-output p 0 nil t))))) + (while (accept-process-output p 0))))) (with-current-buffer (process-buffer proc) (let ((inhibit-read-only t) last-coding-system-used I've tested Thomas's example 5 times in a row, moving around energically, in the Emacs -Q, exercising multiple Eglot features, etc. 0% failures. [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-Revert-Michael-Albinus-Fix-regression-in-Tramp-bug-6.patch --] [-- Type: text/x-patch, Size: 2829 bytes --] From a168ef267aadf2d83627806c18853a7aaf1e88ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20T=C3=A1vora?= <joaotavora@gmail.com> Date: Thu, 16 Mar 2023 12:24:29 +0000 Subject: [PATCH 1/4] Revert Michael Albinus' "Fix regression in Tramp (bug#62194)" This reverts commit 0330cff65ae837e93ae4d059acf643734d16386d. --- lisp/net/tramp-sh.el | 6 +++--- lisp/net/tramp.el | 3 +-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index 2f990af334d..882b79b3ee7 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -2427,7 +2427,7 @@ tramp-do-copy-or-rename-file-out-of-band ;; This is neded for ssh or PuTTY based processes, and ;; only if the respective options are set. Perhaps, ;; the setting could be more fine-grained. - ;; (process-put p 'shared-socket t) + (process-put p 'shared-socket t) (process-put p 'adjust-window-size-function #'ignore) (set-process-query-on-exit-flag p nil) @@ -3760,7 +3760,7 @@ tramp-sh-handle-file-notify-add-watch ;; This is neded for ssh or PuTTY based processes, and only if ;; the respective options are set. Perhaps, the setting could ;; be more fine-grained. - ;; (process-put p 'shared-socket t) + (process-put p 'shared-socket t) ;; Needed for process filter. (process-put p 'events events) (process-put p 'watch-name localname) @@ -5124,7 +5124,7 @@ tramp-maybe-open-connection ;; This is neded for ssh or PuTTY based processes, and ;; only if the respective options are set. Perhaps, ;; the setting could be more fine-grained. - ;; (process-put p 'shared-socket t) + (process-put p 'shared-socket t) (process-put p 'adjust-window-size-function #'ignore) (set-process-query-on-exit-flag p nil) (setq tramp-current-connection (cons vec (current-time))) diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 0c8f8acc07d..b6e985db6b1 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -5091,7 +5091,7 @@ tramp-handle-make-process ;; This is neded for ssh or PuTTY based processes, and ;; only if the respective options are set. Perhaps, the ;; setting could be more fine-grained. - ;; (process-put p 'shared-socket t) + (process-put p 'shared-socket t) (process-put p 'remote-command orig-command) (tramp-set-connection-property p "remote-command" orig-command) @@ -5809,7 +5809,6 @@ tramp-accept-process-output ;; There could be other processes which use the same socket for ;; communication. This could block the output for the current ;; process. Read such output first. (Bug#61350) - ;; The process property isn't set anymore due to Bug#62194. (when-let (((process-get proc 'shared-socket)) (v (process-get proc 'vector))) (dolist (p (delq proc (process-list))) -- 2.39.2 [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #3: 0002-Revert-Michael-Albinus-Improve-Tramp-processes-to-ac.patch --] [-- Type: text/x-patch, Size: 9930 bytes --] From 14e37318dd5f170771fb1a74d69e89d5e756d1cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20T=C3=A1vora?= <joaotavora@gmail.com> Date: Thu, 16 Mar 2023 12:26:04 +0000 Subject: [PATCH 2/4] Revert Michael Albinus' "Improve Tramp processes to accept..." It was found to cause the failure of test file-notify-test04-autorevert-remote, among other instabilities. This reverts commit 54ef338ba3670415cf47fabc33a92d4904707c7e. --- lisp/net/tramp-adb.el | 2 +- lisp/net/tramp-gvfs.el | 2 +- lisp/net/tramp-sh.el | 14 +------------- lisp/net/tramp-smb.el | 6 +++--- lisp/net/tramp-sudoedit.el | 2 +- lisp/net/tramp.el | 33 +++++++++------------------------ 6 files changed, 16 insertions(+), 43 deletions(-) diff --git a/lisp/net/tramp-adb.el b/lisp/net/tramp-adb.el index d338201ab72..64f45e7958d 100644 --- a/lisp/net/tramp-adb.el +++ b/lisp/net/tramp-adb.el @@ -990,7 +990,7 @@ tramp-adb-handle-make-process (progn (goto-char (point-min)) (not (search-forward "\n" nil t))) - (tramp-accept-process-output p)) + (tramp-accept-process-output p 0)) (delete-region (point-min) (point))) ;; Provide error buffer. This shows only ;; initial error messages; messages diff --git a/lisp/net/tramp-gvfs.el b/lisp/net/tramp-gvfs.el index c1ad37de1d2..266724c587f 100644 --- a/lisp/net/tramp-gvfs.el +++ b/lisp/net/tramp-gvfs.el @@ -1469,7 +1469,7 @@ tramp-gvfs-handle-file-notify-add-watch (set-process-sentinel p #'tramp-file-notify-process-sentinel) ;; There might be an error if the monitor is not supported. ;; Give the filter a chance to read the output. - (while (tramp-accept-process-output p)) + (while (tramp-accept-process-output p 0)) (unless (process-live-p p) (tramp-error p 'file-notify-error "Monitoring not supported for `%s'" file-name)) diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index 882b79b3ee7..48ebfff6cfe 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -2424,10 +2424,6 @@ tramp-do-copy-or-rename-file-out-of-band copy-program copy-args))) (tramp-message v 6 "%s" (string-join (process-command p) " ")) (process-put p 'vector v) - ;; This is neded for ssh or PuTTY based processes, and - ;; only if the respective options are set. Perhaps, - ;; the setting could be more fine-grained. - (process-put p 'shared-socket t) (process-put p 'adjust-window-size-function #'ignore) (set-process-query-on-exit-flag p nil) @@ -3757,10 +3753,6 @@ tramp-sh-handle-file-notify-add-watch (string-join sequence " ")) (tramp-message v 6 "Run `%s', %S" (string-join sequence " ") p) (process-put p 'vector v) - ;; This is neded for ssh or PuTTY based processes, and only if - ;; the respective options are set. Perhaps, the setting could - ;; be more fine-grained. - (process-put p 'shared-socket t) ;; Needed for process filter. (process-put p 'events events) (process-put p 'watch-name localname) @@ -3769,7 +3761,7 @@ tramp-sh-handle-file-notify-add-watch (set-process-sentinel p #'tramp-file-notify-process-sentinel) ;; There might be an error if the monitor is not supported. ;; Give the filter a chance to read the output. - (while (tramp-accept-process-output p)) + (while (tramp-accept-process-output p 0)) (unless (process-live-p p) (tramp-error p 'file-notify-error "Monitoring not supported for `%s'" file-name)) @@ -5121,10 +5113,6 @@ tramp-maybe-open-connection ;; Set sentinel and query flag. Initialize variables. (set-process-sentinel p #'tramp-process-sentinel) (process-put p 'vector vec) - ;; This is neded for ssh or PuTTY based processes, and - ;; only if the respective options are set. Perhaps, - ;; the setting could be more fine-grained. - (process-put p 'shared-socket t) (process-put p 'adjust-window-size-function #'ignore) (set-process-query-on-exit-flag p nil) (setq tramp-current-connection (cons vec (current-time))) diff --git a/lisp/net/tramp-smb.el b/lisp/net/tramp-smb.el index bb4ab9e3057..1aa4520eeb6 100644 --- a/lisp/net/tramp-smb.el +++ b/lisp/net/tramp-smb.el @@ -757,7 +757,7 @@ tramp-smb-action-get-acl "Read ACL data from connection buffer." (unless (process-live-p proc) ;; Accept pending output. - (while (tramp-accept-process-output proc)) + (while (tramp-accept-process-output proc 0)) (with-current-buffer (tramp-get-connection-buffer vec) ;; There might be a hidden password prompt. (widen) @@ -1363,7 +1363,7 @@ tramp-smb-action-set-acl "Set ACL data." (unless (process-live-p proc) ;; Accept pending output. - (while (tramp-accept-process-output proc)) + (while (tramp-accept-process-output proc 0)) (tramp-message vec 10 "\n%s" (tramp-get-buffer-string (tramp-get-connection-buffer vec))) (throw 'tramp-action 'ok))) @@ -2023,7 +2023,7 @@ tramp-smb-wait-for-output ;; Read pending output. (while (not (re-search-forward tramp-smb-prompt nil t)) - (while (tramp-accept-process-output p)) + (while (tramp-accept-process-output p 0)) (goto-char (point-min))) (tramp-message vec 6 "\n%s" (buffer-string)) diff --git a/lisp/net/tramp-sudoedit.el b/lisp/net/tramp-sudoedit.el index 3cacde2468c..abb9afc570b 100644 --- a/lisp/net/tramp-sudoedit.el +++ b/lisp/net/tramp-sudoedit.el @@ -692,7 +692,7 @@ tramp-sudoedit-action-sudo "Check, whether a sudo process has finished. Remove unneeded output." ;; There might be pending output for the exit status. (unless (process-live-p proc) - (while (tramp-accept-process-output proc)) + (while (tramp-accept-process-output proc 0)) ;; Delete narrowed region, it would be in the way reading a Lisp form. (goto-char (point-min)) (widen) diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index b6e985db6b1..47173b95bea 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -5087,11 +5087,6 @@ tramp-handle-make-process ;; t. See Bug#51177. (when filter (set-process-filter p filter)) - (process-put p 'vector v) - ;; This is neded for ssh or PuTTY based processes, and - ;; only if the respective options are set. Perhaps, the - ;; setting could be more fine-grained. - (process-put p 'shared-socket t) (process-put p 'remote-command orig-command) (tramp-set-connection-property p "remote-command" orig-command) @@ -5494,7 +5489,7 @@ tramp-handle-file-notify-rm-watch ;; There might be pending output. Avoid problems with reentrant ;; call of Tramp. (ignore-errors - (while (tramp-accept-process-output proc))) + (while (tramp-accept-process-output proc 0))) (tramp-message proc 6 "Kill %S" proc) (delete-process proc)) @@ -5646,13 +5641,13 @@ tramp-action-process-alive "Check, whether a process has finished." (unless (process-live-p proc) ;; There might be pending output. - (while (tramp-accept-process-output proc)) + (while (tramp-accept-process-output proc 0)) (throw 'tramp-action 'process-died))) (defun tramp-action-out-of-band (proc vec) "Check, whether an out-of-band copy has finished." ;; There might be pending output for the exit status. - (while (tramp-accept-process-output proc)) + (while (tramp-accept-process-output proc 0)) (cond ((and (not (process-live-p proc)) (zerop (process-exit-status proc))) (tramp-message vec 3 "Process has finished.") @@ -5683,7 +5678,7 @@ tramp-process-one-action (while (not found) ;; Reread output once all actions have been performed. ;; Obviously, the output was not complete. - (while (tramp-accept-process-output proc)) + (while (tramp-accept-process-output proc 0)) (setq todo actions) (while todo (setq item (pop todo) @@ -5800,21 +5795,11 @@ with-tramp-locked-connection ,@body) (tramp-flush-connection-property ,proc "locked")))) -(defun tramp-accept-process-output (proc &optional _timeout) +(defun tramp-accept-process-output (proc &optional timeout) "Like `accept-process-output' for Tramp processes. This is needed in order to hide `last-coding-system-used', which is set for process communication also. If the user quits via `C-g', it is propagated up to `tramp-file-name-handler'." - (declare (advertised-calling-convention (proc) "29.2")) - ;; There could be other processes which use the same socket for - ;; communication. This could block the output for the current - ;; process. Read such output first. (Bug#61350) - (when-let (((process-get proc 'shared-socket)) - (v (process-get proc 'vector))) - (dolist (p (delq proc (process-list))) - (when (tramp-file-name-equal-p v (process-get p 'vector)) - (accept-process-output p 0 nil t)))) - (with-current-buffer (process-buffer proc) (let ((inhibit-read-only t) last-coding-system-used @@ -5824,10 +5809,10 @@ tramp-accept-process-output ;; JUST-THIS-ONE is set due to Bug#12145. `with-local-quit' ;; returns t in order to report success. (if (with-local-quit - (setq result (accept-process-output proc 0 nil t)) t) + (setq result (accept-process-output proc timeout nil t)) t) (tramp-message - proc 10 "%s %s %s\n%s" - proc (process-status proc) result (buffer-string)) + proc 10 "%s %s %s %s\n%s" + proc timeout (process-status proc) result (buffer-string)) ;; Propagate quit. (keyboard-quit))) result))) @@ -6840,7 +6825,7 @@ tramp-interrupt-process (tramp-get-remote-null-device (process-get proc 'vector)))) ;; Wait, until the process has disappeared. If it doesn't, ;; fall back to the default implementation. - (while (tramp-accept-process-output proc)) + (while (tramp-accept-process-output proc 0)) (not (process-live-p proc)))))) (add-hook 'interrupt-process-functions #'tramp-interrupt-process) -- 2.39.2 [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #4: 0003-A-simpler-fix-for-bug-61350-a-small-tweak-Michael-s-.patch --] [-- Type: text/x-patch, Size: 1155 bytes --] From ac334523b4a7ba23a5198ad60a97456055ffbfbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20T=C3=A1vora?= <joaotavora@gmail.com> Date: Wed, 15 Mar 2023 20:02:43 +0000 Subject: [PATCH 3/4] A simpler fix for bug#61350, a small tweak Michael's original idea. * lisp/net/tramp.el (tramp-accept-process-output): Accept process from related processes. --- lisp/net/tramp.el | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 47173b95bea..a7406a9d80e 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -5800,6 +5800,11 @@ tramp-accept-process-output This is needed in order to hide `last-coding-system-used', which is set for process communication also. If the user quits via `C-g', it is propagated up to `tramp-file-name-handler'." + (when-let (((process-get proc 'shared-socket)) + (v (process-get proc 'vector))) + (dolist (p (delq proc (process-list))) + (when (tramp-file-name-equal-p v (process-get p 'vector)) + (while (accept-process-output p 0))))) (with-current-buffer (process-buffer proc) (let ((inhibit-read-only t) last-coding-system-used -- 2.39.2 [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #5: 0004-Just-for-testing-Remove-Tramp-specific-workaround-in.patch --] [-- Type: text/x-patch, Size: 1935 bytes --] From 566a4de4bd5c39f35a5fce245bc722ee23590ded Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20T=C3=A1vora?= <joaotavora@gmail.com> Date: Wed, 15 Mar 2023 19:52:34 +0000 Subject: [PATCH 4/4] Just for testing: Remove Tramp-specific workaround in Eglot * lisp/progmodes/eglot.el (eglot--connect): No longer bind tramp vars. (tramp-ssh-controlmaster-options) (tramp-use-ssh-controlmaster-options): Remove. --- lisp/progmodes/eglot.el | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el index 6c1b9eafe43..f96f7dd254f 100644 --- a/lisp/progmodes/eglot.el +++ b/lisp/progmodes/eglot.el @@ -130,8 +130,6 @@ (defvar markdown-fontify-code-blocks-natively) (defvar company-backends) (defvar company-tooltip-align-annotations) -(defvar tramp-ssh-controlmaster-options) -(defvar tramp-use-ssh-controlmaster-options) \f ;;; User tweakable stuff @@ -1251,15 +1249,7 @@ eglot--connect (contact (cl-subseq contact 0 probe))) `(:process ,(lambda () - (let ((default-directory default-directory) - ;; bug#61350: Tramp turns on a feature - ;; by default that can't (yet) handle - ;; very much data so we turn it off - ;; unconditionally -- just for our - ;; process. - (tramp-use-ssh-controlmaster-options t) - (tramp-ssh-controlmaster-options - "-o ControlMaster=no -o ControlPath=none")) + (let ((default-directory default-directory)) (make-process :name readable-name :command (setq server-info (eglot--cmd contact)) -- 2.39.2 ^ permalink raw reply related [flat|nested] 29+ messages in thread
* bug#62194: 30.0.50; Two Eglot-over-Tramp tests are failing on master, passing on emacs-29 2023-03-16 17:59 ` João Távora @ 2023-03-16 21:18 ` miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors 2023-03-16 21:57 ` João Távora 2023-03-17 10:44 ` Michael Albinus 1 sibling, 1 reply; 29+ messages in thread From: miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-03-16 21:18 UTC (permalink / raw) To: João Távora, Michael Albinus; +Cc: 62194 [-- Attachment #1: Type: text/plain, Size: 3178 bytes --] João Távora <joaotavora@gmail.com> writes: > From ac334523b4a7ba23a5198ad60a97456055ffbfbd Mon Sep 17 00:00:00 2001 > From: =?UTF-8?q?Jo=C3=A3o=20T=C3=A1vora?= <joaotavora@gmail.com> > Date: Wed, 15 Mar 2023 20:02:43 +0000 > Subject: [PATCH 3/4] A simpler fix for bug#61350, a small tweak Michael's > original idea. > > * lisp/net/tramp.el (tramp-accept-process-output): Accept process > from related processes. > --- > lisp/net/tramp.el | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el > index 47173b95bea..a7406a9d80e 100644 > --- a/lisp/net/tramp.el > +++ b/lisp/net/tramp.el > @@ -5800,6 +5800,11 @@ tramp-accept-process-output > This is needed in order to hide `last-coding-system-used', which is set > for process communication also. > If the user quits via `C-g', it is propagated up to `tramp-file-name-handler'." > + (when-let (((process-get proc 'shared-socket)) > + (v (process-get proc 'vector))) > + (dolist (p (delq proc (process-list))) > + (when (tramp-file-name-equal-p v (process-get p 'vector)) > + (while (accept-process-output p 0))))) I think that accept-process-output with JUST-THIS-ONE=nil is dangerous here. We are now allowing 'file-exists-p', 'expand-file-name' and all other functions listed in 'tramp-sh-file-name-handler-alist' to call any timer or process filter, without even documenting this. And even if this behaviour was documented, I don't think it is what Elisp programmers want. It's hard to be 100% sure that calling a simple functions such as 'expand-file-name' will work as expected in presence of arbitrary timers or process filters. Remember that Emacs can have pretty hardcore timers or process filters: In M-x shell, the process filter may call 'read-passwd', entering a recursive edit, in which the user can kill any buffer or even a process. Or with midnight-mode enabled, a timer kills buffers older than 3 days. I consider these "the problem of timing errors that usually plague parallel programming", to quote '(elisp) Output from Processes'. I'm not saying that my proposal with SIGWINCH is flawless and I agree that its unacceptable. I'm just saying that we shouldn't be quite satisfied with this solution yet, though it should be fine for some time. What I was thinking was perhaps to introduce a function called 'accumulate-process-output' which would be similar to 'accept-process-output', except that it would only save process output on the heap without calling any process filters or timers. Subsequent calls to 'accept-process-output', or more accurately, wait_reading_process_output, would then first call the process filters on the previously saved output from the heap. This solution would probably be quite complex to implement, but having thought about this problem for two days, I haven't come to any other idea. If there aren't any objections or better ideas, I could start working on it after I finally receive copyright paperwork. > (with-current-buffer (process-buffer proc) > (let ((inhibit-read-only t) > last-coding-system-used > -- > 2.39.2 > [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 861 bytes --] ^ permalink raw reply [flat|nested] 29+ messages in thread
* bug#62194: 30.0.50; Two Eglot-over-Tramp tests are failing on master, passing on emacs-29 2023-03-16 21:18 ` miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-03-16 21:57 ` João Távora 2023-03-16 23:38 ` João Távora 2023-03-17 16:45 ` miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors 0 siblings, 2 replies; 29+ messages in thread From: João Távora @ 2023-03-16 21:57 UTC (permalink / raw) To: miha; +Cc: Michael Albinus, 62194 On Thu, Mar 16, 2023 at 9:14 PM <miha@kamnitnik.top> wrote: > > João Távora <joaotavora@gmail.com> writes: > > + (dolist (p (delq proc (process-list))) > > + (when (tramp-file-name-equal-p v (process-get p 'vector)) > > + (while (accept-process-output p 0))))) > > I think that accept-process-output with JUST-THIS-ONE=nil is dangerous > here. We are now allowing 'file-exists-p', 'expand-file-name' and all > other functions listed in 'tramp-sh-file-name-handler-alist' to call any > timer or process filter, That's exactly what we want. We _don't_ want to stop other output to be inhibited from going into the filter. We want to let other processes slurp their input as often as possible. The reason it hung with JUST-THIS-ONE=t is precisely the inverse reason that it hangs without this hunk (say, in emacs-29). One process (say tprocess) is holding its input and jprocess can't read it because it comes from a shared underlying SSH buffer and that buffer is likely full (until tprocess empties it a little bit). At the moment, it is the best we have, both theoretically and experimentally. > without even documenting this. This is the most normal usage of accept-process-output. Look at all the Emacs code base. Basically, only Tramp uses JUST-THIS-ONE. It's JUST-THIS-ONE who is the aberration. None of the process-heavy SLIME, SLY, CIDER IDEs use it. You can read the manual about JUST-THIS-ONE. It's in A-O-P. > filter may call 'read-passwd', entering a recursive edit, in which the > user can kill any buffer or even a process. Or with midnight-mode > enabled, a timer kills buffers older than 3 days. I consider these "the > problem of timing errors that usually plague parallel programming", to > quote '(elisp) Output from Processes'. Sorry, I don't immediately see the problem. I can't prove that there isn't one :-) that's near impossible. Normally what is done is for the problem to be demonstrated with some experiment. > I'm not saying that my proposal with SIGWINCH is flawless and I agree > that its unacceptable. I'm just saying that we shouldn't be quite > satisfied with this solution yet, though it should be fine for some > time. I'm not satisfied with it myself. This is very slow (not that it matters much). But is also all around ugly. The more correct solution is IMHO, described in bug#61350. But it will take time to see if it fits into Tramp (I think it does) but most importantly how (that's the hard bit, Tramp is a lot of code) > What I was thinking was perhaps to introduce a function called > 'accumulate-process-output' which would be similar to > 'accept-process-output', except that it would only save process output You can propose this in emacs-devel, but if you permit me to be slightly immodest, I've been coding with accept-process-output + filters for almost 15 years and I've never had the need for this. I normally want timers and other processes to run, I don't want to stop the world. João ^ permalink raw reply [flat|nested] 29+ messages in thread
* bug#62194: 30.0.50; Two Eglot-over-Tramp tests are failing on master, passing on emacs-29 2023-03-16 21:57 ` João Távora @ 2023-03-16 23:38 ` João Távora 2023-03-17 16:45 ` miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors 1 sibling, 0 replies; 29+ messages in thread From: João Távora @ 2023-03-16 23:38 UTC (permalink / raw) To: miha; +Cc: Michael Albinus, 62194 On Thu, Mar 16, 2023 at 9:57 PM João Távora <joaotavora@gmail.com> wrote: > > On Thu, Mar 16, 2023 at 9:14 PM <miha@kamnitnik.top> wrote: > > > > João Távora <joaotavora@gmail.com> writes: > > > > + (dolist (p (delq proc (process-list))) > > > + (when (tramp-file-name-equal-p v (process-get p 'vector)) > > > + (while (accept-process-output p 0))))) > > > > I think that accept-process-output with JUST-THIS-ONE=nil is dangerous > > here. We are now allowing 'file-exists-p', 'expand-file-name' and all > > other functions listed in 'tramp-sh-file-name-handler-alist' to call any > > timer or process filter, > > That's exactly what we want. We _don't_ want to stop other > output to be inhibited from going into the filter. Doh, this is a silly double negative. I meant "we don't want to inhibit other output from going into the filters". ^ permalink raw reply [flat|nested] 29+ messages in thread
* bug#62194: 30.0.50; Two Eglot-over-Tramp tests are failing on master, passing on emacs-29 2023-03-16 21:57 ` João Távora 2023-03-16 23:38 ` João Távora @ 2023-03-17 16:45 ` miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors 2023-03-17 16:47 ` Eli Zaretskii 1 sibling, 1 reply; 29+ messages in thread From: miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-03-17 16:45 UTC (permalink / raw) To: João Távora; +Cc: Michael Albinus, 62194 [-- Attachment #1: Type: text/plain, Size: 4580 bytes --] João Távora <joaotavora@gmail.com> writes: >> I think that accept-process-output with JUST-THIS-ONE=nil is dangerous >> here. We are now allowing 'file-exists-p', 'expand-file-name' and all >> other functions listed in 'tramp-sh-file-name-handler-alist' to call any >> timer or process filter, > > That's exactly what we want. We _don't_ want to stop other > output to be inhibited from going into the filter. We want > to let other processes slurp their input as often as possible. Generally, I agree. JUST-THIS-ONE=nil is better and it's fine to use it in most functions as long as the programmer is careful that foreign timers and proc filters won't interfere. Though I do think that if a function that calls a-p-o with JUST-THIS-ONE=nil isn't internal, it should mention that it can run timers in its doc string. But here we are talking about 'expand-file-name' and other functions from tramp-sh-file-name-handler. For these, I disagree that we want them to accept output from other processes and call their filters. 'expand-file-name' and others are used often and, for most of the existence of Emacs, they did not call proc filters. I think it's dangerous to have them do it now. > The reason it hung with JUST-THIS-ONE=t is precisely the inverse > reason that it hangs without this hunk (say, in emacs-29). One > process (say tprocess) is holding its input and jprocess can't read > it because it comes from a shared underlying SSH buffer and that > buffer is likely full (until tprocess empties it a little bit). > > At the moment, it is the best we have, both theoretically and > experimentally. > >> without even documenting this. > > This is the most normal usage of accept-process-output. > Look at all the Emacs code base. Basically, only Tramp uses > JUST-THIS-ONE. It's JUST-THIS-ONE who is the aberration. > None of the process-heavy SLIME, SLY, CIDER IDEs use it. > > You can read the manual about JUST-THIS-ONE. It's in A-O-P. Sorry I wasn't clear enough. I meant documenting in expand-file-name's doc string that calling expand-file-name can now run arbitrary process filters and timers. The same goes for other functions from 'tramp-sh-file-name-handler-alist'. >> filter may call 'read-passwd', entering a recursive edit, in which the >> user can kill any buffer or even a process. Or with midnight-mode >> enabled, a timer kills buffers older than 3 days. I consider these "the >> problem of timing errors that usually plague parallel programming", to >> quote '(elisp) Output from Processes'. > > Sorry, I don't immediately see the problem. I can't prove that there > isn't one :-) that's near impossible. Normally what is done > is for the problem to be demonstrated with some experiment. > >> I'm not saying that my proposal with SIGWINCH is flawless and I agree >> that its unacceptable. I'm just saying that we shouldn't be quite >> satisfied with this solution yet, though it should be fine for some >> time. > > I'm not satisfied with it myself. This is very slow (not that it matters > much). But is also all around ugly. The more correct solution is IMHO, > described in bug#61350. But it will take time to see if it fits into > Tramp (I think it does) but most importantly how (that's the hard bit, > Tramp is a lot of code) I'm not against your way of refactoring tramp process filters but I don't think it will solve our problems in any fundamental way for the following simple reason: 'expand-file-name' is synchronous, therefore tramp has to make it use accept-process-filter (tell me if there's another way). It can use it in roughly two ways: with JUST-THIS-ONE=t or JUST-THIS-ONE=nil. In the first case, we hit the eglot-over-ssh freeze problem and in the second case, we'll have 'expand-file-name' call timers and process filters, which I explained above why I don't like. >> What I was thinking was perhaps to introduce a function called >> 'accumulate-process-output' which would be similar to >> 'accept-process-output', except that it would only save process output > > You can propose this in emacs-devel, but if you permit me to > be slightly immodest, I've been coding with > accept-process-output + filters for almost 15 years and I've never > had the need for this. I normally want timers and other processes > to run, I don't want to stop the world. This is great for other packages, but tramp.el carries the special burden of having to re-implement 'expand-file-name' and other functions of synchronous nature. [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 861 bytes --] ^ permalink raw reply [flat|nested] 29+ messages in thread
* bug#62194: 30.0.50; Two Eglot-over-Tramp tests are failing on master, passing on emacs-29 2023-03-17 16:45 ` miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-03-17 16:47 ` Eli Zaretskii 2023-03-17 17:22 ` miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors 0 siblings, 1 reply; 29+ messages in thread From: Eli Zaretskii @ 2023-03-17 16:47 UTC (permalink / raw) To: miha; +Cc: michael.albinus, joaotavora, 62194 > Cc: Michael Albinus <michael.albinus@gmx.de>, 62194@debbugs.gnu.org > Date: Fri, 17 Mar 2023 17:45:43 +0100 > From: miha--- via "Bug reports for GNU Emacs, > the Swiss army knife of text editors" <bug-gnu-emacs@gnu.org> > > Though I do think that if a function that calls a-p-o with > JUST-THIS-ONE=nil isn't internal, it should mention that it can run > timers in its doc string. I don't see why: timers can run in Emacs almost anywhere, so mentioning that in doc strings of every function makes little sense. > But here we are talking about 'expand-file-name' and other functions > from tramp-sh-file-name-handler. For these, I disagree that we want them > to accept output from other processes and call their filters. > 'expand-file-name' and others are used often and, for most of the > existence of Emacs, they did not call proc filters. I think it's > dangerous to have them do it now. Process filters can be also called at any time, because they basically depend on when the output from a subprocess arrives. Why would you want that to stop while Emacs processes expand-file-name? > 'expand-file-name' is synchronous, therefore tramp has to make it use > accept-process-filter (tell me if there's another way). It can use it in > roughly two ways: with JUST-THIS-ONE=t or JUST-THIS-ONE=nil. In the > first case, we hit the eglot-over-ssh freeze problem and in the second > case, we'll have 'expand-file-name' call timers and process filters, > which I explained above why I don't like. I think you should teach yourself to like that. ^ permalink raw reply [flat|nested] 29+ messages in thread
* bug#62194: 30.0.50; Two Eglot-over-Tramp tests are failing on master, passing on emacs-29 2023-03-17 16:47 ` Eli Zaretskii @ 2023-03-17 17:22 ` miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors 2023-03-17 17:22 ` Eli Zaretskii 0 siblings, 1 reply; 29+ messages in thread From: miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-03-17 17:22 UTC (permalink / raw) To: Eli Zaretskii; +Cc: michael.albinus, joaotavora, 62194 [-- Attachment #1: Type: text/plain, Size: 2109 bytes --] Eli Zaretskii <eliz@gnu.org> writes: >> Cc: Michael Albinus <michael.albinus@gmx.de>, 62194@debbugs.gnu.org >> Date: Fri, 17 Mar 2023 17:45:43 +0100 >> From: miha--- via "Bug reports for GNU Emacs, >> the Swiss army knife of text editors" <bug-gnu-emacs@gnu.org> >> >> Though I do think that if a function that calls a-p-o with >> JUST-THIS-ONE=nil isn't internal, it should mention that it can run >> timers in its doc string. > > I don't see why: timers can run in Emacs almost anywhere, so > mentioning that in doc strings of every function makes little sense. I'm not completely sure how timers work, but >> But here we are talking about 'expand-file-name' and other functions >> from tramp-sh-file-name-handler. For these, I disagree that we want them >> to accept output from other processes and call their filters. >> 'expand-file-name' and others are used often and, for most of the >> existence of Emacs, they did not call proc filters. I think it's >> dangerous to have them do it now. > > Process filters can be also called at any time, because they basically > depend on when the output from a subprocess arrives. Why would you > want that to stop while Emacs processes expand-file-name? From '(elisp) Output from Processes': Output from a subprocess can arrive only while Emacs is waiting: when reading terminal input, in ‘sit-for’ and ‘sleep-for’, in ‘accept-process-output’, and in functions which send data to processes. From my understanding of process.c, wait_reading_process_output normally needs to be in the call stack in order for process filters to run. >> 'expand-file-name' is synchronous, therefore tramp has to make it use >> accept-process-filter (tell me if there's another way). It can use it in >> roughly two ways: with JUST-THIS-ONE=t or JUST-THIS-ONE=nil. In the >> first case, we hit the eglot-over-ssh freeze problem and in the second >> case, we'll have 'expand-file-name' call timers and process filters, >> which I explained above why I don't like. > > I think you should teach yourself to like that. [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 861 bytes --] ^ permalink raw reply [flat|nested] 29+ messages in thread
* bug#62194: 30.0.50; Two Eglot-over-Tramp tests are failing on master, passing on emacs-29 2023-03-17 17:22 ` miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-03-17 17:22 ` Eli Zaretskii 0 siblings, 0 replies; 29+ messages in thread From: Eli Zaretskii @ 2023-03-17 17:22 UTC (permalink / raw) To: miha; +Cc: michael.albinus, joaotavora, 62194 > From: <miha@kamnitnik.top> > Cc: michael.albinus@gmx.de, joaotavora@gmail.com, 62194@debbugs.gnu.org > Date: Fri, 17 Mar 2023 18:22:14 +0100 > > From '(elisp) Output from Processes': > > Output from a subprocess can arrive only while Emacs is waiting: when > reading terminal input, in ‘sit-for’ and ‘sleep-for’, in > ‘accept-process-output’, and in functions which send data to processes. > > From my understanding of process.c, wait_reading_process_output normally > needs to be in the call stack in order for process filters to run. And it is, when Tramp calls expand-file-name and waits for the response from the remote. Moreover, there are situations in Emacs when we eventually call wait_reading_process_output as result of Lisp code that doesn't necessarily imagine something like that could happen, nor can control that. IOW, it is not easy to know from the Lisp level whether Emacs is going to "wait for something" as part of running some Lisp program. ^ permalink raw reply [flat|nested] 29+ messages in thread
* bug#62194: 30.0.50; Two Eglot-over-Tramp tests are failing on master, passing on emacs-29 2023-03-16 17:59 ` João Távora 2023-03-16 21:18 ` miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-03-17 10:44 ` Michael Albinus 2023-03-17 11:19 ` João Távora 1 sibling, 1 reply; 29+ messages in thread From: Michael Albinus @ 2023-03-17 10:44 UTC (permalink / raw) To: João Távora; +Cc: 62194, miha João Távora <joaotavora@gmail.com> writes: Hi João, >> The example given by Thomas blocks, again. So we are back to the >> beginning, aren't we? > > Doh! I gave you a wrong patch-0003. It needs a tweak. > > You can either apply this one-line diff or re-aplply attached patchset > of 4 over origin/master again. > > Then please try again, and sorry for the extra confusion. > > diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el > index 885b29f9471..a7406a9d80e 100644 > --- a/lisp/net/tramp.el > +++ b/lisp/net/tramp.el > @@ -5804,7 +5804,7 @@ tramp-accept-process-output > (v (process-get proc 'vector))) > (dolist (p (delq proc (process-list))) > (when (tramp-file-name-equal-p v (process-get p 'vector)) > - (while (accept-process-output p 0 nil t))))) > + (while (accept-process-output p 0))))) > (with-current-buffer (process-buffer proc) > (let ((inhibit-read-only t) > last-coding-system-used > > > I've tested Thomas's example 5 times in a row, moving around energically, in > the Emacs -Q, exercising multiple Eglot features, etc. 0% failures. I've applied the patch, but Thomas' recipe still blocks for me. Sorry to tell you. For comparison, here's the version of tramp-accept-process-output used for this test: --8<---------------cut here---------------start------------->8--- (defun tramp-accept-process-output (proc &optional timeout) "Like `accept-process-output' for Tramp processes. This is needed in order to hide `last-coding-system-used', which is set for process communication also. If the user quits via `C-g', it is propagated up to `tramp-file-name-handler'." (when-let (((process-get proc 'shared-socket)) (v (process-get proc 'vector))) (dolist (p (delq proc (process-list))) (when (tramp-file-name-equal-p v (process-get p 'vector)) (while (accept-process-output p 0))))) (with-current-buffer (process-buffer proc) (let ((inhibit-read-only t) last-coding-system-used result) ;; This must be protected by the "locked" property. (with-tramp-locked-connection proc ;; JUST-THIS-ONE is set due to Bug#12145. `with-local-quit' ;; returns t in order to report success. (if (with-local-quit (setq result (accept-process-output proc timeout nil t)) t) (tramp-message proc 10 "%s %s %s %s\n%s" proc timeout (process-status proc) result (buffer-string)) ;; Propagate quit. (keyboard-quit))) result))) --8<---------------cut here---------------end--------------->8--- Best regards, Michael. ^ permalink raw reply [flat|nested] 29+ messages in thread
* bug#62194: 30.0.50; Two Eglot-over-Tramp tests are failing on master, passing on emacs-29 2023-03-17 10:44 ` Michael Albinus @ 2023-03-17 11:19 ` João Távora 2023-03-18 9:38 ` Michael Albinus 0 siblings, 1 reply; 29+ messages in thread From: João Távora @ 2023-03-17 11:19 UTC (permalink / raw) To: Michael Albinus; +Cc: 62194, miha Michael Albinus <michael.albinus@gmx.de> writes: >> I've tested Thomas's example 5 times in a row, moving around energically, in >> the Emacs -Q, exercising multiple Eglot features, etc. 0% failures. > > I've applied the patch, but Thomas' recipe still blocks for me. Sorry to > tell you. Drats. Reproduced. I honestly don't know what's going on. Yesterday I got 0% failures, today I get 100% failures with the very same code. Maybe there is some SSH/ControlMaster thing at the OS level that's tainting the experiment. FWIW, removing the JUST-THIS-ONE make Thomas' example always pass, but it has other implications like the re-entrancy thing, which I don't understand. I don't have any better ideas at the moment, other than just biting the bullet and reading Tramp's code very closely. I'll try my hand at adapting a process-filter into it as I described in bug#61350, but I don't know if I'll manage of course, since I'm not closely acquainted with the API. Very sorry for the noise, João ^ permalink raw reply [flat|nested] 29+ messages in thread
* bug#62194: 30.0.50; Two Eglot-over-Tramp tests are failing on master, passing on emacs-29 2023-03-17 11:19 ` João Távora @ 2023-03-18 9:38 ` Michael Albinus 2023-03-18 11:29 ` João Távora 2023-03-19 12:19 ` Michael Albinus 0 siblings, 2 replies; 29+ messages in thread From: Michael Albinus @ 2023-03-18 9:38 UTC (permalink / raw) To: João Távora; +Cc: 62194, miha João Távora <joaotavora@gmail.com> writes: Hi João, >> I've applied the patch, but Thomas' recipe still blocks for me. Sorry to >> tell you. > > Drats. Reproduced. > > I honestly don't know what's going on. Yesterday I got 0% failures, > today I get 100% failures with the very same code. Maybe there is some > SSH/ControlMaster thing at the OS level that's tainting the experiment. So I propose we let the state as-it-is in master. The relevant tests pass successfully, and we have your workaround in eglot.el, which makes the situation a little bit better. Just one remark: perhaps you could change this to --8<---------------cut here---------------start------------->8--- (let ((default-directory default-directory) ;; bug#61350: Tramp turns on a feature ;; by default that can't (yet) handle ;; very much data so we turn it off ;; unconditionally -- just for our ;; process. (tramp-use-ssh-controlmaster-options 'suppress) (tramp-ssh-controlmaster-options "-o ControlMaster=no -o ControlPath=none")) --8<---------------cut here---------------end--------------->8--- For the Tramp < 2.6.0.3 it still works, because tramp-use-ssh-controlmaster-options is non-nil, and tramp-ssh-controlmaster-options is used. Starting with Tramp 2.6.0.3, the value `suppress' forces Tramp to compute its own tramp-ssh-controlmaster-options, which might be the same, or not. But it is Tramp's responsibility to DTRT. Note that I have plans to enable shared connections also for PuTTY, by a similar option tramp-use-shared-connection (or similar, not decided yet). But this will be relevant for MS Windows users only; I don't know how many of them use eglot. And it will definitively be in Tramp 2.7 only. As proposed. we shall close *this* bug. The reported problem is fixed, and for everything else we have bug#61350. > FWIW, removing the JUST-THIS-ONE make Thomas' example always pass, but > it has other implications like the re-entrancy thing, which I don't > understand. > > I don't have any better ideas at the moment, other than just biting the > bullet and reading Tramp's code very closely. I'll try my hand at > adapting a process-filter into it as I described in bug#61350, but I > don't know if I'll manage of course, since I'm not closely acquainted > with the API. I will continue to bring threads into play with Tramp, again. Slow progress only. But perhaps, it helps to improve the situation. > Very sorry for the noise, > João Best regards, Michael. ^ permalink raw reply [flat|nested] 29+ messages in thread
* bug#62194: 30.0.50; Two Eglot-over-Tramp tests are failing on master, passing on emacs-29 2023-03-18 9:38 ` Michael Albinus @ 2023-03-18 11:29 ` João Távora 2023-03-18 12:23 ` Michael Albinus 2023-03-19 12:19 ` Michael Albinus 1 sibling, 1 reply; 29+ messages in thread From: João Távora @ 2023-03-18 11:29 UTC (permalink / raw) To: Michael Albinus; +Cc: 62194, miha On Sat, Mar 18, 2023 at 9:38 AM Michael Albinus <michael.albinus@gmx.de> wrote: > > João Távora <joaotavora@gmail.com> writes: > > Hi João, > > >> I've applied the patch, but Thomas' recipe still blocks for me. Sorry to > >> tell you. > > > > Drats. Reproduced. > > > > I honestly don't know what's going on. Yesterday I got 0% failures, > > today I get 100% failures with the very same code. Maybe there is some > > SSH/ControlMaster thing at the OS level that's tainting the experiment. > > So I propose we let the state as-it-is in master. The relevant tests > pass successfully, and we have your workaround in eglot.el, which makes > the situation a little bit better. I propose we still revert the two of your latest patches. The situation stays exactly the same in practice for now (bug#31350 broken, this bug fixed, workaround in place, no-one knows what is really happening), but with the added advantage that the code is still the same as in emacs-29. > Just one remark: perhaps you could > change this to > > --8<---------------cut here---------------start------------->8--- > (let ((default-directory default-directory) > ;; bug#61350: Tramp turns on a feature > ;; by default that can't (yet) handle > ;; very much data so we turn it off > ;; unconditionally -- just for our > ;; process. > (tramp-use-ssh-controlmaster-options 'suppress) > (tramp-ssh-controlmaster-options > "-o ControlMaster=no -o ControlPath=none")) > --8<---------------cut here---------------end--------------->8--- > For the Tramp < 2.6.0.3 it still works, because > tramp-use-ssh-controlmaster-options is non-nil, and > tramp-ssh-controlmaster-options is used. Starting with Tramp 2.6.0.3, > the value `suppress' forces Tramp to compute its own > tramp-ssh-controlmaster-options, which might be the same, or not. But it > is Tramp's responsibility to DTRT. Makes sense. If it's just this change, you can push this yourself. Thanks in advance. > Note that I have plans to enable shared connections also for PuTTY, by a > similar option tramp-use-shared-connection (or similar, not decided > yet). But this will be relevant for MS Windows users only; I don't know > how many of them use eglot. And it will definitively be in Tramp 2.7 > only. > > As proposed. we shall close *this* bug. The reported problem is fixed, > and for everything else we have bug#61350. OK. Just a heads up, I asked for bug#61350 and this one to be "merged" earlier. Don't know what debbugs did about that, but didn't see any practical effect > > FWIW, removing the JUST-THIS-ONE make Thomas' example always pass, but > > it has other implications like the re-entrancy thing, which I don't > > understand. > > > > I don't have any better ideas at the moment, other than just biting the > > bullet and reading Tramp's code very closely. I'll try my hand at > > adapting a process-filter into it as I described in bug#61350, but I > > don't know if I'll manage of course, since I'm not closely acquainted > > with the API. > > I will continue to bring threads into play with Tramp, again. Slow > progress only. But perhaps, it helps to improve the situation. I think you should consider bring stuff _out_ of Tramp instead of _in_. Consider removing tramp-a-o-p entirely, and segregating/segmenting messages in a process filter. This segregation is entirely textual (no fs primitives) and does run the risk of reentrancy. Then -- for sync APIs -- 'throw' the complete message into whoever is blockingly waiting for the answer with (catch ... (while (accept-process-output p))). I've given a working example in bug#61350. If you need timeouts I can show you how to add them. João ^ permalink raw reply [flat|nested] 29+ messages in thread
* bug#62194: 30.0.50; Two Eglot-over-Tramp tests are failing on master, passing on emacs-29 2023-03-18 11:29 ` João Távora @ 2023-03-18 12:23 ` Michael Albinus 2023-03-18 12:33 ` João Távora 0 siblings, 1 reply; 29+ messages in thread From: Michael Albinus @ 2023-03-18 12:23 UTC (permalink / raw) To: João Távora; +Cc: 62194, miha João Távora <joaotavora@gmail.com> writes: Hi João, >> So I propose we let the state as-it-is in master. The relevant tests >> pass successfully, and we have your workaround in eglot.el, which makes >> the situation a little bit better. > > I propose we still revert the two of your latest patches. The situation > stays exactly the same in practice for now (bug#31350 broken, this bug > fixed, workaround in place, no-one knows what is really happening), but > with the added advantage that the code is still the same as in emacs-29. Nope, I'd like to keep the changes. It is the basis for further work on the problem. And these changes will also be in Tramp 2.6.0.3. >> Just one remark: perhaps you could >> change this to >> >> --8<---------------cut here---------------start------------->8--- >> (let ((default-directory default-directory) >> ;; bug#61350: Tramp turns on a feature >> ;; by default that can't (yet) handle >> ;; very much data so we turn it off >> ;; unconditionally -- just for our >> ;; process. >> (tramp-use-ssh-controlmaster-options 'suppress) >> (tramp-ssh-controlmaster-options >> "-o ControlMaster=no -o ControlPath=none")) >> --8<---------------cut here---------------end--------------->8--- > > >> For the Tramp < 2.6.0.3 it still works, because >> tramp-use-ssh-controlmaster-options is non-nil, and >> tramp-ssh-controlmaster-options is used. Starting with Tramp 2.6.0.3, >> the value `suppress' forces Tramp to compute its own >> tramp-ssh-controlmaster-options, which might be the same, or not. But it >> is Tramp's responsibility to DTRT. > > Makes sense. If it's just this change, you can push this yourself. > Thanks in advance. Pushed to the emacs-29 branch. >> Note that I have plans to enable shared connections also for PuTTY, by a >> similar option tramp-use-shared-connection (or similar, not decided >> yet). But this will be relevant for MS Windows users only; I don't know >> how many of them use eglot. And it will definitively be in Tramp 2.7 >> only. >> >> As proposed. we shall close *this* bug. The reported problem is fixed, >> and for everything else we have bug#61350. > > OK. > > Just a heads up, I asked for bug#61350 and this one to be "merged" > earlier. Don't know what debbugs did about that, but didn't see any > practical effect This are two different bugs. Bug#61350 is about using a shared connection, and this is still open, although mitigated by Eglot's workaround. Bug#62194 is about a patch which tried to fix bug#61350. This patch has been reverted, and so there's nothing left to do for bug#62194. It can be closed. >> > FWIW, removing the JUST-THIS-ONE make Thomas' example always pass, but >> > it has other implications like the re-entrancy thing, which I don't >> > understand. >> > >> > I don't have any better ideas at the moment, other than just biting the >> > bullet and reading Tramp's code very closely. I'll try my hand at >> > adapting a process-filter into it as I described in bug#61350, but I >> > don't know if I'll manage of course, since I'm not closely acquainted >> > with the API. >> >> I will continue to bring threads into play with Tramp, again. Slow >> progress only. But perhaps, it helps to improve the situation. > > I think you should consider bring stuff _out_ of Tramp instead of _in_. > > Consider removing tramp-a-o-p entirely, and segregating/segmenting > messages in a process filter. This segregation is entirely textual > (no fs primitives) and does run the risk of reentrancy. Then -- for > sync APIs -- 'throw' the complete message into whoever is blockingly > waiting for the answer with (catch ... (while (accept-process-output p))). > > I've given a working example in bug#61350. If you need timeouts > I can show you how to add them. The problem is even more complex than discussed so far. All of asynchronity can happen to Tramp's reading of process output. Process filters and process sentinels from other processes, timers, callbacks from file notifications or D-Bus events, whatever. I'm not convinced (yet?), that moving Tramp's process output reading to a process filter will solve it. There is also the additional problem in Emacs, that process filters do not cascade. Any package can activate an own process filter, even for Tramp processes, and Tramp would be lost then immediately. > João Best regards, Michael. ^ permalink raw reply [flat|nested] 29+ messages in thread
* bug#62194: 30.0.50; Two Eglot-over-Tramp tests are failing on master, passing on emacs-29 2023-03-18 12:23 ` Michael Albinus @ 2023-03-18 12:33 ` João Távora 0 siblings, 0 replies; 29+ messages in thread From: João Távora @ 2023-03-18 12:33 UTC (permalink / raw) To: Michael Albinus; +Cc: 62194, miha On Sat, Mar 18, 2023 at 12:23 PM Michael Albinus <michael.albinus@gmx.de> wrote: > There is also the additional problem in Emacs, that process filters do > not cascade. Any package can activate an own process filter, even for > Tramp processes, and Tramp would be lost then immediately. If this were true, then a large number of Emacs extensions that rely on the scheme I described would be failing horribly. Read the example code I posted in bug#61350, you'll notice that a process filter does nothing more than put text into a buffer and potentially act on that text _only_ if it has been told to. So it's very healthy to design your system to let timers and filters -- yours and others -- run freely. João ^ permalink raw reply [flat|nested] 29+ messages in thread
* bug#62194: 30.0.50; Two Eglot-over-Tramp tests are failing on master, passing on emacs-29 2023-03-18 9:38 ` Michael Albinus 2023-03-18 11:29 ` João Távora @ 2023-03-19 12:19 ` Michael Albinus 1 sibling, 0 replies; 29+ messages in thread From: Michael Albinus @ 2023-03-19 12:19 UTC (permalink / raw) To: João Távora; +Cc: 62194, miha Michael Albinus <michael.albinus@gmx.de> writes: Hi João, > Note that I have plans to enable shared connections also for PuTTY, by a > similar option tramp-use-shared-connection (or similar, not decided > yet). But this will be relevant for MS Windows users only; I don't know > how many of them use eglot. And it will definitively be in Tramp 2.7 > only. For the records, I have finally renamed tramp-use-ssh-controlmaster-options to tramp-use-connection-share in Tramp 2.7 / Emacs master. This handles also PuTTY methods. You don't need to adapt your Tramp workaround in eglot.el, the former option still exists as defvaralias of the latter. Best regards, Michael. ^ permalink raw reply [flat|nested] 29+ messages in thread
* bug#62194: 30.0.50; Two Eglot-over-Tramp tests are failing on master, passing on emacs-29 2023-03-15 9:40 ` Michael Albinus 2023-03-15 11:45 ` Michael Albinus @ 2023-03-15 20:16 ` João Távora 2023-03-16 15:02 ` Michael Albinus 1 sibling, 1 reply; 29+ messages in thread From: João Távora @ 2023-03-15 20:16 UTC (permalink / raw) To: Michael Albinus; +Cc: 62194 Michael Albinus <michael.albinus@gmx.de> writes: > Well, if I call it w/o a SELECTOR, I get 14 failing tests. clangd is > installed: > > # which clangd > /var/lib/snapd/snap/bin/clangd > > This might not be the canonical path, but at least the local tests shall > find it. I'm running Fedora 37. Could you, pls, check? The log file is appended. I cant' reproduce, but I haven't got Fedora. The logs only tell that -- apparently -- the LSP server never replied to Eglot. João ^ permalink raw reply [flat|nested] 29+ messages in thread
* bug#62194: 30.0.50; Two Eglot-over-Tramp tests are failing on master, passing on emacs-29 2023-03-15 20:16 ` João Távora @ 2023-03-16 15:02 ` Michael Albinus 2023-03-28 10:51 ` Michael Albinus 0 siblings, 1 reply; 29+ messages in thread From: Michael Albinus @ 2023-03-16 15:02 UTC (permalink / raw) To: João Távora; +Cc: 62194 João Távora <joaotavora@gmail.com> writes: Hi João, >> Well, if I call it w/o a SELECTOR, I get 14 failing tests. clangd is >> installed: >> >> # which clangd >> /var/lib/snapd/snap/bin/clangd >> >> This might not be the canonical path, but at least the local tests shall >> find it. I'm running Fedora 37. Could you, pls, check? The log file is appended. > > I cant' reproduce, but I haven't got Fedora. The logs only tell that > -- apparently -- the LSP server never replied to Eglot. Yes. I don't remember when and from where I installed the snap package. But this clangd looks strange; it even doesn't respond to "clangd --version". Further search has told me, that Fedora keeps clangd in the package clang-tools-extra. After installing this package, all Eglot tests pass as expected. > João Best regards, Michael. ^ permalink raw reply [flat|nested] 29+ messages in thread
* bug#62194: 30.0.50; Two Eglot-over-Tramp tests are failing on master, passing on emacs-29 2023-03-16 15:02 ` Michael Albinus @ 2023-03-28 10:51 ` Michael Albinus 0 siblings, 0 replies; 29+ messages in thread From: Michael Albinus @ 2023-03-28 10:51 UTC (permalink / raw) To: João Távora; +Cc: 62194-done Michael Albinus <michael.albinus@gmx.de> writes: Hi João, > Further search has told me, that Fedora keeps clangd in the package > clang-tools-extra. After installing this package, all Eglot tests pass > as expected. Closing, since there's nothing left to do. >> João Best regards, Michael. ^ permalink raw reply [flat|nested] 29+ messages in thread
end of thread, other threads:[~2023-03-28 10:51 UTC | newest] Thread overview: 29+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-03-14 23:08 bug#62194: 30.0.50; Two Eglot-over-Tramp tests are failing on master, passing on emacs-29 João Távora 2023-03-15 9:40 ` Michael Albinus 2023-03-15 11:45 ` Michael Albinus 2023-03-15 20:24 ` João Távora 2023-03-15 20:36 ` miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors 2023-03-15 20:45 ` João Távora 2023-03-16 12:02 ` Michael Albinus 2023-03-16 12:20 ` João Távora 2023-03-16 14:57 ` Michael Albinus 2023-03-16 15:12 ` João Távora 2023-03-16 17:35 ` Michael Albinus 2023-03-16 17:59 ` João Távora 2023-03-16 21:18 ` miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors 2023-03-16 21:57 ` João Távora 2023-03-16 23:38 ` João Távora 2023-03-17 16:45 ` miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors 2023-03-17 16:47 ` Eli Zaretskii 2023-03-17 17:22 ` miha--- via Bug reports for GNU Emacs, the Swiss army knife of text editors 2023-03-17 17:22 ` Eli Zaretskii 2023-03-17 10:44 ` Michael Albinus 2023-03-17 11:19 ` João Távora 2023-03-18 9:38 ` Michael Albinus 2023-03-18 11:29 ` João Távora 2023-03-18 12:23 ` Michael Albinus 2023-03-18 12:33 ` João Távora 2023-03-19 12:19 ` Michael Albinus 2023-03-15 20:16 ` João Távora 2023-03-16 15:02 ` Michael Albinus 2023-03-28 10:51 ` Michael Albinus
Code repositories for project(s) associated with this external index https://git.savannah.gnu.org/cgit/emacs.git https://git.savannah.gnu.org/cgit/emacs/org-mode.git This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.