Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Accept the legacy boolean form of diagnostic tag support

Open Beginner friendly
#552 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
70/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Active
Tech stack
rust

Research direction

Look at the ClientCapabilities decoding in the codebase, likely in a file handling LSP protocol types or initialization. The issue mentions gen-lsp-types and TagSupport::deserialize_compat. Find where tagSupport is parsed and modify it to accept a boolean (true/false) as a legacy form, mapping true to an empty value set and false to no support. Ensure the change doesn't break the object form. Write a test for initialize with both boolean forms and the object form, verifying the server starts successfully.

Written by the indexing model from the issue text.

Description

bug language-server

Context

Since #549, ClientCapabilities comes from gen-lsp-types, which types textDocument.publishDiagnostics.tagSupport as the ClientDiagnosticsTagOptions object defined by the current specification. lsp-types 0.95 decoded it through TagSupport::deserialize_compat, which also accepted the legacy boolean form: true as tag support with an empty value set, and false as no tag support.

A client that still sends the boolean now has initialize rejected with InvalidParams (invalid type: boolean 'true', expected struct ClientDiagnosticsTagOptions), for both true and false, so the language server cannot start. The protocol actor's Session::negotiate silently falls back to default capabilities in the same case, but that does not help once the workspace rejects initialize.

The server does not read tagSupport. It is unknown which clients still send the boolean form; lsp-types kept the compatibility path because some did.

Goal

A client that sends the legacy boolean tagSupport can initialize the server, as it could with lsp-types 0.95.

Scope

  • Accept or ignore the boolean form rather than failing capability decoding. Decoding only the capabilities the server uses would also resolve this, and could share a solution with #551.
  • Avoid the protocol actor and the workspace interpreting the same capabilities differently.

Tests

  • initialize with tagSupport: true and with tagSupport: false succeeds and returns the usual server capabilities.
  • The object form keeps working.
Dominant language
Rust
Stars
102
Forks
11
Avg merge
3h 31m
Merged PRs (30d)
134

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from purefunctor/purescript-iris

All issues in purefunctor/purescript-iris

Similar issues

More Rust issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.