Zulip Chat Archive
Stream: lean4
Topic: addDeclarationRanges eval taking forever
Aurélien Saue (Apr 20 2021 at 09:57):
The final #eval in this snippet is being processed forever
import Lean
open Lean
def name : Name := `name
def drs : DeclarationRanges :=
  { range :=
      { pos := { line := 0, column := 0 },
        charUtf16 := 0,
        endPos := { line := 0, column := 0 },
        endCharUtf16 := 0 },
    selectionRange :=
      { pos := { line := 0, column := 0 },
        charUtf16 := 0,
        endPos := { line := 0, column := 0 },
        endCharUtf16 := 0}
  }
#eval (addDeclarationRanges name drs : MetaM Unit)
Aurélien Saue (Apr 20 2021 at 10:06):
Actually it does work when executing in command line but not in VSCode
Gabriel Ebner (Apr 20 2021 at 10:07):
I wonder if this is related to https://leanprover.zulipchat.com/#narrow/stream/270676-lean4/topic/can't.20print.20unit/near/234134267
Sebastian Ullrich (Apr 20 2021 at 10:12):
In Emacs I just get an empty message as expected
Gabriel Ebner (Apr 20 2021 at 13:25):
This is interesting. Apparently the server returns empty messages:
  {
    "params": {
      "version": 1,
      "uri": "file:///home/gebner/lean4/foo.lean",
      "diagnostics": [
        {
          "source": "Lean 4 server",
          "severity": 3,
          "range": {
            "start": {
              "line": 2,
              "character": 0
            },
            "end": {
              "line": 2,
              "character": 5
            }
          },
          "message": "",
          "fullRange": {
            "start": {
              "line": 2,
              "character": 0
            },
            "end": {
              "line": 2,
              "character": 5
            }
          }
        }
      ]
    },
    "method": "textDocument/publishDiagnostics",
    "jsonrpc": "2.0"
  }
Daniel Fabian (Apr 20 2021 at 13:26):
I wonder if it's related to a similar issue I'm facing with side-effecting MetaM Unit stuff.
Daniel Fabian (Apr 20 2021 at 13:26):
I seem to also get infinite loops if I don't print something using trace[Meta.debug] and make a pure side-effect.
Gabriel Ebner (Apr 20 2021 at 13:26):
The vscode extension then throws an exception (and doesn't update the diagnostics):
Notification handler 'textDocument/publishDiagnostics' failed with message: message must be set
Sebastian Ullrich (Apr 20 2021 at 14:05):
I see @Gabriel Ebner fixed it on the extension side, but I suppose we could still suppress empty messages from the server?
Gabriel Ebner (Apr 20 2021 at 14:06):
I'm not sure what the right solution here is. Empty messages are not forbidden by the LSP protocol AFAICT.
Sebastian Ullrich (Apr 20 2021 at 14:07):
Yeah, I just wonder what's the more helpful behavior. If people use it for side-effects, they probably don't want to see any empty message.
Gabriel Ebner (Apr 20 2021 at 14:12):
Yeah, suppressing the empty message is probably more helpful.
Mario Carneiro (Apr 20 2021 at 20:11):
I think that suppressing empty messages should be done on the extension side. I think it is difficult to find all the places where lean can possibly send an empty message, I've run into this problem in 3 or 4 places before
Sebastian Ullrich (Apr 20 2021 at 20:13):
I would have made it specific to #eval, I don't know about any other parts that could send empty messages. But even then, there is a single function in the code that actually writes out the diagnostics notification to the client, so we could also filter them there.
Last updated: May 02 2025 at 03:31 UTC