Read VSCode extension namespace from the manifest#383
Closed
holodorum wants to merge 4 commits into
Closed
Conversation
The formatter parses with `ignoreErrors = true`, which can leave hidden `AstNodeError` nodes in a tree where `hasErrors()` still returns false. `resolveEmbedBlocks` called `root.toKsonValue()` directly, so those hidden errors surfaced as a `ShouldNotHappenException` that escaped `format()` instead of falling back to the original source. This only reproduced when embed block rules were configured. Take a `KsonValue` in `resolveEmbedBlocks` instead of a `KsonRoot`, and have the caller source it from `AstParseResult.ksonValue` — which already catches the conversion exception and returns null. The new `ksonValue != null` guard is strictly stronger than the previous `!hasErrors()` check.
The upstream kson extension hard-coded "kson" as the prefix for its
contributed command ids (kson.selectSchema) and configuration
properties (kson.format.*, kson.codeLens.enable, kson.trace.server,
...).
The client now reads the namespace from a `ksonConfigNamespace`
top-level manifest field and then "kson", and passes it to the server
via initializationOptions. CommandType enum values are unqualified ids
(plainFormat, compactFormat, ...) with the wire prefix applied at the
LSP boundary via toWireCommandId / fromWireCommandId — both exported so
the client doesn't hand-build wire ids either. KsonSettings is flattened
to drop the fixed { kson: {...} } wrapper and a single
unwrapPushedSettings helper handles both namespaced and already-scoped
push payloads.
c58fda3 to
79a0915
Compare
Make the VSCode extension's package.json the single source of truth for
the command/config namespace prefix. The base manifest now declares
"ksonConfigNamespace": "kson" explicitly, and the client-side reader
throws when the field is missing instead of silently falling back to a
default. A fork that rebrands the extension can no longer half-configure
itself by setting the contribution strings without updating the
namespace declaration. Tighten the same contract on the LSP side:
DiagnosticService and KsonTextDocumentService now require the namespace
at construction (no implicit kson default), tests assert the contract
("source equals the configured namespace") rather than the literal
value, and DEFAULT_CONFIG_NAMESPACE is no longer re-exported on the
public package API since the manifest is now the only sanctioned source.
The LSP server's initializationOptions fallback stays in place since
arbitrary LSP clients can't be expected to send it.
`name` is already required to be unique per publisher and every
contributed command id / configuration key in the manifest already
lives under `kson.*`, so it IS the wire-level identifier. The client
reads it directly and threads it as `distributionId` (renamed from the
more generic `configNamespace`) into the LSP initialization options,
the LanguageClient id, and `${name}.selectSchema` registrations. The
redundant `ksonConfigNamespace` manifest field is gone since it
duplicated `name` and could drift; the explicit "throw if missing"
check is gone since VSCode itself rejects manifests without `name`.
`KsonSettings` is also unwrapped — the server now strips the outer
namespace key before applying defaults, so the type is
`{ formatOptions, codeLensEnabled }` rather than `{ kson: {...} }`.
Collaborator
Author
|
Closed in favor of #388 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The upstream kson extension hard-coded "kson" as the prefix for its contributed command ids (kson.selectSchema) and configuration properties (kson.format.*, kson.codeLens.enable, kson.trace.server, ...).
The client now reads the namespace from a
ksonConfigNamespacetop-level manifest field, falling back to "kson", and passes it to the server via initializationOptions. CommandType enum values are unqualified ids (plainFormat, compactFormat, ...) with the wire prefix applied at the LSP boundary via toWireCommandId / fromWireCommandId — both exported so the client doesn't hand-build wire ids either. KsonSettings is flattened to drop the fixed { kson: {...} } wrapper and a single unwrapPushedSettings helper handles both namespaced and already-scoped push payloads.