Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 16 additions & 2 deletions Sources/LanguageServerProtocol/SupportTypes/LSPAny+Coding.swift
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,14 @@ private final class LSPAnyEncoder: Encoder {
// MARK: - .keyed

func prepareKeyed() {
storage = .keyed([:])
switch storage {
case nil:
storage = .keyed([:])
case .keyed?:
break
case .single?, .unkeyed?:
preconditionFailure("cannot create keyed container after encoding a non-keyed value")
}
}
func set(key: String, value: LSPAnyReference) {
guard case .keyed(var dictionary)? = storage else {
Expand All @@ -94,7 +101,14 @@ private final class LSPAnyEncoder: Encoder {
// MARK: - .unkeyed

func prepareUnkeyed() {
storage = .unkeyed([])
switch storage {
case nil:
storage = .unkeyed([])
case .unkeyed?:
break
case .single?, .keyed?:
preconditionFailure("cannot create unkeyed container after encoding a non-unkeyed value")
}
}
func append(value: LSPAnyReference) {
guard case .unkeyed(var array)? = storage else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public protocol TextDocumentRegistrationOptionsProtocol {
var textDocumentRegistrationOptions: TextDocumentRegistrationOptions { get }
}

/// Code completiion registration options.
/// Code completion registration options.
public struct CompletionRegistrationOptions: RegistrationOptions, TextDocumentRegistrationOptionsProtocol, Hashable {
public var textDocumentRegistrationOptions: TextDocumentRegistrationOptions
public var completionOptions: CompletionOptions
Expand All @@ -44,6 +44,16 @@ public struct CompletionRegistrationOptions: RegistrationOptions, TextDocumentRe
TextDocumentRegistrationOptions(documentSelector: documentSelector)
self.completionOptions = completionOptions
}

public init(from decoder: Decoder) throws {
self.textDocumentRegistrationOptions = try TextDocumentRegistrationOptions(from: decoder)
self.completionOptions = try CompletionOptions(from: decoder)
}

public func encode(to encoder: Encoder) throws {
try textDocumentRegistrationOptions.encode(to: encoder)
try completionOptions.encode(to: encoder)
}
}

/// Signature help registration options.
Expand All @@ -56,6 +66,16 @@ public struct SignatureHelpRegistrationOptions: RegistrationOptions, TextDocumen
TextDocumentRegistrationOptions(documentSelector: documentSelector)
self.signatureHelpOptions = signatureHelpOptions
}

public init(from decoder: Decoder) throws {
self.textDocumentRegistrationOptions = try TextDocumentRegistrationOptions(from: decoder)
self.signatureHelpOptions = try SignatureHelpOptions(from: decoder)
}

public func encode(to encoder: Encoder) throws {
try textDocumentRegistrationOptions.encode(to: encoder)
try signatureHelpOptions.encode(to: encoder)
}
}

/// Folding range registration options.
Expand All @@ -68,6 +88,16 @@ public struct FoldingRangeRegistrationOptions: RegistrationOptions, TextDocument
TextDocumentRegistrationOptions(documentSelector: documentSelector)
self.foldingRangeOptions = foldingRangeOptions
}

public init(from decoder: Decoder) throws {
self.textDocumentRegistrationOptions = try TextDocumentRegistrationOptions(from: decoder)
self.foldingRangeOptions = try FoldingRangeOptions(from: decoder)
}

public func encode(to encoder: Encoder) throws {
try textDocumentRegistrationOptions.encode(to: encoder)
try foldingRangeOptions.encode(to: encoder)
}
}

public struct SemanticTokensRegistrationOptions: RegistrationOptions, TextDocumentRegistrationOptionsProtocol, Hashable
Expand All @@ -84,6 +114,16 @@ public struct SemanticTokensRegistrationOptions: RegistrationOptions, TextDocume
TextDocumentRegistrationOptions(documentSelector: documentSelector)
self.semanticTokenOptions = semanticTokenOptions
}

public init(from decoder: Decoder) throws {
self.textDocumentRegistrationOptions = try TextDocumentRegistrationOptions(from: decoder)
self.semanticTokenOptions = try SemanticTokensOptions(from: decoder)
}

public func encode(to encoder: Encoder) throws {
try textDocumentRegistrationOptions.encode(to: encoder)
try semanticTokenOptions.encode(to: encoder)
}
}

public struct InlayHintRegistrationOptions: RegistrationOptions, TextDocumentRegistrationOptionsProtocol, Hashable {
Expand All @@ -97,6 +137,16 @@ public struct InlayHintRegistrationOptions: RegistrationOptions, TextDocumentReg
textDocumentRegistrationOptions = TextDocumentRegistrationOptions(documentSelector: documentSelector)
self.inlayHintOptions = inlayHintOptions
}

public init(from decoder: Decoder) throws {
self.textDocumentRegistrationOptions = try TextDocumentRegistrationOptions(from: decoder)
self.inlayHintOptions = try InlayHintOptions(from: decoder)
}

public func encode(to encoder: Encoder) throws {
try textDocumentRegistrationOptions.encode(to: encoder)
try inlayHintOptions.encode(to: encoder)
}
}

/// Describe options to be used when registering for pull diagnostics. Since LSP 3.17.0
Expand All @@ -111,6 +161,16 @@ public struct DiagnosticRegistrationOptions: RegistrationOptions, TextDocumentRe
textDocumentRegistrationOptions = TextDocumentRegistrationOptions(documentSelector: documentSelector)
self.diagnosticOptions = diagnosticOptions
}

public init(from decoder: Decoder) throws {
self.textDocumentRegistrationOptions = try TextDocumentRegistrationOptions(from: decoder)
self.diagnosticOptions = try DiagnosticOptions(from: decoder)
}

public func encode(to encoder: Encoder) throws {
try textDocumentRegistrationOptions.encode(to: encoder)
try diagnosticOptions.encode(to: encoder)
}
}

/// Describe options to be used when registering for code lenses.
Expand All @@ -125,6 +185,16 @@ public struct CodeLensRegistrationOptions: RegistrationOptions, TextDocumentRegi
textDocumentRegistrationOptions = TextDocumentRegistrationOptions(documentSelector: documentSelector)
self.codeLensOptions = codeLensOptions
}

public init(from decoder: Decoder) throws {
self.textDocumentRegistrationOptions = try TextDocumentRegistrationOptions(from: decoder)
self.codeLensOptions = try CodeLensOptions(from: decoder)
}

public func encode(to encoder: Encoder) throws {
try textDocumentRegistrationOptions.encode(to: encoder)
try codeLensOptions.encode(to: encoder)
}
}

/// Describe options to be used when registering for file system change events.
Expand Down
Loading
Loading