Skip to content

Add Version Support to textDocument/publishDiagnostics #794

@Mazyod

Description

@Mazyod

Describe the Bug

When initializing Pyrefly config with publishDiagnostics and versionSupport set to true, I think published diagnostics should return the version key in the response in order to be able to track and match the published diagnostics with the version of the document, in case it is rapidly changing.

I am not sure if this is strictly what the specification dictates, as it is a bit vague in this area. However, that's how it's been working on Pyright.

The reason it's important to me is to be able to "discard" outdated diagnostics with an old version in case they are returned after a new version is published.

e.g.

"publishDiagnostics": {
    "versionSupport": True,
    "tagSupport": {
        "valueSet": [
            lsp_types.DiagnosticTag.Unnecessary,
            lsp_types.DiagnosticTag.Deprecated,
        ]
    },
}

Also, pass the document versions during the textDocument/didChange event:

{
    "textDocument": {
        "uri": self._document_uri,
        "version": self._document_version,
    },
    "contentChanges": [{"text": code}],
}

Response from Pyrefly:

DEBUG    lsp-types:process.py:281 Server -> Client: {'jsonrpc': '2.0', 'method': 'textDocument/publishDiagnostics', 'params': {'diagnostics': [], 'uri': 'file:///test.py'}}

Same code prepared against basedpyright returns the version appropriately:

DEBUG    lsp-types:process.py:281 Server -> Client: {'jsonrpc': '2.0', 'method': 'textDocument/publishDiagnostics', 'params': {'uri': 'file:///test.py', 'version': 2, 'diagnostics': []}}

Sandbox Link

No response

(Only applicable for extension issues) IDE Information

No response

Metadata

Metadata

Assignees

Labels

UserBugs reported by external users that should be prioritisedcodenavgood first issueGood for newcomershelp wantedLarger than "good first issue", but still well-defined and ready for someone to pick up

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions