diff options
| author | Kujtim Hoxha <[email protected]> | 2025-04-03 15:20:15 +0200 |
|---|---|---|
| committer | Kujtim Hoxha <[email protected]> | 2025-04-03 17:23:41 +0200 |
| commit | cfdd687216799cb5b47f099f1e7cd5dd16b3bdd0 (patch) | |
| tree | a822bfde1463a7080c0ea06dd17796d7a1617d3d /internal/lsp/protocol | |
| parent | afd9ad0560d76c2a6d161dad52553b10ff428905 (diff) | |
| download | opencode-cfdd687216799cb5b47f099f1e7cd5dd16b3bdd0.tar.gz opencode-cfdd687216799cb5b47f099f1e7cd5dd16b3bdd0.zip | |
add initial lsp support
Diffstat (limited to 'internal/lsp/protocol')
| -rw-r--r-- | internal/lsp/protocol/LICENSE | 27 | ||||
| -rw-r--r-- | internal/lsp/protocol/interface.go | 117 | ||||
| -rw-r--r-- | internal/lsp/protocol/pattern_interfaces.go | 58 | ||||
| -rw-r--r-- | internal/lsp/protocol/tables.go | 30 | ||||
| -rw-r--r-- | internal/lsp/protocol/tsdocument-changes.go | 81 | ||||
| -rw-r--r-- | internal/lsp/protocol/tsjson.go | 3072 | ||||
| -rw-r--r-- | internal/lsp/protocol/tsprotocol.go | 6907 | ||||
| -rw-r--r-- | internal/lsp/protocol/uri.go | 218 |
8 files changed, 10510 insertions, 0 deletions
diff --git a/internal/lsp/protocol/LICENSE b/internal/lsp/protocol/LICENSE new file mode 100644 index 000000000..2a7cf70da --- /dev/null +++ b/internal/lsp/protocol/LICENSE @@ -0,0 +1,27 @@ +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/internal/lsp/protocol/interface.go b/internal/lsp/protocol/interface.go new file mode 100644 index 000000000..bfb868746 --- /dev/null +++ b/internal/lsp/protocol/interface.go @@ -0,0 +1,117 @@ +package protocol + +import "fmt" + +// TextEditResult is an interface for types that represent workspace symbols +type WorkspaceSymbolResult interface { + GetName() string + GetLocation() Location + isWorkspaceSymbol() // marker method +} + +func (ws *WorkspaceSymbol) GetName() string { return ws.Name } +func (ws *WorkspaceSymbol) GetLocation() Location { + switch v := ws.Location.Value.(type) { + case Location: + return v + case LocationUriOnly: + return Location{URI: v.URI} + } + return Location{} +} +func (ws *WorkspaceSymbol) isWorkspaceSymbol() {} + +func (si *SymbolInformation) GetName() string { return si.Name } +func (si *SymbolInformation) GetLocation() Location { return si.Location } +func (si *SymbolInformation) isWorkspaceSymbol() {} + +// Results converts the Value to a slice of WorkspaceSymbolResult +func (r Or_Result_workspace_symbol) Results() ([]WorkspaceSymbolResult, error) { + if r.Value == nil { + return make([]WorkspaceSymbolResult, 0), nil + } + switch v := r.Value.(type) { + case []WorkspaceSymbol: + results := make([]WorkspaceSymbolResult, len(v)) + for i := range v { + results[i] = &v[i] + } + return results, nil + case []SymbolInformation: + results := make([]WorkspaceSymbolResult, len(v)) + for i := range v { + results[i] = &v[i] + } + return results, nil + default: + return nil, fmt.Errorf("unknown symbol type: %T", r.Value) + } +} + +// TextEditResult is an interface for types that represent document symbols +type DocumentSymbolResult interface { + GetRange() Range + GetName() string + isDocumentSymbol() // marker method +} + +func (ds *DocumentSymbol) GetRange() Range { return ds.Range } +func (ds *DocumentSymbol) GetName() string { return ds.Name } +func (ds *DocumentSymbol) isDocumentSymbol() {} + +func (si *SymbolInformation) GetRange() Range { return si.Location.Range } + +// Note: SymbolInformation already has GetName() implemented above +func (si *SymbolInformation) isDocumentSymbol() {} + +// Results converts the Value to a slice of DocumentSymbolResult +func (r Or_Result_textDocument_documentSymbol) Results() ([]DocumentSymbolResult, error) { + if r.Value == nil { + return make([]DocumentSymbolResult, 0), nil + } + switch v := r.Value.(type) { + case []DocumentSymbol: + results := make([]DocumentSymbolResult, len(v)) + for i := range v { + results[i] = &v[i] + } + return results, nil + case []SymbolInformation: + results := make([]DocumentSymbolResult, len(v)) + for i := range v { + results[i] = &v[i] + } + return results, nil + default: + return nil, fmt.Errorf("unknown document symbol type: %T", v) + } +} + +// TextEditResult is an interface for types that can be used as text edits +type TextEditResult interface { + GetRange() Range + GetNewText() string + isTextEdit() // marker method +} + +func (te *TextEdit) GetRange() Range { return te.Range } +func (te *TextEdit) GetNewText() string { return te.NewText } +func (te *TextEdit) isTextEdit() {} + +// Convert Or_TextDocumentEdit_edits_Elem to TextEdit +func (e Or_TextDocumentEdit_edits_Elem) AsTextEdit() (TextEdit, error) { + if e.Value == nil { + return TextEdit{}, fmt.Errorf("nil text edit") + } + switch v := e.Value.(type) { + case TextEdit: + return v, nil + case AnnotatedTextEdit: + return TextEdit{ + Range: v.Range, + NewText: v.NewText, + }, nil + default: + return TextEdit{}, fmt.Errorf("unknown text edit type: %T", e.Value) + } +} diff --git a/internal/lsp/protocol/pattern_interfaces.go b/internal/lsp/protocol/pattern_interfaces.go new file mode 100644 index 000000000..ebc7053dc --- /dev/null +++ b/internal/lsp/protocol/pattern_interfaces.go @@ -0,0 +1,58 @@ +package protocol + +import ( + "fmt" + "strings" +) + +// PatternInfo is an interface for types that represent glob patterns +type PatternInfo interface { + GetPattern() string + GetBasePath() string + isPattern() // marker method +} + +// StringPattern implements PatternInfo for string patterns +type StringPattern struct { + Pattern string +} + +func (p StringPattern) GetPattern() string { return p.Pattern } +func (p StringPattern) GetBasePath() string { return "" } +func (p StringPattern) isPattern() {} + +// RelativePatternInfo implements PatternInfo for RelativePattern +type RelativePatternInfo struct { + RP RelativePattern + BasePath string +} + +func (p RelativePatternInfo) GetPattern() string { return string(p.RP.Pattern) } +func (p RelativePatternInfo) GetBasePath() string { return p.BasePath } +func (p RelativePatternInfo) isPattern() {} + +// AsPattern converts GlobPattern to a PatternInfo object +func (g *GlobPattern) AsPattern() (PatternInfo, error) { + if g.Value == nil { + return nil, fmt.Errorf("nil pattern") + } + + switch v := g.Value.(type) { + case string: + return StringPattern{Pattern: v}, nil + case RelativePattern: + // Handle BaseURI which could be string or DocumentUri + basePath := "" + switch baseURI := v.BaseURI.Value.(type) { + case string: + basePath = strings.TrimPrefix(baseURI, "file://") + case DocumentUri: + basePath = strings.TrimPrefix(string(baseURI), "file://") + default: + return nil, fmt.Errorf("unknown BaseURI type: %T", v.BaseURI.Value) + } + return RelativePatternInfo{RP: v, BasePath: basePath}, nil + default: + return nil, fmt.Errorf("unknown pattern type: %T", g.Value) + } +} diff --git a/internal/lsp/protocol/tables.go b/internal/lsp/protocol/tables.go new file mode 100644 index 000000000..6a8fb99e0 --- /dev/null +++ b/internal/lsp/protocol/tables.go @@ -0,0 +1,30 @@ +package protocol + +var TableKindMap = map[SymbolKind]string{ + File: "File", + Module: "Module", + Namespace: "Namespace", + Package: "Package", + Class: "Class", + Method: "Method", + Property: "Property", + Field: "Field", + Constructor: "Constructor", + Enum: "Enum", + Interface: "Interface", + Function: "Function", + Variable: "Variable", + Constant: "Constant", + String: "String", + Number: "Number", + Boolean: "Boolean", + Array: "Array", + Object: "Object", + Key: "Key", + Null: "Null", + EnumMember: "EnumMember", + Struct: "Struct", + Event: "Event", + Operator: "Operator", + TypeParameter: "TypeParameter", +} diff --git a/internal/lsp/protocol/tsdocument-changes.go b/internal/lsp/protocol/tsdocument-changes.go new file mode 100644 index 000000000..63b9914eb --- /dev/null +++ b/internal/lsp/protocol/tsdocument-changes.go @@ -0,0 +1,81 @@ +// Copyright 2022 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package protocol + +import ( + "encoding/json" + "fmt" +) + +// DocumentChange is a union of various file edit operations. +// +// Exactly one field of this struct is non-nil; see [DocumentChange.Valid]. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#resourceChanges +type DocumentChange struct { + TextDocumentEdit *TextDocumentEdit + CreateFile *CreateFile + RenameFile *RenameFile + DeleteFile *DeleteFile +} + +// Valid reports whether the DocumentChange sum-type value is valid, +// that is, exactly one of create, delete, edit, or rename. +func (ch DocumentChange) Valid() bool { + n := 0 + if ch.TextDocumentEdit != nil { + n++ + } + if ch.CreateFile != nil { + n++ + } + if ch.RenameFile != nil { + n++ + } + if ch.DeleteFile != nil { + n++ + } + return n == 1 +} + +func (d *DocumentChange) UnmarshalJSON(data []byte) error { + var m map[string]any + if err := json.Unmarshal(data, &m); err != nil { + return err + } + + if _, ok := m["textDocument"]; ok { + d.TextDocumentEdit = new(TextDocumentEdit) + return json.Unmarshal(data, d.TextDocumentEdit) + } + + // The {Create,Rename,Delete}File types all share a 'kind' field. + kind := m["kind"] + switch kind { + case "create": + d.CreateFile = new(CreateFile) + return json.Unmarshal(data, d.CreateFile) + case "rename": + d.RenameFile = new(RenameFile) + return json.Unmarshal(data, d.RenameFile) + case "delete": + d.DeleteFile = new(DeleteFile) + return json.Unmarshal(data, d.DeleteFile) + } + return fmt.Errorf("DocumentChanges: unexpected kind: %q", kind) +} + +func (d *DocumentChange) MarshalJSON() ([]byte, error) { + if d.TextDocumentEdit != nil { + return json.Marshal(d.TextDocumentEdit) + } else if d.CreateFile != nil { + return json.Marshal(d.CreateFile) + } else if d.RenameFile != nil { + return json.Marshal(d.RenameFile) + } else if d.DeleteFile != nil { + return json.Marshal(d.DeleteFile) + } + return nil, fmt.Errorf("empty DocumentChanges union value") +} diff --git a/internal/lsp/protocol/tsjson.go b/internal/lsp/protocol/tsjson.go new file mode 100644 index 000000000..24eb515c0 --- /dev/null +++ b/internal/lsp/protocol/tsjson.go @@ -0,0 +1,3072 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated for LSP. DO NOT EDIT. + +package protocol + +// Code generated from protocol/metaModel.json at ref release/protocol/3.17.6-next.9 (hash c94395b5da53729e6dff931293b051009ccaaaa4). +// https://github.com/microsoft/vscode-languageserver-node/blob/release/protocol/3.17.6-next.9/protocol/metaModel.json +// LSP metaData.version = 3.17.0. + +import "bytes" +import "encoding/json" + +import "fmt" + +// UnmarshalError indicates that a JSON value did not conform to +// one of the expected cases of an LSP union type. +type UnmarshalError struct { + msg string +} + +func (e UnmarshalError) Error() string { + return e.msg +} +func (t Or_CancelParams_id) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case int32: + return json.Marshal(x) + case string: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [int32 string]", t) +} + +func (t *Or_CancelParams_id) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder41 := json.NewDecoder(bytes.NewReader(x)) + decoder41.DisallowUnknownFields() + var int32Val int32 + if err := decoder41.Decode(&int32Val); err == nil { + t.Value = int32Val + return nil + } + decoder42 := json.NewDecoder(bytes.NewReader(x)) + decoder42.DisallowUnknownFields() + var stringVal string + if err := decoder42.Decode(&stringVal); err == nil { + t.Value = stringVal + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [int32 string]"} +} + +func (t Or_ClientSemanticTokensRequestOptions_full) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case ClientSemanticTokensRequestFullDelta: + return json.Marshal(x) + case bool: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [ClientSemanticTokensRequestFullDelta bool]", t) +} + +func (t *Or_ClientSemanticTokensRequestOptions_full) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder220 := json.NewDecoder(bytes.NewReader(x)) + decoder220.DisallowUnknownFields() + var boolVal bool + if err := decoder220.Decode(&boolVal); err == nil { + t.Value = boolVal + return nil + } + decoder221 := json.NewDecoder(bytes.NewReader(x)) + decoder221.DisallowUnknownFields() + var h221 ClientSemanticTokensRequestFullDelta + if err := decoder221.Decode(&h221); err == nil { + t.Value = h221 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [ClientSemanticTokensRequestFullDelta bool]"} +} + +func (t Or_ClientSemanticTokensRequestOptions_range) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case Lit_ClientSemanticTokensRequestOptions_range_Item1: + return json.Marshal(x) + case bool: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [Lit_ClientSemanticTokensRequestOptions_range_Item1 bool]", t) +} + +func (t *Or_ClientSemanticTokensRequestOptions_range) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder217 := json.NewDecoder(bytes.NewReader(x)) + decoder217.DisallowUnknownFields() + var boolVal bool + if err := decoder217.Decode(&boolVal); err == nil { + t.Value = boolVal + return nil + } + decoder218 := json.NewDecoder(bytes.NewReader(x)) + decoder218.DisallowUnknownFields() + var h218 Lit_ClientSemanticTokensRequestOptions_range_Item1 + if err := decoder218.Decode(&h218); err == nil { + t.Value = h218 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [Lit_ClientSemanticTokensRequestOptions_range_Item1 bool]"} +} + +func (t Or_CompletionItemDefaults_editRange) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case EditRangeWithInsertReplace: + return json.Marshal(x) + case Range: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [EditRangeWithInsertReplace Range]", t) +} + +func (t *Or_CompletionItemDefaults_editRange) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder183 := json.NewDecoder(bytes.NewReader(x)) + decoder183.DisallowUnknownFields() + var h183 EditRangeWithInsertReplace + if err := decoder183.Decode(&h183); err == nil { + t.Value = h183 + return nil + } + decoder184 := json.NewDecoder(bytes.NewReader(x)) + decoder184.DisallowUnknownFields() + var h184 Range + if err := decoder184.Decode(&h184); err == nil { + t.Value = h184 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [EditRangeWithInsertReplace Range]"} +} + +func (t Or_CompletionItem_documentation) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case MarkupContent: + return json.Marshal(x) + case string: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [MarkupContent string]", t) +} + +func (t *Or_CompletionItem_documentation) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder25 := json.NewDecoder(bytes.NewReader(x)) + decoder25.DisallowUnknownFields() + var stringVal string + if err := decoder25.Decode(&stringVal); err == nil { + t.Value = stringVal + return nil + } + decoder26 := json.NewDecoder(bytes.NewReader(x)) + decoder26.DisallowUnknownFields() + var h26 MarkupContent + if err := decoder26.Decode(&h26); err == nil { + t.Value = h26 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [MarkupContent string]"} +} + +func (t Or_CompletionItem_textEdit) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case InsertReplaceEdit: + return json.Marshal(x) + case TextEdit: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [InsertReplaceEdit TextEdit]", t) +} + +func (t *Or_CompletionItem_textEdit) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder29 := json.NewDecoder(bytes.NewReader(x)) + decoder29.DisallowUnknownFields() + var h29 InsertReplaceEdit + if err := decoder29.Decode(&h29); err == nil { + t.Value = h29 + return nil + } + decoder30 := json.NewDecoder(bytes.NewReader(x)) + decoder30.DisallowUnknownFields() + var h30 TextEdit + if err := decoder30.Decode(&h30); err == nil { + t.Value = h30 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [InsertReplaceEdit TextEdit]"} +} + +func (t Or_Declaration) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case Location: + return json.Marshal(x) + case []Location: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [Location []Location]", t) +} + +func (t *Or_Declaration) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder237 := json.NewDecoder(bytes.NewReader(x)) + decoder237.DisallowUnknownFields() + var h237 Location + if err := decoder237.Decode(&h237); err == nil { + t.Value = h237 + return nil + } + decoder238 := json.NewDecoder(bytes.NewReader(x)) + decoder238.DisallowUnknownFields() + var h238 []Location + if err := decoder238.Decode(&h238); err == nil { + t.Value = h238 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [Location []Location]"} +} + +func (t Or_Definition) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case Location: + return json.Marshal(x) + case []Location: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [Location []Location]", t) +} + +func (t *Or_Definition) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder224 := json.NewDecoder(bytes.NewReader(x)) + decoder224.DisallowUnknownFields() + var h224 Location + if err := decoder224.Decode(&h224); err == nil { + t.Value = h224 + return nil + } + decoder225 := json.NewDecoder(bytes.NewReader(x)) + decoder225.DisallowUnknownFields() + var h225 []Location + if err := decoder225.Decode(&h225); err == nil { + t.Value = h225 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [Location []Location]"} +} + +func (t Or_Diagnostic_code) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case int32: + return json.Marshal(x) + case string: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [int32 string]", t) +} + +func (t *Or_Diagnostic_code) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder179 := json.NewDecoder(bytes.NewReader(x)) + decoder179.DisallowUnknownFields() + var int32Val int32 + if err := decoder179.Decode(&int32Val); err == nil { + t.Value = int32Val + return nil + } + decoder180 := json.NewDecoder(bytes.NewReader(x)) + decoder180.DisallowUnknownFields() + var stringVal string + if err := decoder180.Decode(&stringVal); err == nil { + t.Value = stringVal + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [int32 string]"} +} + +func (t Or_DidChangeConfigurationRegistrationOptions_section) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case []string: + return json.Marshal(x) + case string: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [[]string string]", t) +} + +func (t *Or_DidChangeConfigurationRegistrationOptions_section) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder22 := json.NewDecoder(bytes.NewReader(x)) + decoder22.DisallowUnknownFields() + var stringVal string + if err := decoder22.Decode(&stringVal); err == nil { + t.Value = stringVal + return nil + } + decoder23 := json.NewDecoder(bytes.NewReader(x)) + decoder23.DisallowUnknownFields() + var h23 []string + if err := decoder23.Decode(&h23); err == nil { + t.Value = h23 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [[]string string]"} +} + +func (t Or_DocumentDiagnosticReport) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case RelatedFullDocumentDiagnosticReport: + return json.Marshal(x) + case RelatedUnchangedDocumentDiagnosticReport: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [RelatedFullDocumentDiagnosticReport RelatedUnchangedDocumentDiagnosticReport]", t) +} + +func (t *Or_DocumentDiagnosticReport) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder247 := json.NewDecoder(bytes.NewReader(x)) + decoder247.DisallowUnknownFields() + var h247 RelatedFullDocumentDiagnosticReport + if err := decoder247.Decode(&h247); err == nil { + t.Value = h247 + return nil + } + decoder248 := json.NewDecoder(bytes.NewReader(x)) + decoder248.DisallowUnknownFields() + var h248 RelatedUnchangedDocumentDiagnosticReport + if err := decoder248.Decode(&h248); err == nil { + t.Value = h248 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [RelatedFullDocumentDiagnosticReport RelatedUnchangedDocumentDiagnosticReport]"} +} + +func (t Or_DocumentDiagnosticReportPartialResult_relatedDocuments_Value) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case FullDocumentDiagnosticReport: + return json.Marshal(x) + case UnchangedDocumentDiagnosticReport: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [FullDocumentDiagnosticReport UnchangedDocumentDiagnosticReport]", t) +} + +func (t *Or_DocumentDiagnosticReportPartialResult_relatedDocuments_Value) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder16 := json.NewDecoder(bytes.NewReader(x)) + decoder16.DisallowUnknownFields() + var h16 FullDocumentDiagnosticReport + if err := decoder16.Decode(&h16); err == nil { + t.Value = h16 + return nil + } + decoder17 := json.NewDecoder(bytes.NewReader(x)) + decoder17.DisallowUnknownFields() + var h17 UnchangedDocumentDiagnosticReport + if err := decoder17.Decode(&h17); err == nil { + t.Value = h17 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [FullDocumentDiagnosticReport UnchangedDocumentDiagnosticReport]"} +} + +func (t Or_DocumentFilter) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case NotebookCellTextDocumentFilter: + return json.Marshal(x) + case TextDocumentFilter: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [NotebookCellTextDocumentFilter TextDocumentFilter]", t) +} + +func (t *Or_DocumentFilter) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder270 := json.NewDecoder(bytes.NewReader(x)) + decoder270.DisallowUnknownFields() + var h270 NotebookCellTextDocumentFilter + if err := decoder270.Decode(&h270); err == nil { + t.Value = h270 + return nil + } + decoder271 := json.NewDecoder(bytes.NewReader(x)) + decoder271.DisallowUnknownFields() + var h271 TextDocumentFilter + if err := decoder271.Decode(&h271); err == nil { + t.Value = h271 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [NotebookCellTextDocumentFilter TextDocumentFilter]"} +} + +func (t Or_GlobPattern) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case Pattern: + return json.Marshal(x) + case RelativePattern: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [Pattern RelativePattern]", t) +} + +func (t *Or_GlobPattern) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder274 := json.NewDecoder(bytes.NewReader(x)) + decoder274.DisallowUnknownFields() + var h274 Pattern + if err := decoder274.Decode(&h274); err == nil { + t.Value = h274 + return nil + } + decoder275 := json.NewDecoder(bytes.NewReader(x)) + decoder275.DisallowUnknownFields() + var h275 RelativePattern + if err := decoder275.Decode(&h275); err == nil { + t.Value = h275 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [Pattern RelativePattern]"} +} + +func (t Or_Hover_contents) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case MarkedString: + return json.Marshal(x) + case MarkupContent: + return json.Marshal(x) + case []MarkedString: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [MarkedString MarkupContent []MarkedString]", t) +} + +func (t *Or_Hover_contents) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder34 := json.NewDecoder(bytes.NewReader(x)) + decoder34.DisallowUnknownFields() + var h34 MarkedString + if err := decoder34.Decode(&h34); err == nil { + t.Value = h34 + return nil + } + decoder35 := json.NewDecoder(bytes.NewReader(x)) + decoder35.DisallowUnknownFields() + var h35 MarkupContent + if err := decoder35.Decode(&h35); err == nil { + t.Value = h35 + return nil + } + decoder36 := json.NewDecoder(bytes.NewReader(x)) + decoder36.DisallowUnknownFields() + var h36 []MarkedString + if err := decoder36.Decode(&h36); err == nil { + t.Value = h36 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [MarkedString MarkupContent []MarkedString]"} +} + +func (t Or_InlayHintLabelPart_tooltip) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case MarkupContent: + return json.Marshal(x) + case string: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [MarkupContent string]", t) +} + +func (t *Or_InlayHintLabelPart_tooltip) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder56 := json.NewDecoder(bytes.NewReader(x)) + decoder56.DisallowUnknownFields() + var stringVal string + if err := decoder56.Decode(&stringVal); err == nil { + t.Value = stringVal + return nil + } + decoder57 := json.NewDecoder(bytes.NewReader(x)) + decoder57.DisallowUnknownFields() + var h57 MarkupContent + if err := decoder57.Decode(&h57); err == nil { + t.Value = h57 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [MarkupContent string]"} +} + +func (t Or_InlayHint_label) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case []InlayHintLabelPart: + return json.Marshal(x) + case string: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [[]InlayHintLabelPart string]", t) +} + +func (t *Or_InlayHint_label) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder9 := json.NewDecoder(bytes.NewReader(x)) + decoder9.DisallowUnknownFields() + var stringVal string + if err := decoder9.Decode(&stringVal); err == nil { + t.Value = stringVal + return nil + } + decoder10 := json.NewDecoder(bytes.NewReader(x)) + decoder10.DisallowUnknownFields() + var h10 []InlayHintLabelPart + if err := decoder10.Decode(&h10); err == nil { + t.Value = h10 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [[]InlayHintLabelPart string]"} +} + +func (t Or_InlayHint_tooltip) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case MarkupContent: + return json.Marshal(x) + case string: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [MarkupContent string]", t) +} + +func (t *Or_InlayHint_tooltip) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder12 := json.NewDecoder(bytes.NewReader(x)) + decoder12.DisallowUnknownFields() + var stringVal string + if err := decoder12.Decode(&stringVal); err == nil { + t.Value = stringVal + return nil + } + decoder13 := json.NewDecoder(bytes.NewReader(x)) + decoder13.DisallowUnknownFields() + var h13 MarkupContent + if err := decoder13.Decode(&h13); err == nil { + t.Value = h13 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [MarkupContent string]"} +} + +func (t Or_InlineCompletionItem_insertText) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case StringValue: + return json.Marshal(x) + case string: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [StringValue string]", t) +} + +func (t *Or_InlineCompletionItem_insertText) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder19 := json.NewDecoder(bytes.NewReader(x)) + decoder19.DisallowUnknownFields() + var stringVal string + if err := decoder19.Decode(&stringVal); err == nil { + t.Value = stringVal + return nil + } + decoder20 := json.NewDecoder(bytes.NewReader(x)) + decoder20.DisallowUnknownFields() + var h20 StringValue + if err := decoder20.Decode(&h20); err == nil { + t.Value = h20 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [StringValue string]"} +} + +func (t Or_InlineValue) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case InlineValueEvaluatableExpression: + return json.Marshal(x) + case InlineValueText: + return json.Marshal(x) + case InlineValueVariableLookup: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [InlineValueEvaluatableExpression InlineValueText InlineValueVariableLookup]", t) +} + +func (t *Or_InlineValue) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder242 := json.NewDecoder(bytes.NewReader(x)) + decoder242.DisallowUnknownFields() + var h242 InlineValueEvaluatableExpression + if err := decoder242.Decode(&h242); err == nil { + t.Value = h242 + return nil + } + decoder243 := json.NewDecoder(bytes.NewReader(x)) + decoder243.DisallowUnknownFields() + var h243 InlineValueText + if err := decoder243.Decode(&h243); err == nil { + t.Value = h243 + return nil + } + decoder244 := json.NewDecoder(bytes.NewReader(x)) + decoder244.DisallowUnknownFields() + var h244 InlineValueVariableLookup + if err := decoder244.Decode(&h244); err == nil { + t.Value = h244 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [InlineValueEvaluatableExpression InlineValueText InlineValueVariableLookup]"} +} + +func (t Or_LSPAny) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case LSPArray: + return json.Marshal(x) + case LSPObject: + return json.Marshal(x) + case bool: + return json.Marshal(x) + case float64: + return json.Marshal(x) + case int32: + return json.Marshal(x) + case string: + return json.Marshal(x) + case uint32: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [LSPArray LSPObject bool float64 int32 string uint32]", t) +} + +func (t *Or_LSPAny) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder228 := json.NewDecoder(bytes.NewReader(x)) + decoder228.DisallowUnknownFields() + var boolVal bool + if err := decoder228.Decode(&boolVal); err == nil { + t.Value = boolVal + return nil + } + decoder229 := json.NewDecoder(bytes.NewReader(x)) + decoder229.DisallowUnknownFields() + var float64Val float64 + if err := decoder229.Decode(&float64Val); err == nil { + t.Value = float64Val + return nil + } + decoder230 := json.NewDecoder(bytes.NewReader(x)) + decoder230.DisallowUnknownFields() + var int32Val int32 + if err := decoder230.Decode(&int32Val); err == nil { + t.Value = int32Val + return nil + } + decoder231 := json.NewDecoder(bytes.NewReader(x)) + decoder231.DisallowUnknownFields() + var stringVal string + if err := decoder231.Decode(&stringVal); err == nil { + t.Value = stringVal + return nil + } + decoder232 := json.NewDecoder(bytes.NewReader(x)) + decoder232.DisallowUnknownFields() + var uint32Val uint32 + if err := decoder232.Decode(&uint32Val); err == nil { + t.Value = uint32Val + return nil + } + decoder233 := json.NewDecoder(bytes.NewReader(x)) + decoder233.DisallowUnknownFields() + var h233 LSPArray + if err := decoder233.Decode(&h233); err == nil { + t.Value = h233 + return nil + } + decoder234 := json.NewDecoder(bytes.NewReader(x)) + decoder234.DisallowUnknownFields() + var h234 LSPObject + if err := decoder234.Decode(&h234); err == nil { + t.Value = h234 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [LSPArray LSPObject bool float64 int32 string uint32]"} +} + +func (t Or_MarkedString) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case MarkedStringWithLanguage: + return json.Marshal(x) + case string: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [MarkedStringWithLanguage string]", t) +} + +func (t *Or_MarkedString) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder266 := json.NewDecoder(bytes.NewReader(x)) + decoder266.DisallowUnknownFields() + var stringVal string + if err := decoder266.Decode(&stringVal); err == nil { + t.Value = stringVal + return nil + } + decoder267 := json.NewDecoder(bytes.NewReader(x)) + decoder267.DisallowUnknownFields() + var h267 MarkedStringWithLanguage + if err := decoder267.Decode(&h267); err == nil { + t.Value = h267 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [MarkedStringWithLanguage string]"} +} + +func (t Or_NotebookCellTextDocumentFilter_notebook) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case NotebookDocumentFilter: + return json.Marshal(x) + case string: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [NotebookDocumentFilter string]", t) +} + +func (t *Or_NotebookCellTextDocumentFilter_notebook) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder208 := json.NewDecoder(bytes.NewReader(x)) + decoder208.DisallowUnknownFields() + var stringVal string + if err := decoder208.Decode(&stringVal); err == nil { + t.Value = stringVal + return nil + } + decoder209 := json.NewDecoder(bytes.NewReader(x)) + decoder209.DisallowUnknownFields() + var h209 NotebookDocumentFilter + if err := decoder209.Decode(&h209); err == nil { + t.Value = h209 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [NotebookDocumentFilter string]"} +} + +func (t Or_NotebookDocumentFilter) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case NotebookDocumentFilterNotebookType: + return json.Marshal(x) + case NotebookDocumentFilterPattern: + return json.Marshal(x) + case NotebookDocumentFilterScheme: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [NotebookDocumentFilterNotebookType NotebookDocumentFilterPattern NotebookDocumentFilterScheme]", t) +} + +func (t *Or_NotebookDocumentFilter) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder285 := json.NewDecoder(bytes.NewReader(x)) + decoder285.DisallowUnknownFields() + var h285 NotebookDocumentFilterNotebookType + if err := decoder285.Decode(&h285); err == nil { + t.Value = h285 + return nil + } + decoder286 := json.NewDecoder(bytes.NewReader(x)) + decoder286.DisallowUnknownFields() + var h286 NotebookDocumentFilterPattern + if err := decoder286.Decode(&h286); err == nil { + t.Value = h286 + return nil + } + decoder287 := json.NewDecoder(bytes.NewReader(x)) + decoder287.DisallowUnknownFields() + var h287 NotebookDocumentFilterScheme + if err := decoder287.Decode(&h287); err == nil { + t.Value = h287 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [NotebookDocumentFilterNotebookType NotebookDocumentFilterPattern NotebookDocumentFilterScheme]"} +} + +func (t Or_NotebookDocumentFilterWithCells_notebook) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case NotebookDocumentFilter: + return json.Marshal(x) + case string: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [NotebookDocumentFilter string]", t) +} + +func (t *Or_NotebookDocumentFilterWithCells_notebook) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder192 := json.NewDecoder(bytes.NewReader(x)) + decoder192.DisallowUnknownFields() + var stringVal string + if err := decoder192.Decode(&stringVal); err == nil { + t.Value = stringVal + return nil + } + decoder193 := json.NewDecoder(bytes.NewReader(x)) + decoder193.DisallowUnknownFields() + var h193 NotebookDocumentFilter + if err := decoder193.Decode(&h193); err == nil { + t.Value = h193 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [NotebookDocumentFilter string]"} +} + +func (t Or_NotebookDocumentFilterWithNotebook_notebook) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case NotebookDocumentFilter: + return json.Marshal(x) + case string: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [NotebookDocumentFilter string]", t) +} + +func (t *Or_NotebookDocumentFilterWithNotebook_notebook) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder189 := json.NewDecoder(bytes.NewReader(x)) + decoder189.DisallowUnknownFields() + var stringVal string + if err := decoder189.Decode(&stringVal); err == nil { + t.Value = stringVal + return nil + } + decoder190 := json.NewDecoder(bytes.NewReader(x)) + decoder190.DisallowUnknownFields() + var h190 NotebookDocumentFilter + if err := decoder190.Decode(&h190); err == nil { + t.Value = h190 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [NotebookDocumentFilter string]"} +} + +func (t Or_NotebookDocumentSyncOptions_notebookSelector_Elem) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case NotebookDocumentFilterWithCells: + return json.Marshal(x) + case NotebookDocumentFilterWithNotebook: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [NotebookDocumentFilterWithCells NotebookDocumentFilterWithNotebook]", t) +} + +func (t *Or_NotebookDocumentSyncOptions_notebookSelector_Elem) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder68 := json.NewDecoder(bytes.NewReader(x)) + decoder68.DisallowUnknownFields() + var h68 NotebookDocumentFilterWithCells + if err := decoder68.Decode(&h68); err == nil { + t.Value = h68 + return nil + } + decoder69 := json.NewDecoder(bytes.NewReader(x)) + decoder69.DisallowUnknownFields() + var h69 NotebookDocumentFilterWithNotebook + if err := decoder69.Decode(&h69); err == nil { + t.Value = h69 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [NotebookDocumentFilterWithCells NotebookDocumentFilterWithNotebook]"} +} + +func (t Or_ParameterInformation_documentation) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case MarkupContent: + return json.Marshal(x) + case string: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [MarkupContent string]", t) +} + +func (t *Or_ParameterInformation_documentation) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder205 := json.NewDecoder(bytes.NewReader(x)) + decoder205.DisallowUnknownFields() + var stringVal string + if err := decoder205.Decode(&stringVal); err == nil { + t.Value = stringVal + return nil + } + decoder206 := json.NewDecoder(bytes.NewReader(x)) + decoder206.DisallowUnknownFields() + var h206 MarkupContent + if err := decoder206.Decode(&h206); err == nil { + t.Value = h206 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [MarkupContent string]"} +} + +func (t Or_ParameterInformation_label) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case Tuple_ParameterInformation_label_Item1: + return json.Marshal(x) + case string: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [Tuple_ParameterInformation_label_Item1 string]", t) +} + +func (t *Or_ParameterInformation_label) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder202 := json.NewDecoder(bytes.NewReader(x)) + decoder202.DisallowUnknownFields() + var stringVal string + if err := decoder202.Decode(&stringVal); err == nil { + t.Value = stringVal + return nil + } + decoder203 := json.NewDecoder(bytes.NewReader(x)) + decoder203.DisallowUnknownFields() + var h203 Tuple_ParameterInformation_label_Item1 + if err := decoder203.Decode(&h203); err == nil { + t.Value = h203 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [Tuple_ParameterInformation_label_Item1 string]"} +} + +func (t Or_PrepareRenameResult) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case PrepareRenameDefaultBehavior: + return json.Marshal(x) + case PrepareRenamePlaceholder: + return json.Marshal(x) + case Range: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [PrepareRenameDefaultBehavior PrepareRenamePlaceholder Range]", t) +} + +func (t *Or_PrepareRenameResult) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder252 := json.NewDecoder(bytes.NewReader(x)) + decoder252.DisallowUnknownFields() + var h252 PrepareRenameDefaultBehavior + if err := decoder252.Decode(&h252); err == nil { + t.Value = h252 + return nil + } + decoder253 := json.NewDecoder(bytes.NewReader(x)) + decoder253.DisallowUnknownFields() + var h253 PrepareRenamePlaceholder + if err := decoder253.Decode(&h253); err == nil { + t.Value = h253 + return nil + } + decoder254 := json.NewDecoder(bytes.NewReader(x)) + decoder254.DisallowUnknownFields() + var h254 Range + if err := decoder254.Decode(&h254); err == nil { + t.Value = h254 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [PrepareRenameDefaultBehavior PrepareRenamePlaceholder Range]"} +} + +func (t Or_ProgressToken) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case int32: + return json.Marshal(x) + case string: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [int32 string]", t) +} + +func (t *Or_ProgressToken) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder255 := json.NewDecoder(bytes.NewReader(x)) + decoder255.DisallowUnknownFields() + var int32Val int32 + if err := decoder255.Decode(&int32Val); err == nil { + t.Value = int32Val + return nil + } + decoder256 := json.NewDecoder(bytes.NewReader(x)) + decoder256.DisallowUnknownFields() + var stringVal string + if err := decoder256.Decode(&stringVal); err == nil { + t.Value = stringVal + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [int32 string]"} +} + +func (t Or_RelatedFullDocumentDiagnosticReport_relatedDocuments_Value) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case FullDocumentDiagnosticReport: + return json.Marshal(x) + case UnchangedDocumentDiagnosticReport: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [FullDocumentDiagnosticReport UnchangedDocumentDiagnosticReport]", t) +} + +func (t *Or_RelatedFullDocumentDiagnosticReport_relatedDocuments_Value) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder60 := json.NewDecoder(bytes.NewReader(x)) + decoder60.DisallowUnknownFields() + var h60 FullDocumentDiagnosticReport + if err := decoder60.Decode(&h60); err == nil { + t.Value = h60 + return nil + } + decoder61 := json.NewDecoder(bytes.NewReader(x)) + decoder61.DisallowUnknownFields() + var h61 UnchangedDocumentDiagnosticReport + if err := decoder61.Decode(&h61); err == nil { + t.Value = h61 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [FullDocumentDiagnosticReport UnchangedDocumentDiagnosticReport]"} +} + +func (t Or_RelatedUnchangedDocumentDiagnosticReport_relatedDocuments_Value) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case FullDocumentDiagnosticReport: + return json.Marshal(x) + case UnchangedDocumentDiagnosticReport: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [FullDocumentDiagnosticReport UnchangedDocumentDiagnosticReport]", t) +} + +func (t *Or_RelatedUnchangedDocumentDiagnosticReport_relatedDocuments_Value) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder64 := json.NewDecoder(bytes.NewReader(x)) + decoder64.DisallowUnknownFields() + var h64 FullDocumentDiagnosticReport + if err := decoder64.Decode(&h64); err == nil { + t.Value = h64 + return nil + } + decoder65 := json.NewDecoder(bytes.NewReader(x)) + decoder65.DisallowUnknownFields() + var h65 UnchangedDocumentDiagnosticReport + if err := decoder65.Decode(&h65); err == nil { + t.Value = h65 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [FullDocumentDiagnosticReport UnchangedDocumentDiagnosticReport]"} +} + +func (t Or_RelativePattern_baseUri) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case URI: + return json.Marshal(x) + case WorkspaceFolder: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [URI WorkspaceFolder]", t) +} + +func (t *Or_RelativePattern_baseUri) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder214 := json.NewDecoder(bytes.NewReader(x)) + decoder214.DisallowUnknownFields() + var h214 URI + if err := decoder214.Decode(&h214); err == nil { + t.Value = h214 + return nil + } + decoder215 := json.NewDecoder(bytes.NewReader(x)) + decoder215.DisallowUnknownFields() + var h215 WorkspaceFolder + if err := decoder215.Decode(&h215); err == nil { + t.Value = h215 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [URI WorkspaceFolder]"} +} + +func (t Or_Result_textDocument_codeAction_Item0_Elem) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case CodeAction: + return json.Marshal(x) + case Command: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [CodeAction Command]", t) +} + +func (t *Or_Result_textDocument_codeAction_Item0_Elem) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder322 := json.NewDecoder(bytes.NewReader(x)) + decoder322.DisallowUnknownFields() + var h322 CodeAction + if err := decoder322.Decode(&h322); err == nil { + t.Value = h322 + return nil + } + decoder323 := json.NewDecoder(bytes.NewReader(x)) + decoder323.DisallowUnknownFields() + var h323 Command + if err := decoder323.Decode(&h323); err == nil { + t.Value = h323 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [CodeAction Command]"} +} + +func (t Or_Result_textDocument_completion) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case CompletionList: + return json.Marshal(x) + case []CompletionItem: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [CompletionList []CompletionItem]", t) +} + +func (t *Or_Result_textDocument_completion) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder310 := json.NewDecoder(bytes.NewReader(x)) + decoder310.DisallowUnknownFields() + var h310 CompletionList + if err := decoder310.Decode(&h310); err == nil { + t.Value = h310 + return nil + } + decoder311 := json.NewDecoder(bytes.NewReader(x)) + decoder311.DisallowUnknownFields() + var h311 []CompletionItem + if err := decoder311.Decode(&h311); err == nil { + t.Value = h311 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [CompletionList []CompletionItem]"} +} + +func (t Or_Result_textDocument_declaration) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case Declaration: + return json.Marshal(x) + case []DeclarationLink: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [Declaration []DeclarationLink]", t) +} + +func (t *Or_Result_textDocument_declaration) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder298 := json.NewDecoder(bytes.NewReader(x)) + decoder298.DisallowUnknownFields() + var h298 Declaration + if err := decoder298.Decode(&h298); err == nil { + t.Value = h298 + return nil + } + decoder299 := json.NewDecoder(bytes.NewReader(x)) + decoder299.DisallowUnknownFields() + var h299 []DeclarationLink + if err := decoder299.Decode(&h299); err == nil { + t.Value = h299 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [Declaration []DeclarationLink]"} +} + +func (t Or_Result_textDocument_definition) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case Definition: + return json.Marshal(x) + case []DefinitionLink: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [Definition []DefinitionLink]", t) +} + +func (t *Or_Result_textDocument_definition) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder314 := json.NewDecoder(bytes.NewReader(x)) + decoder314.DisallowUnknownFields() + var h314 Definition + if err := decoder314.Decode(&h314); err == nil { + t.Value = h314 + return nil + } + decoder315 := json.NewDecoder(bytes.NewReader(x)) + decoder315.DisallowUnknownFields() + var h315 []DefinitionLink + if err := decoder315.Decode(&h315); err == nil { + t.Value = h315 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [Definition []DefinitionLink]"} +} + +func (t Or_Result_textDocument_documentSymbol) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case []DocumentSymbol: + return json.Marshal(x) + case []SymbolInformation: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [[]DocumentSymbol []SymbolInformation]", t) +} + +func (t *Or_Result_textDocument_documentSymbol) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder318 := json.NewDecoder(bytes.NewReader(x)) + decoder318.DisallowUnknownFields() + var h318 []DocumentSymbol + if err := decoder318.Decode(&h318); err == nil { + t.Value = h318 + return nil + } + decoder319 := json.NewDecoder(bytes.NewReader(x)) + decoder319.DisallowUnknownFields() + var h319 []SymbolInformation + if err := decoder319.Decode(&h319); err == nil { + t.Value = h319 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [[]DocumentSymbol []SymbolInformation]"} +} + +func (t Or_Result_textDocument_implementation) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case Definition: + return json.Marshal(x) + case []DefinitionLink: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [Definition []DefinitionLink]", t) +} + +func (t *Or_Result_textDocument_implementation) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder290 := json.NewDecoder(bytes.NewReader(x)) + decoder290.DisallowUnknownFields() + var h290 Definition + if err := decoder290.Decode(&h290); err == nil { + t.Value = h290 + return nil + } + decoder291 := json.NewDecoder(bytes.NewReader(x)) + decoder291.DisallowUnknownFields() + var h291 []DefinitionLink + if err := decoder291.Decode(&h291); err == nil { + t.Value = h291 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [Definition []DefinitionLink]"} +} + +func (t Or_Result_textDocument_inlineCompletion) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case InlineCompletionList: + return json.Marshal(x) + case []InlineCompletionItem: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [InlineCompletionList []InlineCompletionItem]", t) +} + +func (t *Or_Result_textDocument_inlineCompletion) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder306 := json.NewDecoder(bytes.NewReader(x)) + decoder306.DisallowUnknownFields() + var h306 InlineCompletionList + if err := decoder306.Decode(&h306); err == nil { + t.Value = h306 + return nil + } + decoder307 := json.NewDecoder(bytes.NewReader(x)) + decoder307.DisallowUnknownFields() + var h307 []InlineCompletionItem + if err := decoder307.Decode(&h307); err == nil { + t.Value = h307 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [InlineCompletionList []InlineCompletionItem]"} +} + +func (t Or_Result_textDocument_semanticTokens_full_delta) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case SemanticTokens: + return json.Marshal(x) + case SemanticTokensDelta: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [SemanticTokens SemanticTokensDelta]", t) +} + +func (t *Or_Result_textDocument_semanticTokens_full_delta) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder302 := json.NewDecoder(bytes.NewReader(x)) + decoder302.DisallowUnknownFields() + var h302 SemanticTokens + if err := decoder302.Decode(&h302); err == nil { + t.Value = h302 + return nil + } + decoder303 := json.NewDecoder(bytes.NewReader(x)) + decoder303.DisallowUnknownFields() + var h303 SemanticTokensDelta + if err := decoder303.Decode(&h303); err == nil { + t.Value = h303 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [SemanticTokens SemanticTokensDelta]"} +} + +func (t Or_Result_textDocument_typeDefinition) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case Definition: + return json.Marshal(x) + case []DefinitionLink: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [Definition []DefinitionLink]", t) +} + +func (t *Or_Result_textDocument_typeDefinition) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder294 := json.NewDecoder(bytes.NewReader(x)) + decoder294.DisallowUnknownFields() + var h294 Definition + if err := decoder294.Decode(&h294); err == nil { + t.Value = h294 + return nil + } + decoder295 := json.NewDecoder(bytes.NewReader(x)) + decoder295.DisallowUnknownFields() + var h295 []DefinitionLink + if err := decoder295.Decode(&h295); err == nil { + t.Value = h295 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [Definition []DefinitionLink]"} +} + +func (t Or_Result_workspace_symbol) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case []SymbolInformation: + return json.Marshal(x) + case []WorkspaceSymbol: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [[]SymbolInformation []WorkspaceSymbol]", t) +} + +func (t *Or_Result_workspace_symbol) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder326 := json.NewDecoder(bytes.NewReader(x)) + decoder326.DisallowUnknownFields() + var h326 []SymbolInformation + if err := decoder326.Decode(&h326); err == nil { + t.Value = h326 + return nil + } + decoder327 := json.NewDecoder(bytes.NewReader(x)) + decoder327.DisallowUnknownFields() + var h327 []WorkspaceSymbol + if err := decoder327.Decode(&h327); err == nil { + t.Value = h327 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [[]SymbolInformation []WorkspaceSymbol]"} +} + +func (t Or_SemanticTokensOptions_full) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case SemanticTokensFullDelta: + return json.Marshal(x) + case bool: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [SemanticTokensFullDelta bool]", t) +} + +func (t *Or_SemanticTokensOptions_full) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder47 := json.NewDecoder(bytes.NewReader(x)) + decoder47.DisallowUnknownFields() + var boolVal bool + if err := decoder47.Decode(&boolVal); err == nil { + t.Value = boolVal + return nil + } + decoder48 := json.NewDecoder(bytes.NewReader(x)) + decoder48.DisallowUnknownFields() + var h48 SemanticTokensFullDelta + if err := decoder48.Decode(&h48); err == nil { + t.Value = h48 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [SemanticTokensFullDelta bool]"} +} + +func (t Or_SemanticTokensOptions_range) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case Lit_SemanticTokensOptions_range_Item1: + return json.Marshal(x) + case bool: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [Lit_SemanticTokensOptions_range_Item1 bool]", t) +} + +func (t *Or_SemanticTokensOptions_range) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder44 := json.NewDecoder(bytes.NewReader(x)) + decoder44.DisallowUnknownFields() + var boolVal bool + if err := decoder44.Decode(&boolVal); err == nil { + t.Value = boolVal + return nil + } + decoder45 := json.NewDecoder(bytes.NewReader(x)) + decoder45.DisallowUnknownFields() + var h45 Lit_SemanticTokensOptions_range_Item1 + if err := decoder45.Decode(&h45); err == nil { + t.Value = h45 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [Lit_SemanticTokensOptions_range_Item1 bool]"} +} + +func (t Or_ServerCapabilities_callHierarchyProvider) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case CallHierarchyOptions: + return json.Marshal(x) + case CallHierarchyRegistrationOptions: + return json.Marshal(x) + case bool: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [CallHierarchyOptions CallHierarchyRegistrationOptions bool]", t) +} + +func (t *Or_ServerCapabilities_callHierarchyProvider) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder140 := json.NewDecoder(bytes.NewReader(x)) + decoder140.DisallowUnknownFields() + var boolVal bool + if err := decoder140.Decode(&boolVal); err == nil { + t.Value = boolVal + return nil + } + decoder141 := json.NewDecoder(bytes.NewReader(x)) + decoder141.DisallowUnknownFields() + var h141 CallHierarchyOptions + if err := decoder141.Decode(&h141); err == nil { + t.Value = h141 + return nil + } + decoder142 := json.NewDecoder(bytes.NewReader(x)) + decoder142.DisallowUnknownFields() + var h142 CallHierarchyRegistrationOptions + if err := decoder142.Decode(&h142); err == nil { + t.Value = h142 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [CallHierarchyOptions CallHierarchyRegistrationOptions bool]"} +} + +func (t Or_ServerCapabilities_codeActionProvider) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case CodeActionOptions: + return json.Marshal(x) + case bool: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [CodeActionOptions bool]", t) +} + +func (t *Or_ServerCapabilities_codeActionProvider) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder109 := json.NewDecoder(bytes.NewReader(x)) + decoder109.DisallowUnknownFields() + var boolVal bool + if err := decoder109.Decode(&boolVal); err == nil { + t.Value = boolVal + return nil + } + decoder110 := json.NewDecoder(bytes.NewReader(x)) + decoder110.DisallowUnknownFields() + var h110 CodeActionOptions + if err := decoder110.Decode(&h110); err == nil { + t.Value = h110 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [CodeActionOptions bool]"} +} + +func (t Or_ServerCapabilities_colorProvider) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case DocumentColorOptions: + return json.Marshal(x) + case DocumentColorRegistrationOptions: + return json.Marshal(x) + case bool: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [DocumentColorOptions DocumentColorRegistrationOptions bool]", t) +} + +func (t *Or_ServerCapabilities_colorProvider) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder113 := json.NewDecoder(bytes.NewReader(x)) + decoder113.DisallowUnknownFields() + var boolVal bool + if err := decoder113.Decode(&boolVal); err == nil { + t.Value = boolVal + return nil + } + decoder114 := json.NewDecoder(bytes.NewReader(x)) + decoder114.DisallowUnknownFields() + var h114 DocumentColorOptions + if err := decoder114.Decode(&h114); err == nil { + t.Value = h114 + return nil + } + decoder115 := json.NewDecoder(bytes.NewReader(x)) + decoder115.DisallowUnknownFields() + var h115 DocumentColorRegistrationOptions + if err := decoder115.Decode(&h115); err == nil { + t.Value = h115 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [DocumentColorOptions DocumentColorRegistrationOptions bool]"} +} + +func (t Or_ServerCapabilities_declarationProvider) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case DeclarationOptions: + return json.Marshal(x) + case DeclarationRegistrationOptions: + return json.Marshal(x) + case bool: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [DeclarationOptions DeclarationRegistrationOptions bool]", t) +} + +func (t *Or_ServerCapabilities_declarationProvider) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder83 := json.NewDecoder(bytes.NewReader(x)) + decoder83.DisallowUnknownFields() + var boolVal bool + if err := decoder83.Decode(&boolVal); err == nil { + t.Value = boolVal + return nil + } + decoder84 := json.NewDecoder(bytes.NewReader(x)) + decoder84.DisallowUnknownFields() + var h84 DeclarationOptions + if err := decoder84.Decode(&h84); err == nil { + t.Value = h84 + return nil + } + decoder85 := json.NewDecoder(bytes.NewReader(x)) + decoder85.DisallowUnknownFields() + var h85 DeclarationRegistrationOptions + if err := decoder85.Decode(&h85); err == nil { + t.Value = h85 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [DeclarationOptions DeclarationRegistrationOptions bool]"} +} + +func (t Or_ServerCapabilities_definitionProvider) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case DefinitionOptions: + return json.Marshal(x) + case bool: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [DefinitionOptions bool]", t) +} + +func (t *Or_ServerCapabilities_definitionProvider) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder87 := json.NewDecoder(bytes.NewReader(x)) + decoder87.DisallowUnknownFields() + var boolVal bool + if err := decoder87.Decode(&boolVal); err == nil { + t.Value = boolVal + return nil + } + decoder88 := json.NewDecoder(bytes.NewReader(x)) + decoder88.DisallowUnknownFields() + var h88 DefinitionOptions + if err := decoder88.Decode(&h88); err == nil { + t.Value = h88 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [DefinitionOptions bool]"} +} + +func (t Or_ServerCapabilities_diagnosticProvider) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case DiagnosticOptions: + return json.Marshal(x) + case DiagnosticRegistrationOptions: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [DiagnosticOptions DiagnosticRegistrationOptions]", t) +} + +func (t *Or_ServerCapabilities_diagnosticProvider) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder174 := json.NewDecoder(bytes.NewReader(x)) + decoder174.DisallowUnknownFields() + var h174 DiagnosticOptions + if err := decoder174.Decode(&h174); err == nil { + t.Value = h174 + return nil + } + decoder175 := json.NewDecoder(bytes.NewReader(x)) + decoder175.DisallowUnknownFields() + var h175 DiagnosticRegistrationOptions + if err := decoder175.Decode(&h175); err == nil { + t.Value = h175 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [DiagnosticOptions DiagnosticRegistrationOptions]"} +} + +func (t Or_ServerCapabilities_documentFormattingProvider) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case DocumentFormattingOptions: + return json.Marshal(x) + case bool: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [DocumentFormattingOptions bool]", t) +} + +func (t *Or_ServerCapabilities_documentFormattingProvider) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder120 := json.NewDecoder(bytes.NewReader(x)) + decoder120.DisallowUnknownFields() + var boolVal bool + if err := decoder120.Decode(&boolVal); err == nil { + t.Value = boolVal + return nil + } + decoder121 := json.NewDecoder(bytes.NewReader(x)) + decoder121.DisallowUnknownFields() + var h121 DocumentFormattingOptions + if err := decoder121.Decode(&h121); err == nil { + t.Value = h121 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [DocumentFormattingOptions bool]"} +} + +func (t Or_ServerCapabilities_documentHighlightProvider) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case DocumentHighlightOptions: + return json.Marshal(x) + case bool: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [DocumentHighlightOptions bool]", t) +} + +func (t *Or_ServerCapabilities_documentHighlightProvider) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder103 := json.NewDecoder(bytes.NewReader(x)) + decoder103.DisallowUnknownFields() + var boolVal bool + if err := decoder103.Decode(&boolVal); err == nil { + t.Value = boolVal + return nil + } + decoder104 := json.NewDecoder(bytes.NewReader(x)) + decoder104.DisallowUnknownFields() + var h104 DocumentHighlightOptions + if err := decoder104.Decode(&h104); err == nil { + t.Value = h104 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [DocumentHighlightOptions bool]"} +} + +func (t Or_ServerCapabilities_documentRangeFormattingProvider) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case DocumentRangeFormattingOptions: + return json.Marshal(x) + case bool: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [DocumentRangeFormattingOptions bool]", t) +} + +func (t *Or_ServerCapabilities_documentRangeFormattingProvider) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder123 := json.NewDecoder(bytes.NewReader(x)) + decoder123.DisallowUnknownFields() + var boolVal bool + if err := decoder123.Decode(&boolVal); err == nil { + t.Value = boolVal + return nil + } + decoder124 := json.NewDecoder(bytes.NewReader(x)) + decoder124.DisallowUnknownFields() + var h124 DocumentRangeFormattingOptions + if err := decoder124.Decode(&h124); err == nil { + t.Value = h124 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [DocumentRangeFormattingOptions bool]"} +} + +func (t Or_ServerCapabilities_documentSymbolProvider) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case DocumentSymbolOptions: + return json.Marshal(x) + case bool: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [DocumentSymbolOptions bool]", t) +} + +func (t *Or_ServerCapabilities_documentSymbolProvider) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder106 := json.NewDecoder(bytes.NewReader(x)) + decoder106.DisallowUnknownFields() + var boolVal bool + if err := decoder106.Decode(&boolVal); err == nil { + t.Value = boolVal + return nil + } + decoder107 := json.NewDecoder(bytes.NewReader(x)) + decoder107.DisallowUnknownFields() + var h107 DocumentSymbolOptions + if err := decoder107.Decode(&h107); err == nil { + t.Value = h107 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [DocumentSymbolOptions bool]"} +} + +func (t Or_ServerCapabilities_foldingRangeProvider) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case FoldingRangeOptions: + return json.Marshal(x) + case FoldingRangeRegistrationOptions: + return json.Marshal(x) + case bool: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [FoldingRangeOptions FoldingRangeRegistrationOptions bool]", t) +} + +func (t *Or_ServerCapabilities_foldingRangeProvider) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder130 := json.NewDecoder(bytes.NewReader(x)) + decoder130.DisallowUnknownFields() + var boolVal bool + if err := decoder130.Decode(&boolVal); err == nil { + t.Value = boolVal + return nil + } + decoder131 := json.NewDecoder(bytes.NewReader(x)) + decoder131.DisallowUnknownFields() + var h131 FoldingRangeOptions + if err := decoder131.Decode(&h131); err == nil { + t.Value = h131 + return nil + } + decoder132 := json.NewDecoder(bytes.NewReader(x)) + decoder132.DisallowUnknownFields() + var h132 FoldingRangeRegistrationOptions + if err := decoder132.Decode(&h132); err == nil { + t.Value = h132 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [FoldingRangeOptions FoldingRangeRegistrationOptions bool]"} +} + +func (t Or_ServerCapabilities_hoverProvider) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case HoverOptions: + return json.Marshal(x) + case bool: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [HoverOptions bool]", t) +} + +func (t *Or_ServerCapabilities_hoverProvider) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder79 := json.NewDecoder(bytes.NewReader(x)) + decoder79.DisallowUnknownFields() + var boolVal bool + if err := decoder79.Decode(&boolVal); err == nil { + t.Value = boolVal + return nil + } + decoder80 := json.NewDecoder(bytes.NewReader(x)) + decoder80.DisallowUnknownFields() + var h80 HoverOptions + if err := decoder80.Decode(&h80); err == nil { + t.Value = h80 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [HoverOptions bool]"} +} + +func (t Or_ServerCapabilities_implementationProvider) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case ImplementationOptions: + return json.Marshal(x) + case ImplementationRegistrationOptions: + return json.Marshal(x) + case bool: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [ImplementationOptions ImplementationRegistrationOptions bool]", t) +} + +func (t *Or_ServerCapabilities_implementationProvider) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder96 := json.NewDecoder(bytes.NewReader(x)) + decoder96.DisallowUnknownFields() + var boolVal bool + if err := decoder96.Decode(&boolVal); err == nil { + t.Value = boolVal + return nil + } + decoder97 := json.NewDecoder(bytes.NewReader(x)) + decoder97.DisallowUnknownFields() + var h97 ImplementationOptions + if err := decoder97.Decode(&h97); err == nil { + t.Value = h97 + return nil + } + decoder98 := json.NewDecoder(bytes.NewReader(x)) + decoder98.DisallowUnknownFields() + var h98 ImplementationRegistrationOptions + if err := decoder98.Decode(&h98); err == nil { + t.Value = h98 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [ImplementationOptions ImplementationRegistrationOptions bool]"} +} + +func (t Or_ServerCapabilities_inlayHintProvider) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case InlayHintOptions: + return json.Marshal(x) + case InlayHintRegistrationOptions: + return json.Marshal(x) + case bool: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [InlayHintOptions InlayHintRegistrationOptions bool]", t) +} + +func (t *Or_ServerCapabilities_inlayHintProvider) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder169 := json.NewDecoder(bytes.NewReader(x)) + decoder169.DisallowUnknownFields() + var boolVal bool + if err := decoder169.Decode(&boolVal); err == nil { + t.Value = boolVal + return nil + } + decoder170 := json.NewDecoder(bytes.NewReader(x)) + decoder170.DisallowUnknownFields() + var h170 InlayHintOptions + if err := decoder170.Decode(&h170); err == nil { + t.Value = h170 + return nil + } + decoder171 := json.NewDecoder(bytes.NewReader(x)) + decoder171.DisallowUnknownFields() + var h171 InlayHintRegistrationOptions + if err := decoder171.Decode(&h171); err == nil { + t.Value = h171 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [InlayHintOptions InlayHintRegistrationOptions bool]"} +} + +func (t Or_ServerCapabilities_inlineCompletionProvider) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case InlineCompletionOptions: + return json.Marshal(x) + case bool: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [InlineCompletionOptions bool]", t) +} + +func (t *Or_ServerCapabilities_inlineCompletionProvider) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder177 := json.NewDecoder(bytes.NewReader(x)) + decoder177.DisallowUnknownFields() + var boolVal bool + if err := decoder177.Decode(&boolVal); err == nil { + t.Value = boolVal + return nil + } + decoder178 := json.NewDecoder(bytes.NewReader(x)) + decoder178.DisallowUnknownFields() + var h178 InlineCompletionOptions + if err := decoder178.Decode(&h178); err == nil { + t.Value = h178 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [InlineCompletionOptions bool]"} +} + +func (t Or_ServerCapabilities_inlineValueProvider) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case InlineValueOptions: + return json.Marshal(x) + case InlineValueRegistrationOptions: + return json.Marshal(x) + case bool: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [InlineValueOptions InlineValueRegistrationOptions bool]", t) +} + +func (t *Or_ServerCapabilities_inlineValueProvider) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder164 := json.NewDecoder(bytes.NewReader(x)) + decoder164.DisallowUnknownFields() + var boolVal bool + if err := decoder164.Decode(&boolVal); err == nil { + t.Value = boolVal + return nil + } + decoder165 := json.NewDecoder(bytes.NewReader(x)) + decoder165.DisallowUnknownFields() + var h165 InlineValueOptions + if err := decoder165.Decode(&h165); err == nil { + t.Value = h165 + return nil + } + decoder166 := json.NewDecoder(bytes.NewReader(x)) + decoder166.DisallowUnknownFields() + var h166 InlineValueRegistrationOptions + if err := decoder166.Decode(&h166); err == nil { + t.Value = h166 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [InlineValueOptions InlineValueRegistrationOptions bool]"} +} + +func (t Or_ServerCapabilities_linkedEditingRangeProvider) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case LinkedEditingRangeOptions: + return json.Marshal(x) + case LinkedEditingRangeRegistrationOptions: + return json.Marshal(x) + case bool: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [LinkedEditingRangeOptions LinkedEditingRangeRegistrationOptions bool]", t) +} + +func (t *Or_ServerCapabilities_linkedEditingRangeProvider) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder145 := json.NewDecoder(bytes.NewReader(x)) + decoder145.DisallowUnknownFields() + var boolVal bool + if err := decoder145.Decode(&boolVal); err == nil { + t.Value = boolVal + return nil + } + decoder146 := json.NewDecoder(bytes.NewReader(x)) + decoder146.DisallowUnknownFields() + var h146 LinkedEditingRangeOptions + if err := decoder146.Decode(&h146); err == nil { + t.Value = h146 + return nil + } + decoder147 := json.NewDecoder(bytes.NewReader(x)) + decoder147.DisallowUnknownFields() + var h147 LinkedEditingRangeRegistrationOptions + if err := decoder147.Decode(&h147); err == nil { + t.Value = h147 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [LinkedEditingRangeOptions LinkedEditingRangeRegistrationOptions bool]"} +} + +func (t Or_ServerCapabilities_monikerProvider) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case MonikerOptions: + return json.Marshal(x) + case MonikerRegistrationOptions: + return json.Marshal(x) + case bool: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [MonikerOptions MonikerRegistrationOptions bool]", t) +} + +func (t *Or_ServerCapabilities_monikerProvider) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder154 := json.NewDecoder(bytes.NewReader(x)) + decoder154.DisallowUnknownFields() + var boolVal bool + if err := decoder154.Decode(&boolVal); err == nil { + t.Value = boolVal + return nil + } + decoder155 := json.NewDecoder(bytes.NewReader(x)) + decoder155.DisallowUnknownFields() + var h155 MonikerOptions + if err := decoder155.Decode(&h155); err == nil { + t.Value = h155 + return nil + } + decoder156 := json.NewDecoder(bytes.NewReader(x)) + decoder156.DisallowUnknownFields() + var h156 MonikerRegistrationOptions + if err := decoder156.Decode(&h156); err == nil { + t.Value = h156 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [MonikerOptions MonikerRegistrationOptions bool]"} +} + +func (t Or_ServerCapabilities_notebookDocumentSync) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case NotebookDocumentSyncOptions: + return json.Marshal(x) + case NotebookDocumentSyncRegistrationOptions: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [NotebookDocumentSyncOptions NotebookDocumentSyncRegistrationOptions]", t) +} + +func (t *Or_ServerCapabilities_notebookDocumentSync) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder76 := json.NewDecoder(bytes.NewReader(x)) + decoder76.DisallowUnknownFields() + var h76 NotebookDocumentSyncOptions + if err := decoder76.Decode(&h76); err == nil { + t.Value = h76 + return nil + } + decoder77 := json.NewDecoder(bytes.NewReader(x)) + decoder77.DisallowUnknownFields() + var h77 NotebookDocumentSyncRegistrationOptions + if err := decoder77.Decode(&h77); err == nil { + t.Value = h77 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [NotebookDocumentSyncOptions NotebookDocumentSyncRegistrationOptions]"} +} + +func (t Or_ServerCapabilities_referencesProvider) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case ReferenceOptions: + return json.Marshal(x) + case bool: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [ReferenceOptions bool]", t) +} + +func (t *Or_ServerCapabilities_referencesProvider) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder100 := json.NewDecoder(bytes.NewReader(x)) + decoder100.DisallowUnknownFields() + var boolVal bool + if err := decoder100.Decode(&boolVal); err == nil { + t.Value = boolVal + return nil + } + decoder101 := json.NewDecoder(bytes.NewReader(x)) + decoder101.DisallowUnknownFields() + var h101 ReferenceOptions + if err := decoder101.Decode(&h101); err == nil { + t.Value = h101 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [ReferenceOptions bool]"} +} + +func (t Or_ServerCapabilities_renameProvider) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case RenameOptions: + return json.Marshal(x) + case bool: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [RenameOptions bool]", t) +} + +func (t *Or_ServerCapabilities_renameProvider) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder126 := json.NewDecoder(bytes.NewReader(x)) + decoder126.DisallowUnknownFields() + var boolVal bool + if err := decoder126.Decode(&boolVal); err == nil { + t.Value = boolVal + return nil + } + decoder127 := json.NewDecoder(bytes.NewReader(x)) + decoder127.DisallowUnknownFields() + var h127 RenameOptions + if err := decoder127.Decode(&h127); err == nil { + t.Value = h127 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [RenameOptions bool]"} +} + +func (t Or_ServerCapabilities_selectionRangeProvider) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case SelectionRangeOptions: + return json.Marshal(x) + case SelectionRangeRegistrationOptions: + return json.Marshal(x) + case bool: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [SelectionRangeOptions SelectionRangeRegistrationOptions bool]", t) +} + +func (t *Or_ServerCapabilities_selectionRangeProvider) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder135 := json.NewDecoder(bytes.NewReader(x)) + decoder135.DisallowUnknownFields() + var boolVal bool + if err := decoder135.Decode(&boolVal); err == nil { + t.Value = boolVal + return nil + } + decoder136 := json.NewDecoder(bytes.NewReader(x)) + decoder136.DisallowUnknownFields() + var h136 SelectionRangeOptions + if err := decoder136.Decode(&h136); err == nil { + t.Value = h136 + return nil + } + decoder137 := json.NewDecoder(bytes.NewReader(x)) + decoder137.DisallowUnknownFields() + var h137 SelectionRangeRegistrationOptions + if err := decoder137.Decode(&h137); err == nil { + t.Value = h137 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [SelectionRangeOptions SelectionRangeRegistrationOptions bool]"} +} + +func (t Or_ServerCapabilities_semanticTokensProvider) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case SemanticTokensOptions: + return json.Marshal(x) + case SemanticTokensRegistrationOptions: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [SemanticTokensOptions SemanticTokensRegistrationOptions]", t) +} + +func (t *Or_ServerCapabilities_semanticTokensProvider) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder150 := json.NewDecoder(bytes.NewReader(x)) + decoder150.DisallowUnknownFields() + var h150 SemanticTokensOptions + if err := decoder150.Decode(&h150); err == nil { + t.Value = h150 + return nil + } + decoder151 := json.NewDecoder(bytes.NewReader(x)) + decoder151.DisallowUnknownFields() + var h151 SemanticTokensRegistrationOptions + if err := decoder151.Decode(&h151); err == nil { + t.Value = h151 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [SemanticTokensOptions SemanticTokensRegistrationOptions]"} +} + +func (t Or_ServerCapabilities_textDocumentSync) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case TextDocumentSyncKind: + return json.Marshal(x) + case TextDocumentSyncOptions: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [TextDocumentSyncKind TextDocumentSyncOptions]", t) +} + +func (t *Or_ServerCapabilities_textDocumentSync) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder72 := json.NewDecoder(bytes.NewReader(x)) + decoder72.DisallowUnknownFields() + var h72 TextDocumentSyncKind + if err := decoder72.Decode(&h72); err == nil { + t.Value = h72 + return nil + } + decoder73 := json.NewDecoder(bytes.NewReader(x)) + decoder73.DisallowUnknownFields() + var h73 TextDocumentSyncOptions + if err := decoder73.Decode(&h73); err == nil { + t.Value = h73 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [TextDocumentSyncKind TextDocumentSyncOptions]"} +} + +func (t Or_ServerCapabilities_typeDefinitionProvider) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case TypeDefinitionOptions: + return json.Marshal(x) + case TypeDefinitionRegistrationOptions: + return json.Marshal(x) + case bool: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [TypeDefinitionOptions TypeDefinitionRegistrationOptions bool]", t) +} + +func (t *Or_ServerCapabilities_typeDefinitionProvider) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder91 := json.NewDecoder(bytes.NewReader(x)) + decoder91.DisallowUnknownFields() + var boolVal bool + if err := decoder91.Decode(&boolVal); err == nil { + t.Value = boolVal + return nil + } + decoder92 := json.NewDecoder(bytes.NewReader(x)) + decoder92.DisallowUnknownFields() + var h92 TypeDefinitionOptions + if err := decoder92.Decode(&h92); err == nil { + t.Value = h92 + return nil + } + decoder93 := json.NewDecoder(bytes.NewReader(x)) + decoder93.DisallowUnknownFields() + var h93 TypeDefinitionRegistrationOptions + if err := decoder93.Decode(&h93); err == nil { + t.Value = h93 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [TypeDefinitionOptions TypeDefinitionRegistrationOptions bool]"} +} + +func (t Or_ServerCapabilities_typeHierarchyProvider) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case TypeHierarchyOptions: + return json.Marshal(x) + case TypeHierarchyRegistrationOptions: + return json.Marshal(x) + case bool: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [TypeHierarchyOptions TypeHierarchyRegistrationOptions bool]", t) +} + +func (t *Or_ServerCapabilities_typeHierarchyProvider) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder159 := json.NewDecoder(bytes.NewReader(x)) + decoder159.DisallowUnknownFields() + var boolVal bool + if err := decoder159.Decode(&boolVal); err == nil { + t.Value = boolVal + return nil + } + decoder160 := json.NewDecoder(bytes.NewReader(x)) + decoder160.DisallowUnknownFields() + var h160 TypeHierarchyOptions + if err := decoder160.Decode(&h160); err == nil { + t.Value = h160 + return nil + } + decoder161 := json.NewDecoder(bytes.NewReader(x)) + decoder161.DisallowUnknownFields() + var h161 TypeHierarchyRegistrationOptions + if err := decoder161.Decode(&h161); err == nil { + t.Value = h161 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [TypeHierarchyOptions TypeHierarchyRegistrationOptions bool]"} +} + +func (t Or_ServerCapabilities_workspaceSymbolProvider) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case WorkspaceSymbolOptions: + return json.Marshal(x) + case bool: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [WorkspaceSymbolOptions bool]", t) +} + +func (t *Or_ServerCapabilities_workspaceSymbolProvider) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder117 := json.NewDecoder(bytes.NewReader(x)) + decoder117.DisallowUnknownFields() + var boolVal bool + if err := decoder117.Decode(&boolVal); err == nil { + t.Value = boolVal + return nil + } + decoder118 := json.NewDecoder(bytes.NewReader(x)) + decoder118.DisallowUnknownFields() + var h118 WorkspaceSymbolOptions + if err := decoder118.Decode(&h118); err == nil { + t.Value = h118 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [WorkspaceSymbolOptions bool]"} +} + +func (t Or_SignatureInformation_documentation) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case MarkupContent: + return json.Marshal(x) + case string: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [MarkupContent string]", t) +} + +func (t *Or_SignatureInformation_documentation) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder186 := json.NewDecoder(bytes.NewReader(x)) + decoder186.DisallowUnknownFields() + var stringVal string + if err := decoder186.Decode(&stringVal); err == nil { + t.Value = stringVal + return nil + } + decoder187 := json.NewDecoder(bytes.NewReader(x)) + decoder187.DisallowUnknownFields() + var h187 MarkupContent + if err := decoder187.Decode(&h187); err == nil { + t.Value = h187 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [MarkupContent string]"} +} + +func (t Or_TextDocumentContentChangeEvent) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case TextDocumentContentChangePartial: + return json.Marshal(x) + case TextDocumentContentChangeWholeDocument: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [TextDocumentContentChangePartial TextDocumentContentChangeWholeDocument]", t) +} + +func (t *Or_TextDocumentContentChangeEvent) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder263 := json.NewDecoder(bytes.NewReader(x)) + decoder263.DisallowUnknownFields() + var h263 TextDocumentContentChangePartial + if err := decoder263.Decode(&h263); err == nil { + t.Value = h263 + return nil + } + decoder264 := json.NewDecoder(bytes.NewReader(x)) + decoder264.DisallowUnknownFields() + var h264 TextDocumentContentChangeWholeDocument + if err := decoder264.Decode(&h264); err == nil { + t.Value = h264 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [TextDocumentContentChangePartial TextDocumentContentChangeWholeDocument]"} +} + +func (t Or_TextDocumentEdit_edits_Elem) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case AnnotatedTextEdit: + return json.Marshal(x) + case SnippetTextEdit: + return json.Marshal(x) + case TextEdit: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [AnnotatedTextEdit SnippetTextEdit TextEdit]", t) +} + +func (t *Or_TextDocumentEdit_edits_Elem) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder52 := json.NewDecoder(bytes.NewReader(x)) + decoder52.DisallowUnknownFields() + var h52 AnnotatedTextEdit + if err := decoder52.Decode(&h52); err == nil { + t.Value = h52 + return nil + } + decoder53 := json.NewDecoder(bytes.NewReader(x)) + decoder53.DisallowUnknownFields() + var h53 SnippetTextEdit + if err := decoder53.Decode(&h53); err == nil { + t.Value = h53 + return nil + } + decoder54 := json.NewDecoder(bytes.NewReader(x)) + decoder54.DisallowUnknownFields() + var h54 TextEdit + if err := decoder54.Decode(&h54); err == nil { + t.Value = h54 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [AnnotatedTextEdit SnippetTextEdit TextEdit]"} +} + +func (t Or_TextDocumentFilter) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case TextDocumentFilterLanguage: + return json.Marshal(x) + case TextDocumentFilterPattern: + return json.Marshal(x) + case TextDocumentFilterScheme: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [TextDocumentFilterLanguage TextDocumentFilterPattern TextDocumentFilterScheme]", t) +} + +func (t *Or_TextDocumentFilter) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder279 := json.NewDecoder(bytes.NewReader(x)) + decoder279.DisallowUnknownFields() + var h279 TextDocumentFilterLanguage + if err := decoder279.Decode(&h279); err == nil { + t.Value = h279 + return nil + } + decoder280 := json.NewDecoder(bytes.NewReader(x)) + decoder280.DisallowUnknownFields() + var h280 TextDocumentFilterPattern + if err := decoder280.Decode(&h280); err == nil { + t.Value = h280 + return nil + } + decoder281 := json.NewDecoder(bytes.NewReader(x)) + decoder281.DisallowUnknownFields() + var h281 TextDocumentFilterScheme + if err := decoder281.Decode(&h281); err == nil { + t.Value = h281 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [TextDocumentFilterLanguage TextDocumentFilterPattern TextDocumentFilterScheme]"} +} + +func (t Or_TextDocumentSyncOptions_save) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case SaveOptions: + return json.Marshal(x) + case bool: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [SaveOptions bool]", t) +} + +func (t *Or_TextDocumentSyncOptions_save) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder195 := json.NewDecoder(bytes.NewReader(x)) + decoder195.DisallowUnknownFields() + var boolVal bool + if err := decoder195.Decode(&boolVal); err == nil { + t.Value = boolVal + return nil + } + decoder196 := json.NewDecoder(bytes.NewReader(x)) + decoder196.DisallowUnknownFields() + var h196 SaveOptions + if err := decoder196.Decode(&h196); err == nil { + t.Value = h196 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [SaveOptions bool]"} +} + +func (t Or_WorkspaceDocumentDiagnosticReport) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case WorkspaceFullDocumentDiagnosticReport: + return json.Marshal(x) + case WorkspaceUnchangedDocumentDiagnosticReport: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [WorkspaceFullDocumentDiagnosticReport WorkspaceUnchangedDocumentDiagnosticReport]", t) +} + +func (t *Or_WorkspaceDocumentDiagnosticReport) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder259 := json.NewDecoder(bytes.NewReader(x)) + decoder259.DisallowUnknownFields() + var h259 WorkspaceFullDocumentDiagnosticReport + if err := decoder259.Decode(&h259); err == nil { + t.Value = h259 + return nil + } + decoder260 := json.NewDecoder(bytes.NewReader(x)) + decoder260.DisallowUnknownFields() + var h260 WorkspaceUnchangedDocumentDiagnosticReport + if err := decoder260.Decode(&h260); err == nil { + t.Value = h260 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [WorkspaceFullDocumentDiagnosticReport WorkspaceUnchangedDocumentDiagnosticReport]"} +} + +func (t Or_WorkspaceEdit_documentChanges_Elem) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case CreateFile: + return json.Marshal(x) + case DeleteFile: + return json.Marshal(x) + case RenameFile: + return json.Marshal(x) + case TextDocumentEdit: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [CreateFile DeleteFile RenameFile TextDocumentEdit]", t) +} + +func (t *Or_WorkspaceEdit_documentChanges_Elem) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder4 := json.NewDecoder(bytes.NewReader(x)) + decoder4.DisallowUnknownFields() + var h4 CreateFile + if err := decoder4.Decode(&h4); err == nil { + t.Value = h4 + return nil + } + decoder5 := json.NewDecoder(bytes.NewReader(x)) + decoder5.DisallowUnknownFields() + var h5 DeleteFile + if err := decoder5.Decode(&h5); err == nil { + t.Value = h5 + return nil + } + decoder6 := json.NewDecoder(bytes.NewReader(x)) + decoder6.DisallowUnknownFields() + var h6 RenameFile + if err := decoder6.Decode(&h6); err == nil { + t.Value = h6 + return nil + } + decoder7 := json.NewDecoder(bytes.NewReader(x)) + decoder7.DisallowUnknownFields() + var h7 TextDocumentEdit + if err := decoder7.Decode(&h7); err == nil { + t.Value = h7 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [CreateFile DeleteFile RenameFile TextDocumentEdit]"} +} + +func (t Or_WorkspaceFoldersServerCapabilities_changeNotifications) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case bool: + return json.Marshal(x) + case string: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [bool string]", t) +} + +func (t *Or_WorkspaceFoldersServerCapabilities_changeNotifications) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder210 := json.NewDecoder(bytes.NewReader(x)) + decoder210.DisallowUnknownFields() + var boolVal bool + if err := decoder210.Decode(&boolVal); err == nil { + t.Value = boolVal + return nil + } + decoder211 := json.NewDecoder(bytes.NewReader(x)) + decoder211.DisallowUnknownFields() + var stringVal string + if err := decoder211.Decode(&stringVal); err == nil { + t.Value = stringVal + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [bool string]"} +} + +func (t Or_WorkspaceOptions_textDocumentContent) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case TextDocumentContentOptions: + return json.Marshal(x) + case TextDocumentContentRegistrationOptions: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [TextDocumentContentOptions TextDocumentContentRegistrationOptions]", t) +} + +func (t *Or_WorkspaceOptions_textDocumentContent) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder199 := json.NewDecoder(bytes.NewReader(x)) + decoder199.DisallowUnknownFields() + var h199 TextDocumentContentOptions + if err := decoder199.Decode(&h199); err == nil { + t.Value = h199 + return nil + } + decoder200 := json.NewDecoder(bytes.NewReader(x)) + decoder200.DisallowUnknownFields() + var h200 TextDocumentContentRegistrationOptions + if err := decoder200.Decode(&h200); err == nil { + t.Value = h200 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [TextDocumentContentOptions TextDocumentContentRegistrationOptions]"} +} + +func (t Or_WorkspaceSymbol_location) MarshalJSON() ([]byte, error) { + switch x := t.Value.(type) { + case Location: + return json.Marshal(x) + case LocationUriOnly: + return json.Marshal(x) + case nil: + return []byte("null"), nil + } + return nil, fmt.Errorf("type %T not one of [Location LocationUriOnly]", t) +} + +func (t *Or_WorkspaceSymbol_location) UnmarshalJSON(x []byte) error { + if string(x) == "null" { + t.Value = nil + return nil + } + decoder39 := json.NewDecoder(bytes.NewReader(x)) + decoder39.DisallowUnknownFields() + var h39 Location + if err := decoder39.Decode(&h39); err == nil { + t.Value = h39 + return nil + } + decoder40 := json.NewDecoder(bytes.NewReader(x)) + decoder40.DisallowUnknownFields() + var h40 LocationUriOnly + if err := decoder40.Decode(&h40); err == nil { + t.Value = h40 + return nil + } + return &UnmarshalError{"unmarshal failed to match one of [Location LocationUriOnly]"} +} diff --git a/internal/lsp/protocol/tsprotocol.go b/internal/lsp/protocol/tsprotocol.go new file mode 100644 index 000000000..7f60e6f1b --- /dev/null +++ b/internal/lsp/protocol/tsprotocol.go @@ -0,0 +1,6907 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated for LSP. DO NOT EDIT. + +package protocol + +// Code generated from protocol/metaModel.json at ref release/protocol/3.17.6-next.9 (hash c94395b5da53729e6dff931293b051009ccaaaa4). +// https://github.com/microsoft/vscode-languageserver-node/blob/release/protocol/3.17.6-next.9/protocol/metaModel.json +// LSP metaData.version = 3.17.0. + +import "encoding/json" + +// created for And +type And_RegOpt_textDocument_colorPresentation struct { + WorkDoneProgressOptions + TextDocumentRegistrationOptions +} + +// A special text edit with an additional change annotation. +// +// @since 3.16.0. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#annotatedTextEdit +type AnnotatedTextEdit struct { + // The actual identifier of the change annotation + AnnotationID *ChangeAnnotationIdentifier `json:"annotationId,omitempty"` + TextEdit +} + +// The parameters passed via an apply workspace edit request. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#applyWorkspaceEditParams +type ApplyWorkspaceEditParams struct { + // An optional label of the workspace edit. This label is + // presented in the user interface for example on an undo + // stack to undo the workspace edit. + Label string `json:"label,omitempty"` + // The edits to apply. + Edit WorkspaceEdit `json:"edit"` + // Additional data about the edit. + // + // @since 3.18.0 + // @proposed + Metadata *WorkspaceEditMetadata `json:"metadata,omitempty"` +} + +// The result returned from the apply workspace edit request. +// +// @since 3.17 renamed from ApplyWorkspaceEditResponse +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#applyWorkspaceEditResult +type ApplyWorkspaceEditResult struct { + // Indicates whether the edit was applied or not. + Applied bool `json:"applied"` + // An optional textual description for why the edit was not applied. + // This may be used by the server for diagnostic logging or to provide + // a suitable error for a request that triggered the edit. + FailureReason string `json:"failureReason,omitempty"` + // Depending on the client's failure handling strategy `failedChange` might + // contain the index of the change that failed. This property is only available + // if the client signals a `failureHandlingStrategy` in its client capabilities. + FailedChange uint32 `json:"failedChange,omitempty"` +} + +// A base for all symbol information. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#baseSymbolInformation +type BaseSymbolInformation struct { + // The name of this symbol. + Name string `json:"name"` + // The kind of this symbol. + Kind SymbolKind `json:"kind"` + // Tags for this symbol. + // + // @since 3.16.0 + Tags []SymbolTag `json:"tags,omitempty"` + // The name of the symbol containing this symbol. This information is for + // user interface purposes (e.g. to render a qualifier in the user interface + // if necessary). It can't be used to re-infer a hierarchy for the document + // symbols. + ContainerName string `json:"containerName,omitempty"` +} + +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#callHierarchyClientCapabilities +type CallHierarchyClientCapabilities struct { + // Whether implementation supports dynamic registration. If this is set to `true` + // the client supports the new `(TextDocumentRegistrationOptions & StaticRegistrationOptions)` + // return value for the corresponding server capability as well. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` +} + +// Represents an incoming call, e.g. a caller of a method or constructor. +// +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#callHierarchyIncomingCall +type CallHierarchyIncomingCall struct { + // The item that makes the call. + From CallHierarchyItem `json:"from"` + // The ranges at which the calls appear. This is relative to the caller + // denoted by {@link CallHierarchyIncomingCall.from `this.from`}. + FromRanges []Range `json:"fromRanges"` +} + +// The parameter of a `callHierarchy/incomingCalls` request. +// +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#callHierarchyIncomingCallsParams +type CallHierarchyIncomingCallsParams struct { + Item CallHierarchyItem `json:"item"` + WorkDoneProgressParams + PartialResultParams +} + +// Represents programming constructs like functions or constructors in the context +// of call hierarchy. +// +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#callHierarchyItem +type CallHierarchyItem struct { + // The name of this item. + Name string `json:"name"` + // The kind of this item. + Kind SymbolKind `json:"kind"` + // Tags for this item. + Tags []SymbolTag `json:"tags,omitempty"` + // More detail for this item, e.g. the signature of a function. + Detail string `json:"detail,omitempty"` + // The resource identifier of this item. + URI DocumentUri `json:"uri"` + // The range enclosing this symbol not including leading/trailing whitespace but everything else, e.g. comments and code. + Range Range `json:"range"` + // The range that should be selected and revealed when this symbol is being picked, e.g. the name of a function. + // Must be contained by the {@link CallHierarchyItem.range `range`}. + SelectionRange Range `json:"selectionRange"` + // A data entry field that is preserved between a call hierarchy prepare and + // incoming calls or outgoing calls requests. + Data interface{} `json:"data,omitempty"` +} + +// Call hierarchy options used during static registration. +// +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#callHierarchyOptions +type CallHierarchyOptions struct { + WorkDoneProgressOptions +} + +// Represents an outgoing call, e.g. calling a getter from a method or a method from a constructor etc. +// +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#callHierarchyOutgoingCall +type CallHierarchyOutgoingCall struct { + // The item that is called. + To CallHierarchyItem `json:"to"` + // The range at which this item is called. This is the range relative to the caller, e.g the item + // passed to {@link CallHierarchyItemProvider.provideCallHierarchyOutgoingCalls `provideCallHierarchyOutgoingCalls`} + // and not {@link CallHierarchyOutgoingCall.to `this.to`}. + FromRanges []Range `json:"fromRanges"` +} + +// The parameter of a `callHierarchy/outgoingCalls` request. +// +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#callHierarchyOutgoingCallsParams +type CallHierarchyOutgoingCallsParams struct { + Item CallHierarchyItem `json:"item"` + WorkDoneProgressParams + PartialResultParams +} + +// The parameter of a `textDocument/prepareCallHierarchy` request. +// +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#callHierarchyPrepareParams +type CallHierarchyPrepareParams struct { + TextDocumentPositionParams + WorkDoneProgressParams +} + +// Call hierarchy options used during static or dynamic registration. +// +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#callHierarchyRegistrationOptions +type CallHierarchyRegistrationOptions struct { + TextDocumentRegistrationOptions + CallHierarchyOptions + StaticRegistrationOptions +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#cancelParams +type CancelParams struct { + // The request id to cancel. + ID interface{} `json:"id"` +} + +// Additional information that describes document changes. +// +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#changeAnnotation +type ChangeAnnotation struct { + // A human-readable string describing the actual change. The string + // is rendered prominent in the user interface. + Label string `json:"label"` + // A flag which indicates that user confirmation is needed + // before applying the change. + NeedsConfirmation bool `json:"needsConfirmation,omitempty"` + // A human-readable string which is rendered less prominent in + // the user interface. + Description string `json:"description,omitempty"` +} + +// An identifier to refer to a change annotation stored with a workspace edit. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#changeAnnotationIdentifier +type ChangeAnnotationIdentifier = string // (alias) +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#changeAnnotationsSupportOptions +type ChangeAnnotationsSupportOptions struct { + // Whether the client groups edits with equal labels into tree nodes, + // for instance all edits labelled with "Changes in Strings" would + // be a tree node. + GroupsOnLabel bool `json:"groupsOnLabel,omitempty"` +} + +// Defines the capabilities provided by the client. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#clientCapabilities +type ClientCapabilities struct { + // Workspace specific client capabilities. + Workspace WorkspaceClientCapabilities `json:"workspace,omitempty"` + // Text document specific client capabilities. + TextDocument TextDocumentClientCapabilities `json:"textDocument,omitempty"` + // Capabilities specific to the notebook document support. + // + // @since 3.17.0 + NotebookDocument *NotebookDocumentClientCapabilities `json:"notebookDocument,omitempty"` + // Window specific client capabilities. + Window WindowClientCapabilities `json:"window,omitempty"` + // General client capabilities. + // + // @since 3.16.0 + General *GeneralClientCapabilities `json:"general,omitempty"` + // Experimental client capabilities. + Experimental interface{} `json:"experimental,omitempty"` +} + +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#clientCodeActionKindOptions +type ClientCodeActionKindOptions struct { + // The code action kind values the client supports. When this + // property exists the client also guarantees that it will + // handle values outside its set gracefully and falls back + // to a default value when unknown. + ValueSet []CodeActionKind `json:"valueSet"` +} + +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#clientCodeActionLiteralOptions +type ClientCodeActionLiteralOptions struct { + // The code action kind is support with the following value + // set. + CodeActionKind ClientCodeActionKindOptions `json:"codeActionKind"` +} + +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#clientCodeActionResolveOptions +type ClientCodeActionResolveOptions struct { + // The properties that a client can resolve lazily. + Properties []string `json:"properties"` +} + +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#clientCodeLensResolveOptions +type ClientCodeLensResolveOptions struct { + // The properties that a client can resolve lazily. + Properties []string `json:"properties"` +} + +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#clientCompletionItemInsertTextModeOptions +type ClientCompletionItemInsertTextModeOptions struct { + ValueSet []InsertTextMode `json:"valueSet"` +} + +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#clientCompletionItemOptions +type ClientCompletionItemOptions struct { + // Client supports snippets as insert text. + // + // A snippet can define tab stops and placeholders with `$1`, `$2` + // and `${3:foo}`. `$0` defines the final tab stop, it defaults to + // the end of the snippet. Placeholders with equal identifiers are linked, + // that is typing in one will update others too. + SnippetSupport bool `json:"snippetSupport,omitempty"` + // Client supports commit characters on a completion item. + CommitCharactersSupport bool `json:"commitCharactersSupport,omitempty"` + // Client supports the following content formats for the documentation + // property. The order describes the preferred format of the client. + DocumentationFormat []MarkupKind `json:"documentationFormat,omitempty"` + // Client supports the deprecated property on a completion item. + DeprecatedSupport bool `json:"deprecatedSupport,omitempty"` + // Client supports the preselect property on a completion item. + PreselectSupport bool `json:"preselectSupport,omitempty"` + // Client supports the tag property on a completion item. Clients supporting + // tags have to handle unknown tags gracefully. Clients especially need to + // preserve unknown tags when sending a completion item back to the server in + // a resolve call. + // + // @since 3.15.0 + TagSupport *CompletionItemTagOptions `json:"tagSupport,omitempty"` + // Client support insert replace edit to control different behavior if a + // completion item is inserted in the text or should replace text. + // + // @since 3.16.0 + InsertReplaceSupport bool `json:"insertReplaceSupport,omitempty"` + // Indicates which properties a client can resolve lazily on a completion + // item. Before version 3.16.0 only the predefined properties `documentation` + // and `details` could be resolved lazily. + // + // @since 3.16.0 + ResolveSupport *ClientCompletionItemResolveOptions `json:"resolveSupport,omitempty"` + // The client supports the `insertTextMode` property on + // a completion item to override the whitespace handling mode + // as defined by the client (see `insertTextMode`). + // + // @since 3.16.0 + InsertTextModeSupport *ClientCompletionItemInsertTextModeOptions `json:"insertTextModeSupport,omitempty"` + // The client has support for completion item label + // details (see also `CompletionItemLabelDetails`). + // + // @since 3.17.0 + LabelDetailsSupport bool `json:"labelDetailsSupport,omitempty"` +} + +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#clientCompletionItemOptionsKind +type ClientCompletionItemOptionsKind struct { + // The completion item kind values the client supports. When this + // property exists the client also guarantees that it will + // handle values outside its set gracefully and falls back + // to a default value when unknown. + // + // If this property is not present the client only supports + // the completion items kinds from `Text` to `Reference` as defined in + // the initial version of the protocol. + ValueSet []CompletionItemKind `json:"valueSet,omitempty"` +} + +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#clientCompletionItemResolveOptions +type ClientCompletionItemResolveOptions struct { + // The properties that a client can resolve lazily. + Properties []string `json:"properties"` +} + +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#clientDiagnosticsTagOptions +type ClientDiagnosticsTagOptions struct { + // The tags supported by the client. + ValueSet []DiagnosticTag `json:"valueSet"` +} + +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#clientFoldingRangeKindOptions +type ClientFoldingRangeKindOptions struct { + // The folding range kind values the client supports. When this + // property exists the client also guarantees that it will + // handle values outside its set gracefully and falls back + // to a default value when unknown. + ValueSet []FoldingRangeKind `json:"valueSet,omitempty"` +} + +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#clientFoldingRangeOptions +type ClientFoldingRangeOptions struct { + // If set, the client signals that it supports setting collapsedText on + // folding ranges to display custom labels instead of the default text. + // + // @since 3.17.0 + CollapsedText bool `json:"collapsedText,omitempty"` +} + +// Information about the client +// +// @since 3.15.0 +// @since 3.18.0 ClientInfo type name added. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#clientInfo +type ClientInfo struct { + // The name of the client as defined by the client. + Name string `json:"name"` + // The client's version as defined by the client. + Version string `json:"version,omitempty"` +} + +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#clientInlayHintResolveOptions +type ClientInlayHintResolveOptions struct { + // The properties that a client can resolve lazily. + Properties []string `json:"properties"` +} + +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#clientSemanticTokensRequestFullDelta +type ClientSemanticTokensRequestFullDelta struct { + // The client will send the `textDocument/semanticTokens/full/delta` request if + // the server provides a corresponding handler. + Delta bool `json:"delta,omitempty"` +} + +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#clientSemanticTokensRequestOptions +type ClientSemanticTokensRequestOptions struct { + // The client will send the `textDocument/semanticTokens/range` request if + // the server provides a corresponding handler. + Range *Or_ClientSemanticTokensRequestOptions_range `json:"range,omitempty"` + // The client will send the `textDocument/semanticTokens/full` request if + // the server provides a corresponding handler. + Full *Or_ClientSemanticTokensRequestOptions_full `json:"full,omitempty"` +} + +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#clientShowMessageActionItemOptions +type ClientShowMessageActionItemOptions struct { + // Whether the client supports additional attributes which + // are preserved and send back to the server in the + // request's response. + AdditionalPropertiesSupport bool `json:"additionalPropertiesSupport,omitempty"` +} + +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#clientSignatureInformationOptions +type ClientSignatureInformationOptions struct { + // Client supports the following content formats for the documentation + // property. The order describes the preferred format of the client. + DocumentationFormat []MarkupKind `json:"documentationFormat,omitempty"` + // Client capabilities specific to parameter information. + ParameterInformation *ClientSignatureParameterInformationOptions `json:"parameterInformation,omitempty"` + // The client supports the `activeParameter` property on `SignatureInformation` + // literal. + // + // @since 3.16.0 + ActiveParameterSupport bool `json:"activeParameterSupport,omitempty"` + // The client supports the `activeParameter` property on + // `SignatureHelp`/`SignatureInformation` being set to `null` to + // indicate that no parameter should be active. + // + // @since 3.18.0 + // @proposed + NoActiveParameterSupport bool `json:"noActiveParameterSupport,omitempty"` +} + +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#clientSignatureParameterInformationOptions +type ClientSignatureParameterInformationOptions struct { + // The client supports processing label offsets instead of a + // simple label string. + // + // @since 3.14.0 + LabelOffsetSupport bool `json:"labelOffsetSupport,omitempty"` +} + +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#clientSymbolKindOptions +type ClientSymbolKindOptions struct { + // The symbol kind values the client supports. When this + // property exists the client also guarantees that it will + // handle values outside its set gracefully and falls back + // to a default value when unknown. + // + // If this property is not present the client only supports + // the symbol kinds from `File` to `Array` as defined in + // the initial version of the protocol. + ValueSet []SymbolKind `json:"valueSet,omitempty"` +} + +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#clientSymbolResolveOptions +type ClientSymbolResolveOptions struct { + // The properties that a client can resolve lazily. Usually + // `location.range` + Properties []string `json:"properties"` +} + +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#clientSymbolTagOptions +type ClientSymbolTagOptions struct { + // The tags supported by the client. + ValueSet []SymbolTag `json:"valueSet"` +} + +// A code action represents a change that can be performed in code, e.g. to fix a problem or +// to refactor code. +// +// A CodeAction must set either `edit` and/or a `command`. If both are supplied, the `edit` is applied first, then the `command` is executed. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#codeAction +type CodeAction struct { + // A short, human-readable, title for this code action. + Title string `json:"title"` + // The kind of the code action. + // + // Used to filter code actions. + Kind CodeActionKind `json:"kind,omitempty"` + // The diagnostics that this code action resolves. + Diagnostics []Diagnostic `json:"diagnostics,omitempty"` + // Marks this as a preferred action. Preferred actions are used by the `auto fix` command and can be targeted + // by keybindings. + // + // A quick fix should be marked preferred if it properly addresses the underlying error. + // A refactoring should be marked preferred if it is the most reasonable choice of actions to take. + // + // @since 3.15.0 + IsPreferred bool `json:"isPreferred,omitempty"` + // Marks that the code action cannot currently be applied. + // + // Clients should follow the following guidelines regarding disabled code actions: + // + // - Disabled code actions are not shown in automatic [lightbulbs](https://code.visualstudio.com/docs/editor/editingevolved#_code-action) + // code action menus. + // + // - Disabled actions are shown as faded out in the code action menu when the user requests a more specific type + // of code action, such as refactorings. + // + // - If the user has a [keybinding](https://code.visualstudio.com/docs/editor/refactoring#_keybindings-for-code-actions) + // that auto applies a code action and only disabled code actions are returned, the client should show the user an + // error message with `reason` in the editor. + // + // @since 3.16.0 + Disabled *CodeActionDisabled `json:"disabled,omitempty"` + // The workspace edit this code action performs. + Edit *WorkspaceEdit `json:"edit,omitempty"` + // A command this code action executes. If a code action + // provides an edit and a command, first the edit is + // executed and then the command. + Command *Command `json:"command,omitempty"` + // A data entry field that is preserved on a code action between + // a `textDocument/codeAction` and a `codeAction/resolve` request. + // + // @since 3.16.0 + Data *json.RawMessage `json:"data,omitempty"` +} + +// The Client Capabilities of a {@link CodeActionRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#codeActionClientCapabilities +type CodeActionClientCapabilities struct { + // Whether code action supports dynamic registration. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` + // The client support code action literals of type `CodeAction` as a valid + // response of the `textDocument/codeAction` request. If the property is not + // set the request can only return `Command` literals. + // + // @since 3.8.0 + CodeActionLiteralSupport ClientCodeActionLiteralOptions `json:"codeActionLiteralSupport,omitempty"` + // Whether code action supports the `isPreferred` property. + // + // @since 3.15.0 + IsPreferredSupport bool `json:"isPreferredSupport,omitempty"` + // Whether code action supports the `disabled` property. + // + // @since 3.16.0 + DisabledSupport bool `json:"disabledSupport,omitempty"` + // Whether code action supports the `data` property which is + // preserved between a `textDocument/codeAction` and a + // `codeAction/resolve` request. + // + // @since 3.16.0 + DataSupport bool `json:"dataSupport,omitempty"` + // Whether the client supports resolving additional code action + // properties via a separate `codeAction/resolve` request. + // + // @since 3.16.0 + ResolveSupport *ClientCodeActionResolveOptions `json:"resolveSupport,omitempty"` + // Whether the client honors the change annotations in + // text edits and resource operations returned via the + // `CodeAction#edit` property by for example presenting + // the workspace edit in the user interface and asking + // for confirmation. + // + // @since 3.16.0 + HonorsChangeAnnotations bool `json:"honorsChangeAnnotations,omitempty"` + // Whether the client supports documentation for a class of + // code actions. + // + // @since 3.18.0 + // @proposed + DocumentationSupport bool `json:"documentationSupport,omitempty"` +} + +// Contains additional diagnostic information about the context in which +// a {@link CodeActionProvider.provideCodeActions code action} is run. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#codeActionContext +type CodeActionContext struct { + // An array of diagnostics known on the client side overlapping the range provided to the + // `textDocument/codeAction` request. They are provided so that the server knows which + // errors are currently presented to the user for the given range. There is no guarantee + // that these accurately reflect the error state of the resource. The primary parameter + // to compute code actions is the provided range. + Diagnostics []Diagnostic `json:"diagnostics"` + // Requested kind of actions to return. + // + // Actions not of this kind are filtered out by the client before being shown. So servers + // can omit computing them. + Only []CodeActionKind `json:"only,omitempty"` + // The reason why code actions were requested. + // + // @since 3.17.0 + TriggerKind *CodeActionTriggerKind `json:"triggerKind,omitempty"` +} + +// Captures why the code action is currently disabled. +// +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#codeActionDisabled +type CodeActionDisabled struct { + // Human readable description of why the code action is currently disabled. + // + // This is displayed in the code actions UI. + Reason string `json:"reason"` +} + +// A set of predefined code action kinds +type CodeActionKind string + +// Documentation for a class of code actions. +// +// @since 3.18.0 +// @proposed +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#codeActionKindDocumentation +type CodeActionKindDocumentation struct { + // The kind of the code action being documented. + // + // If the kind is generic, such as `CodeActionKind.Refactor`, the documentation will be shown whenever any + // refactorings are returned. If the kind if more specific, such as `CodeActionKind.RefactorExtract`, the + // documentation will only be shown when extract refactoring code actions are returned. + Kind CodeActionKind `json:"kind"` + // Command that is ued to display the documentation to the user. + // + // The title of this documentation code action is taken from {@linkcode Command.title} + Command Command `json:"command"` +} + +// Provider options for a {@link CodeActionRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#codeActionOptions +type CodeActionOptions struct { + // CodeActionKinds that this server may return. + // + // The list of kinds may be generic, such as `CodeActionKind.Refactor`, or the server + // may list out every specific kind they provide. + CodeActionKinds []CodeActionKind `json:"codeActionKinds,omitempty"` + // Static documentation for a class of code actions. + // + // Documentation from the provider should be shown in the code actions menu if either: + // + // + // - Code actions of `kind` are requested by the editor. In this case, the editor will show the documentation that + // most closely matches the requested code action kind. For example, if a provider has documentation for + // both `Refactor` and `RefactorExtract`, when the user requests code actions for `RefactorExtract`, + // the editor will use the documentation for `RefactorExtract` instead of the documentation for `Refactor`. + // + // + // - Any code actions of `kind` are returned by the provider. + // + // At most one documentation entry should be shown per provider. + // + // @since 3.18.0 + // @proposed + Documentation []CodeActionKindDocumentation `json:"documentation,omitempty"` + // The server provides support to resolve additional + // information for a code action. + // + // @since 3.16.0 + ResolveProvider bool `json:"resolveProvider,omitempty"` + WorkDoneProgressOptions +} + +// The parameters of a {@link CodeActionRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#codeActionParams +type CodeActionParams struct { + // The document in which the command was invoked. + TextDocument TextDocumentIdentifier `json:"textDocument"` + // The range for which the command was invoked. + Range Range `json:"range"` + // Context carrying additional information. + Context CodeActionContext `json:"context"` + WorkDoneProgressParams + PartialResultParams +} + +// Registration options for a {@link CodeActionRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#codeActionRegistrationOptions +type CodeActionRegistrationOptions struct { + TextDocumentRegistrationOptions + CodeActionOptions +} + +// The reason why code actions were requested. +// +// @since 3.17.0 +type CodeActionTriggerKind uint32 + +// Structure to capture a description for an error code. +// +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#codeDescription +type CodeDescription struct { + // An URI to open with more information about the diagnostic error. + Href URI `json:"href"` +} + +// A code lens represents a {@link Command command} that should be shown along with +// source text, like the number of references, a way to run tests, etc. +// +// A code lens is _unresolved_ when no command is associated to it. For performance +// reasons the creation of a code lens and resolving should be done in two stages. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#codeLens +type CodeLens struct { + // The range in which this code lens is valid. Should only span a single line. + Range Range `json:"range"` + // The command this code lens represents. + Command *Command `json:"command,omitempty"` + // A data entry field that is preserved on a code lens item between + // a {@link CodeLensRequest} and a {@link CodeLensResolveRequest} + Data interface{} `json:"data,omitempty"` +} + +// The client capabilities of a {@link CodeLensRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#codeLensClientCapabilities +type CodeLensClientCapabilities struct { + // Whether code lens supports dynamic registration. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` + // Whether the client supports resolving additional code lens + // properties via a separate `codeLens/resolve` request. + // + // @since 3.18.0 + ResolveSupport *ClientCodeLensResolveOptions `json:"resolveSupport,omitempty"` +} + +// Code Lens provider options of a {@link CodeLensRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#codeLensOptions +type CodeLensOptions struct { + // Code lens has a resolve provider as well. + ResolveProvider bool `json:"resolveProvider,omitempty"` + WorkDoneProgressOptions +} + +// The parameters of a {@link CodeLensRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#codeLensParams +type CodeLensParams struct { + // The document to request code lens for. + TextDocument TextDocumentIdentifier `json:"textDocument"` + WorkDoneProgressParams + PartialResultParams +} + +// Registration options for a {@link CodeLensRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#codeLensRegistrationOptions +type CodeLensRegistrationOptions struct { + TextDocumentRegistrationOptions + CodeLensOptions +} + +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#codeLensWorkspaceClientCapabilities +type CodeLensWorkspaceClientCapabilities struct { + // Whether the client implementation supports a refresh request sent from the + // server to the client. + // + // Note that this event is global and will force the client to refresh all + // code lenses currently shown. It should be used with absolute care and is + // useful for situation where a server for example detect a project wide + // change that requires such a calculation. + RefreshSupport bool `json:"refreshSupport,omitempty"` +} + +// Represents a color in RGBA space. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#color +type Color struct { + // The red component of this color in the range [0-1]. + Red float64 `json:"red"` + // The green component of this color in the range [0-1]. + Green float64 `json:"green"` + // The blue component of this color in the range [0-1]. + Blue float64 `json:"blue"` + // The alpha component of this color in the range [0-1]. + Alpha float64 `json:"alpha"` +} + +// Represents a color range from a document. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#colorInformation +type ColorInformation struct { + // The range in the document where this color appears. + Range Range `json:"range"` + // The actual color value for this color range. + Color Color `json:"color"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#colorPresentation +type ColorPresentation struct { + // The label of this color presentation. It will be shown on the color + // picker header. By default this is also the text that is inserted when selecting + // this color presentation. + Label string `json:"label"` + // An {@link TextEdit edit} which is applied to a document when selecting + // this presentation for the color. When `falsy` the {@link ColorPresentation.label label} + // is used. + TextEdit *TextEdit `json:"textEdit,omitempty"` + // An optional array of additional {@link TextEdit text edits} that are applied when + // selecting this color presentation. Edits must not overlap with the main {@link ColorPresentation.textEdit edit} nor with themselves. + AdditionalTextEdits []TextEdit `json:"additionalTextEdits,omitempty"` +} + +// Parameters for a {@link ColorPresentationRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#colorPresentationParams +type ColorPresentationParams struct { + // The text document. + TextDocument TextDocumentIdentifier `json:"textDocument"` + // The color to request presentations for. + Color Color `json:"color"` + // The range where the color would be inserted. Serves as a context. + Range Range `json:"range"` + WorkDoneProgressParams + PartialResultParams +} + +// Represents a reference to a command. Provides a title which +// will be used to represent a command in the UI and, optionally, +// an array of arguments which will be passed to the command handler +// function when invoked. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#command +type Command struct { + // Title of the command, like `save`. + Title string `json:"title"` + // An optional tooltip. + // + // @since 3.18.0 + // @proposed + Tooltip string `json:"tooltip,omitempty"` + // The identifier of the actual command handler. + Command string `json:"command"` + // Arguments that the command handler should be + // invoked with. + Arguments []json.RawMessage `json:"arguments,omitempty"` +} + +// Completion client capabilities +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#completionClientCapabilities +type CompletionClientCapabilities struct { + // Whether completion supports dynamic registration. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` + // The client supports the following `CompletionItem` specific + // capabilities. + CompletionItem ClientCompletionItemOptions `json:"completionItem,omitempty"` + CompletionItemKind *ClientCompletionItemOptionsKind `json:"completionItemKind,omitempty"` + // Defines how the client handles whitespace and indentation + // when accepting a completion item that uses multi line + // text in either `insertText` or `textEdit`. + // + // @since 3.17.0 + InsertTextMode InsertTextMode `json:"insertTextMode,omitempty"` + // The client supports to send additional context information for a + // `textDocument/completion` request. + ContextSupport bool `json:"contextSupport,omitempty"` + // The client supports the following `CompletionList` specific + // capabilities. + // + // @since 3.17.0 + CompletionList *CompletionListCapabilities `json:"completionList,omitempty"` +} + +// Contains additional information about the context in which a completion request is triggered. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#completionContext +type CompletionContext struct { + // How the completion was triggered. + TriggerKind CompletionTriggerKind `json:"triggerKind"` + // The trigger character (a single character) that has trigger code complete. + // Is undefined if `triggerKind !== CompletionTriggerKind.TriggerCharacter` + TriggerCharacter string `json:"triggerCharacter,omitempty"` +} + +// A completion item represents a text snippet that is +// proposed to complete text that is being typed. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#completionItem +type CompletionItem struct { + // The label of this completion item. + // + // The label property is also by default the text that + // is inserted when selecting this completion. + // + // If label details are provided the label itself should + // be an unqualified name of the completion item. + Label string `json:"label"` + // Additional details for the label + // + // @since 3.17.0 + LabelDetails *CompletionItemLabelDetails `json:"labelDetails,omitempty"` + // The kind of this completion item. Based of the kind + // an icon is chosen by the editor. + Kind CompletionItemKind `json:"kind,omitempty"` + // Tags for this completion item. + // + // @since 3.15.0 + Tags []CompletionItemTag `json:"tags,omitempty"` + // A human-readable string with additional information + // about this item, like type or symbol information. + Detail string `json:"detail,omitempty"` + // A human-readable string that represents a doc-comment. + Documentation *Or_CompletionItem_documentation `json:"documentation,omitempty"` + // Indicates if this item is deprecated. + // @deprecated Use `tags` instead. + Deprecated bool `json:"deprecated,omitempty"` + // Select this item when showing. + // + // *Note* that only one completion item can be selected and that the + // tool / client decides which item that is. The rule is that the *first* + // item of those that match best is selected. + Preselect bool `json:"preselect,omitempty"` + // A string that should be used when comparing this item + // with other items. When `falsy` the {@link CompletionItem.label label} + // is used. + SortText string `json:"sortText,omitempty"` + // A string that should be used when filtering a set of + // completion items. When `falsy` the {@link CompletionItem.label label} + // is used. + FilterText string `json:"filterText,omitempty"` + // A string that should be inserted into a document when selecting + // this completion. When `falsy` the {@link CompletionItem.label label} + // is used. + // + // The `insertText` is subject to interpretation by the client side. + // Some tools might not take the string literally. For example + // VS Code when code complete is requested in this example + // `con<cursor position>` and a completion item with an `insertText` of + // `console` is provided it will only insert `sole`. Therefore it is + // recommended to use `textEdit` instead since it avoids additional client + // side interpretation. + InsertText string `json:"insertText,omitempty"` + // The format of the insert text. The format applies to both the + // `insertText` property and the `newText` property of a provided + // `textEdit`. If omitted defaults to `InsertTextFormat.PlainText`. + // + // Please note that the insertTextFormat doesn't apply to + // `additionalTextEdits`. + InsertTextFormat *InsertTextFormat `json:"insertTextFormat,omitempty"` + // How whitespace and indentation is handled during completion + // item insertion. If not provided the clients default value depends on + // the `textDocument.completion.insertTextMode` client capability. + // + // @since 3.16.0 + InsertTextMode *InsertTextMode `json:"insertTextMode,omitempty"` + // An {@link TextEdit edit} which is applied to a document when selecting + // this completion. When an edit is provided the value of + // {@link CompletionItem.insertText insertText} is ignored. + // + // Most editors support two different operations when accepting a completion + // item. One is to insert a completion text and the other is to replace an + // existing text with a completion text. Since this can usually not be + // predetermined by a server it can report both ranges. Clients need to + // signal support for `InsertReplaceEdits` via the + // `textDocument.completion.insertReplaceSupport` client capability + // property. + // + // *Note 1:* The text edit's range as well as both ranges from an insert + // replace edit must be a [single line] and they must contain the position + // at which completion has been requested. + // *Note 2:* If an `InsertReplaceEdit` is returned the edit's insert range + // must be a prefix of the edit's replace range, that means it must be + // contained and starting at the same position. + // + // @since 3.16.0 additional type `InsertReplaceEdit` + TextEdit *Or_CompletionItem_textEdit `json:"textEdit,omitempty"` + // The edit text used if the completion item is part of a CompletionList and + // CompletionList defines an item default for the text edit range. + // + // Clients will only honor this property if they opt into completion list + // item defaults using the capability `completionList.itemDefaults`. + // + // If not provided and a list's default range is provided the label + // property is used as a text. + // + // @since 3.17.0 + TextEditText string `json:"textEditText,omitempty"` + // An optional array of additional {@link TextEdit text edits} that are applied when + // selecting this completion. Edits must not overlap (including the same insert position) + // with the main {@link CompletionItem.textEdit edit} nor with themselves. + // + // Additional text edits should be used to change text unrelated to the current cursor position + // (for example adding an import statement at the top of the file if the completion item will + // insert an unqualified type). + AdditionalTextEdits []TextEdit `json:"additionalTextEdits,omitempty"` + // An optional set of characters that when pressed while this completion is active will accept it first and + // then type that character. *Note* that all commit characters should have `length=1` and that superfluous + // characters will be ignored. + CommitCharacters []string `json:"commitCharacters,omitempty"` + // An optional {@link Command command} that is executed *after* inserting this completion. *Note* that + // additional modifications to the current document should be described with the + // {@link CompletionItem.additionalTextEdits additionalTextEdits}-property. + Command *Command `json:"command,omitempty"` + // A data entry field that is preserved on a completion item between a + // {@link CompletionRequest} and a {@link CompletionResolveRequest}. + Data interface{} `json:"data,omitempty"` +} + +// In many cases the items of an actual completion result share the same +// value for properties like `commitCharacters` or the range of a text +// edit. A completion list can therefore define item defaults which will +// be used if a completion item itself doesn't specify the value. +// +// If a completion list specifies a default value and a completion item +// also specifies a corresponding value the one from the item is used. +// +// Servers are only allowed to return default values if the client +// signals support for this via the `completionList.itemDefaults` +// capability. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#completionItemDefaults +type CompletionItemDefaults struct { + // A default commit character set. + // + // @since 3.17.0 + CommitCharacters []string `json:"commitCharacters,omitempty"` + // A default edit range. + // + // @since 3.17.0 + EditRange *Or_CompletionItemDefaults_editRange `json:"editRange,omitempty"` + // A default insert text format. + // + // @since 3.17.0 + InsertTextFormat *InsertTextFormat `json:"insertTextFormat,omitempty"` + // A default insert text mode. + // + // @since 3.17.0 + InsertTextMode *InsertTextMode `json:"insertTextMode,omitempty"` + // A default data value. + // + // @since 3.17.0 + Data interface{} `json:"data,omitempty"` +} + +// The kind of a completion entry. +type CompletionItemKind uint32 + +// Additional details for a completion item label. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#completionItemLabelDetails +type CompletionItemLabelDetails struct { + // An optional string which is rendered less prominently directly after {@link CompletionItem.label label}, + // without any spacing. Should be used for function signatures and type annotations. + Detail string `json:"detail,omitempty"` + // An optional string which is rendered less prominently after {@link CompletionItem.detail}. Should be used + // for fully qualified names and file paths. + Description string `json:"description,omitempty"` +} + +// Completion item tags are extra annotations that tweak the rendering of a completion +// item. +// +// @since 3.15.0 +type CompletionItemTag uint32 + +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#completionItemTagOptions +type CompletionItemTagOptions struct { + // The tags supported by the client. + ValueSet []CompletionItemTag `json:"valueSet"` +} + +// Represents a collection of {@link CompletionItem completion items} to be presented +// in the editor. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#completionList +type CompletionList struct { + // This list it not complete. Further typing results in recomputing this list. + // + // Recomputed lists have all their items replaced (not appended) in the + // incomplete completion sessions. + IsIncomplete bool `json:"isIncomplete"` + // In many cases the items of an actual completion result share the same + // value for properties like `commitCharacters` or the range of a text + // edit. A completion list can therefore define item defaults which will + // be used if a completion item itself doesn't specify the value. + // + // If a completion list specifies a default value and a completion item + // also specifies a corresponding value the one from the item is used. + // + // Servers are only allowed to return default values if the client + // signals support for this via the `completionList.itemDefaults` + // capability. + // + // @since 3.17.0 + ItemDefaults *CompletionItemDefaults `json:"itemDefaults,omitempty"` + // The completion items. + Items []CompletionItem `json:"items"` +} + +// The client supports the following `CompletionList` specific +// capabilities. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#completionListCapabilities +type CompletionListCapabilities struct { + // The client supports the following itemDefaults on + // a completion list. + // + // The value lists the supported property names of the + // `CompletionList.itemDefaults` object. If omitted + // no properties are supported. + // + // @since 3.17.0 + ItemDefaults []string `json:"itemDefaults,omitempty"` +} + +// Completion options. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#completionOptions +type CompletionOptions struct { + // Most tools trigger completion request automatically without explicitly requesting + // it using a keyboard shortcut (e.g. Ctrl+Space). Typically they do so when the user + // starts to type an identifier. For example if the user types `c` in a JavaScript file + // code complete will automatically pop up present `console` besides others as a + // completion item. Characters that make up identifiers don't need to be listed here. + // + // If code complete should automatically be trigger on characters not being valid inside + // an identifier (for example `.` in JavaScript) list them in `triggerCharacters`. + TriggerCharacters []string `json:"triggerCharacters,omitempty"` + // The list of all possible characters that commit a completion. This field can be used + // if clients don't support individual commit characters per completion item. See + // `ClientCapabilities.textDocument.completion.completionItem.commitCharactersSupport` + // + // If a server provides both `allCommitCharacters` and commit characters on an individual + // completion item the ones on the completion item win. + // + // @since 3.2.0 + AllCommitCharacters []string `json:"allCommitCharacters,omitempty"` + // The server provides support to resolve additional + // information for a completion item. + ResolveProvider bool `json:"resolveProvider,omitempty"` + // The server supports the following `CompletionItem` specific + // capabilities. + // + // @since 3.17.0 + CompletionItem *ServerCompletionItemOptions `json:"completionItem,omitempty"` + WorkDoneProgressOptions +} + +// Completion parameters +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#completionParams +type CompletionParams struct { + // The completion context. This is only available it the client specifies + // to send this using the client capability `textDocument.completion.contextSupport === true` + Context CompletionContext `json:"context,omitempty"` + TextDocumentPositionParams + WorkDoneProgressParams + PartialResultParams +} + +// Registration options for a {@link CompletionRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#completionRegistrationOptions +type CompletionRegistrationOptions struct { + TextDocumentRegistrationOptions + CompletionOptions +} + +// How a completion was triggered +type CompletionTriggerKind uint32 + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#configurationItem +type ConfigurationItem struct { + // The scope to get the configuration section for. + ScopeURI *URI `json:"scopeUri,omitempty"` + // The configuration section asked for. + Section string `json:"section,omitempty"` +} + +// The parameters of a configuration request. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#configurationParams +type ConfigurationParams struct { + Items []ConfigurationItem `json:"items"` +} + +// Create file operation. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#createFile +type CreateFile struct { + // A create + Kind string `json:"kind"` + // The resource to create. + URI DocumentUri `json:"uri"` + // Additional options + Options *CreateFileOptions `json:"options,omitempty"` + ResourceOperation +} + +// Options to create a file. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#createFileOptions +type CreateFileOptions struct { + // Overwrite existing file. Overwrite wins over `ignoreIfExists` + Overwrite bool `json:"overwrite,omitempty"` + // Ignore if exists. + IgnoreIfExists bool `json:"ignoreIfExists,omitempty"` +} + +// The parameters sent in notifications/requests for user-initiated creation of +// files. +// +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#createFilesParams +type CreateFilesParams struct { + // An array of all files/folders created in this operation. + Files []FileCreate `json:"files"` +} + +// The declaration of a symbol representation as one or many {@link Location locations}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#declaration +type Declaration = Or_Declaration // (alias) +// @since 3.14.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#declarationClientCapabilities +type DeclarationClientCapabilities struct { + // Whether declaration supports dynamic registration. If this is set to `true` + // the client supports the new `DeclarationRegistrationOptions` return value + // for the corresponding server capability as well. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` + // The client supports additional metadata in the form of declaration links. + LinkSupport bool `json:"linkSupport,omitempty"` +} + +// Information about where a symbol is declared. +// +// Provides additional metadata over normal {@link Location location} declarations, including the range of +// the declaring symbol. +// +// Servers should prefer returning `DeclarationLink` over `Declaration` if supported +// by the client. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#declarationLink +type DeclarationLink = LocationLink // (alias) +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#declarationOptions +type DeclarationOptions struct { + WorkDoneProgressOptions +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#declarationParams +type DeclarationParams struct { + TextDocumentPositionParams + WorkDoneProgressParams + PartialResultParams +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#declarationRegistrationOptions +type DeclarationRegistrationOptions struct { + DeclarationOptions + TextDocumentRegistrationOptions + StaticRegistrationOptions +} + +// The definition of a symbol represented as one or many {@link Location locations}. +// For most programming languages there is only one location at which a symbol is +// defined. +// +// Servers should prefer returning `DefinitionLink` over `Definition` if supported +// by the client. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#definition +type Definition = Or_Definition // (alias) +// Client Capabilities for a {@link DefinitionRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#definitionClientCapabilities +type DefinitionClientCapabilities struct { + // Whether definition supports dynamic registration. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` + // The client supports additional metadata in the form of definition links. + // + // @since 3.14.0 + LinkSupport bool `json:"linkSupport,omitempty"` +} + +// Information about where a symbol is defined. +// +// Provides additional metadata over normal {@link Location location} definitions, including the range of +// the defining symbol +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#definitionLink +type DefinitionLink = LocationLink // (alias) +// Server Capabilities for a {@link DefinitionRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#definitionOptions +type DefinitionOptions struct { + WorkDoneProgressOptions +} + +// Parameters for a {@link DefinitionRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#definitionParams +type DefinitionParams struct { + TextDocumentPositionParams + WorkDoneProgressParams + PartialResultParams +} + +// Registration options for a {@link DefinitionRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#definitionRegistrationOptions +type DefinitionRegistrationOptions struct { + TextDocumentRegistrationOptions + DefinitionOptions +} + +// Delete file operation +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#deleteFile +type DeleteFile struct { + // A delete + Kind string `json:"kind"` + // The file to delete. + URI DocumentUri `json:"uri"` + // Delete options. + Options *DeleteFileOptions `json:"options,omitempty"` + ResourceOperation +} + +// Delete file options +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#deleteFileOptions +type DeleteFileOptions struct { + // Delete the content recursively if a folder is denoted. + Recursive bool `json:"recursive,omitempty"` + // Ignore the operation if the file doesn't exist. + IgnoreIfNotExists bool `json:"ignoreIfNotExists,omitempty"` +} + +// The parameters sent in notifications/requests for user-initiated deletes of +// files. +// +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#deleteFilesParams +type DeleteFilesParams struct { + // An array of all files/folders deleted in this operation. + Files []FileDelete `json:"files"` +} + +// Represents a diagnostic, such as a compiler error or warning. Diagnostic objects +// are only valid in the scope of a resource. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#diagnostic +type Diagnostic struct { + // The range at which the message applies + Range Range `json:"range"` + // The diagnostic's severity. To avoid interpretation mismatches when a + // server is used with different clients it is highly recommended that servers + // always provide a severity value. + Severity DiagnosticSeverity `json:"severity,omitempty"` + // The diagnostic's code, which usually appear in the user interface. + Code interface{} `json:"code,omitempty"` + // An optional property to describe the error code. + // Requires the code field (above) to be present/not null. + // + // @since 3.16.0 + CodeDescription *CodeDescription `json:"codeDescription,omitempty"` + // A human-readable string describing the source of this + // diagnostic, e.g. 'typescript' or 'super lint'. It usually + // appears in the user interface. + Source string `json:"source,omitempty"` + // The diagnostic's message. It usually appears in the user interface + Message string `json:"message"` + // Additional metadata about the diagnostic. + // + // @since 3.15.0 + Tags []DiagnosticTag `json:"tags,omitempty"` + // An array of related diagnostic information, e.g. when symbol-names within + // a scope collide all definitions can be marked via this property. + RelatedInformation []DiagnosticRelatedInformation `json:"relatedInformation,omitempty"` + // A data entry field that is preserved between a `textDocument/publishDiagnostics` + // notification and `textDocument/codeAction` request. + // + // @since 3.16.0 + Data *json.RawMessage `json:"data,omitempty"` +} + +// Client capabilities specific to diagnostic pull requests. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#diagnosticClientCapabilities +type DiagnosticClientCapabilities struct { + // Whether implementation supports dynamic registration. If this is set to `true` + // the client supports the new `(TextDocumentRegistrationOptions & StaticRegistrationOptions)` + // return value for the corresponding server capability as well. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` + // Whether the clients supports related documents for document diagnostic pulls. + RelatedDocumentSupport bool `json:"relatedDocumentSupport,omitempty"` + DiagnosticsCapabilities +} + +// Diagnostic options. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#diagnosticOptions +type DiagnosticOptions struct { + // An optional identifier under which the diagnostics are + // managed by the client. + Identifier string `json:"identifier,omitempty"` + // Whether the language has inter file dependencies meaning that + // editing code in one file can result in a different diagnostic + // set in another file. Inter file dependencies are common for + // most programming languages and typically uncommon for linters. + InterFileDependencies bool `json:"interFileDependencies"` + // The server provides support for workspace diagnostics as well. + WorkspaceDiagnostics bool `json:"workspaceDiagnostics"` + WorkDoneProgressOptions +} + +// Diagnostic registration options. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#diagnosticRegistrationOptions +type DiagnosticRegistrationOptions struct { + TextDocumentRegistrationOptions + DiagnosticOptions + StaticRegistrationOptions +} + +// Represents a related message and source code location for a diagnostic. This should be +// used to point to code locations that cause or related to a diagnostics, e.g when duplicating +// a symbol in a scope. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#diagnosticRelatedInformation +type DiagnosticRelatedInformation struct { + // The location of this related diagnostic information. + Location Location `json:"location"` + // The message of this related diagnostic information. + Message string `json:"message"` +} + +// Cancellation data returned from a diagnostic request. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#diagnosticServerCancellationData +type DiagnosticServerCancellationData struct { + RetriggerRequest bool `json:"retriggerRequest"` +} + +// The diagnostic's severity. +type DiagnosticSeverity uint32 + +// The diagnostic tags. +// +// @since 3.15.0 +type DiagnosticTag uint32 + +// Workspace client capabilities specific to diagnostic pull requests. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#diagnosticWorkspaceClientCapabilities +type DiagnosticWorkspaceClientCapabilities struct { + // Whether the client implementation supports a refresh request sent from + // the server to the client. + // + // Note that this event is global and will force the client to refresh all + // pulled diagnostics currently shown. It should be used with absolute care and + // is useful for situation where a server for example detects a project wide + // change that requires such a calculation. + RefreshSupport bool `json:"refreshSupport,omitempty"` +} + +// General diagnostics capabilities for pull and push model. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#diagnosticsCapabilities +type DiagnosticsCapabilities struct { + // Whether the clients accepts diagnostics with related information. + RelatedInformation bool `json:"relatedInformation,omitempty"` + // Client supports the tag property to provide meta data about a diagnostic. + // Clients supporting tags have to handle unknown tags gracefully. + // + // @since 3.15.0 + TagSupport *ClientDiagnosticsTagOptions `json:"tagSupport,omitempty"` + // Client supports a codeDescription property + // + // @since 3.16.0 + CodeDescriptionSupport bool `json:"codeDescriptionSupport,omitempty"` + // Whether code action supports the `data` property which is + // preserved between a `textDocument/publishDiagnostics` and + // `textDocument/codeAction` request. + // + // @since 3.16.0 + DataSupport bool `json:"dataSupport,omitempty"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#didChangeConfigurationClientCapabilities +type DidChangeConfigurationClientCapabilities struct { + // Did change configuration notification supports dynamic registration. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` +} + +// The parameters of a change configuration notification. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#didChangeConfigurationParams +type DidChangeConfigurationParams struct { + // The actual changed settings + Settings interface{} `json:"settings"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#didChangeConfigurationRegistrationOptions +type DidChangeConfigurationRegistrationOptions struct { + Section *Or_DidChangeConfigurationRegistrationOptions_section `json:"section,omitempty"` +} + +// The params sent in a change notebook document notification. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#didChangeNotebookDocumentParams +type DidChangeNotebookDocumentParams struct { + // The notebook document that did change. The version number points + // to the version after all provided changes have been applied. If + // only the text document content of a cell changes the notebook version + // doesn't necessarily have to change. + NotebookDocument VersionedNotebookDocumentIdentifier `json:"notebookDocument"` + // The actual changes to the notebook document. + // + // The changes describe single state changes to the notebook document. + // So if there are two changes c1 (at array index 0) and c2 (at array + // index 1) for a notebook in state S then c1 moves the notebook from + // S to S' and c2 from S' to S''. So c1 is computed on the state S and + // c2 is computed on the state S'. + // + // To mirror the content of a notebook using change events use the following approach: + // + // - start with the same initial content + // - apply the 'notebookDocument/didChange' notifications in the order you receive them. + // - apply the `NotebookChangeEvent`s in a single notification in the order + // you receive them. + Change NotebookDocumentChangeEvent `json:"change"` +} + +// The change text document notification's parameters. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#didChangeTextDocumentParams +type DidChangeTextDocumentParams struct { + // The document that did change. The version number points + // to the version after all provided content changes have + // been applied. + TextDocument VersionedTextDocumentIdentifier `json:"textDocument"` + // The actual content changes. The content changes describe single state changes + // to the document. So if there are two content changes c1 (at array index 0) and + // c2 (at array index 1) for a document in state S then c1 moves the document from + // S to S' and c2 from S' to S''. So c1 is computed on the state S and c2 is computed + // on the state S'. + // + // To mirror the content of a document using change events use the following approach: + // + // - start with the same initial content + // - apply the 'textDocument/didChange' notifications in the order you receive them. + // - apply the `TextDocumentContentChangeEvent`s in a single notification in the order + // you receive them. + ContentChanges []TextDocumentContentChangeEvent `json:"contentChanges"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#didChangeWatchedFilesClientCapabilities +type DidChangeWatchedFilesClientCapabilities struct { + // Did change watched files notification supports dynamic registration. Please note + // that the current protocol doesn't support static configuration for file changes + // from the server side. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` + // Whether the client has support for {@link RelativePattern relative pattern} + // or not. + // + // @since 3.17.0 + RelativePatternSupport bool `json:"relativePatternSupport,omitempty"` +} + +// The watched files change notification's parameters. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#didChangeWatchedFilesParams +type DidChangeWatchedFilesParams struct { + // The actual file events. + Changes []FileEvent `json:"changes"` +} + +// Describe options to be used when registered for text document change events. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#didChangeWatchedFilesRegistrationOptions +type DidChangeWatchedFilesRegistrationOptions struct { + // The watchers to register. + Watchers []FileSystemWatcher `json:"watchers"` +} + +// The parameters of a `workspace/didChangeWorkspaceFolders` notification. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#didChangeWorkspaceFoldersParams +type DidChangeWorkspaceFoldersParams struct { + // The actual workspace folder change event. + Event WorkspaceFoldersChangeEvent `json:"event"` +} + +// The params sent in a close notebook document notification. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#didCloseNotebookDocumentParams +type DidCloseNotebookDocumentParams struct { + // The notebook document that got closed. + NotebookDocument NotebookDocumentIdentifier `json:"notebookDocument"` + // The text documents that represent the content + // of a notebook cell that got closed. + CellTextDocuments []TextDocumentIdentifier `json:"cellTextDocuments"` +} + +// The parameters sent in a close text document notification +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#didCloseTextDocumentParams +type DidCloseTextDocumentParams struct { + // The document that was closed. + TextDocument TextDocumentIdentifier `json:"textDocument"` +} + +// The params sent in an open notebook document notification. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#didOpenNotebookDocumentParams +type DidOpenNotebookDocumentParams struct { + // The notebook document that got opened. + NotebookDocument NotebookDocument `json:"notebookDocument"` + // The text documents that represent the content + // of a notebook cell. + CellTextDocuments []TextDocumentItem `json:"cellTextDocuments"` +} + +// The parameters sent in an open text document notification +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#didOpenTextDocumentParams +type DidOpenTextDocumentParams struct { + // The document that was opened. + TextDocument TextDocumentItem `json:"textDocument"` +} + +// The params sent in a save notebook document notification. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#didSaveNotebookDocumentParams +type DidSaveNotebookDocumentParams struct { + // The notebook document that got saved. + NotebookDocument NotebookDocumentIdentifier `json:"notebookDocument"` +} + +// The parameters sent in a save text document notification +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#didSaveTextDocumentParams +type DidSaveTextDocumentParams struct { + // The document that was saved. + TextDocument TextDocumentIdentifier `json:"textDocument"` + // Optional the content when saved. Depends on the includeText value + // when the save notification was requested. + Text *string `json:"text,omitempty"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentColorClientCapabilities +type DocumentColorClientCapabilities struct { + // Whether implementation supports dynamic registration. If this is set to `true` + // the client supports the new `DocumentColorRegistrationOptions` return value + // for the corresponding server capability as well. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentColorOptions +type DocumentColorOptions struct { + WorkDoneProgressOptions +} + +// Parameters for a {@link DocumentColorRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentColorParams +type DocumentColorParams struct { + // The text document. + TextDocument TextDocumentIdentifier `json:"textDocument"` + WorkDoneProgressParams + PartialResultParams +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentColorRegistrationOptions +type DocumentColorRegistrationOptions struct { + TextDocumentRegistrationOptions + DocumentColorOptions + StaticRegistrationOptions +} + +// Parameters of the document diagnostic request. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentDiagnosticParams +type DocumentDiagnosticParams struct { + // The text document. + TextDocument TextDocumentIdentifier `json:"textDocument"` + // The additional identifier provided during registration. + Identifier string `json:"identifier,omitempty"` + // The result id of a previous response if provided. + PreviousResultID string `json:"previousResultId,omitempty"` + WorkDoneProgressParams + PartialResultParams +} + +// The result of a document diagnostic pull request. A report can +// either be a full report containing all diagnostics for the +// requested document or an unchanged report indicating that nothing +// has changed in terms of diagnostics in comparison to the last +// pull request. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentDiagnosticReport +type DocumentDiagnosticReport = Or_DocumentDiagnosticReport // (alias) +// The document diagnostic report kinds. +// +// @since 3.17.0 +type DocumentDiagnosticReportKind string + +// A partial result for a document diagnostic report. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentDiagnosticReportPartialResult +type DocumentDiagnosticReportPartialResult struct { + RelatedDocuments map[DocumentUri]interface{} `json:"relatedDocuments"` +} + +// A document filter describes a top level text document or +// a notebook cell document. +// +// @since 3.17.0 - proposed support for NotebookCellTextDocumentFilter. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentFilter +type DocumentFilter = Or_DocumentFilter // (alias) +// Client capabilities of a {@link DocumentFormattingRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentFormattingClientCapabilities +type DocumentFormattingClientCapabilities struct { + // Whether formatting supports dynamic registration. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` +} + +// Provider options for a {@link DocumentFormattingRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentFormattingOptions +type DocumentFormattingOptions struct { + WorkDoneProgressOptions +} + +// The parameters of a {@link DocumentFormattingRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentFormattingParams +type DocumentFormattingParams struct { + // The document to format. + TextDocument TextDocumentIdentifier `json:"textDocument"` + // The format options. + Options FormattingOptions `json:"options"` + WorkDoneProgressParams +} + +// Registration options for a {@link DocumentFormattingRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentFormattingRegistrationOptions +type DocumentFormattingRegistrationOptions struct { + TextDocumentRegistrationOptions + DocumentFormattingOptions +} + +// A document highlight is a range inside a text document which deserves +// special attention. Usually a document highlight is visualized by changing +// the background color of its range. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentHighlight +type DocumentHighlight struct { + // The range this highlight applies to. + Range Range `json:"range"` + // The highlight kind, default is {@link DocumentHighlightKind.Text text}. + Kind DocumentHighlightKind `json:"kind,omitempty"` +} + +// Client Capabilities for a {@link DocumentHighlightRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentHighlightClientCapabilities +type DocumentHighlightClientCapabilities struct { + // Whether document highlight supports dynamic registration. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` +} + +// A document highlight kind. +type DocumentHighlightKind uint32 + +// Provider options for a {@link DocumentHighlightRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentHighlightOptions +type DocumentHighlightOptions struct { + WorkDoneProgressOptions +} + +// Parameters for a {@link DocumentHighlightRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentHighlightParams +type DocumentHighlightParams struct { + TextDocumentPositionParams + WorkDoneProgressParams + PartialResultParams +} + +// Registration options for a {@link DocumentHighlightRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentHighlightRegistrationOptions +type DocumentHighlightRegistrationOptions struct { + TextDocumentRegistrationOptions + DocumentHighlightOptions +} + +// A document link is a range in a text document that links to an internal or external resource, like another +// text document or a web site. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentLink +type DocumentLink struct { + // The range this link applies to. + Range Range `json:"range"` + // The uri this link points to. If missing a resolve request is sent later. + Target *URI `json:"target,omitempty"` + // The tooltip text when you hover over this link. + // + // If a tooltip is provided, is will be displayed in a string that includes instructions on how to + // trigger the link, such as `{0} (ctrl + click)`. The specific instructions vary depending on OS, + // user settings, and localization. + // + // @since 3.15.0 + Tooltip string `json:"tooltip,omitempty"` + // A data entry field that is preserved on a document link between a + // DocumentLinkRequest and a DocumentLinkResolveRequest. + Data interface{} `json:"data,omitempty"` +} + +// The client capabilities of a {@link DocumentLinkRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentLinkClientCapabilities +type DocumentLinkClientCapabilities struct { + // Whether document link supports dynamic registration. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` + // Whether the client supports the `tooltip` property on `DocumentLink`. + // + // @since 3.15.0 + TooltipSupport bool `json:"tooltipSupport,omitempty"` +} + +// Provider options for a {@link DocumentLinkRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentLinkOptions +type DocumentLinkOptions struct { + // Document links have a resolve provider as well. + ResolveProvider bool `json:"resolveProvider,omitempty"` + WorkDoneProgressOptions +} + +// The parameters of a {@link DocumentLinkRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentLinkParams +type DocumentLinkParams struct { + // The document to provide document links for. + TextDocument TextDocumentIdentifier `json:"textDocument"` + WorkDoneProgressParams + PartialResultParams +} + +// Registration options for a {@link DocumentLinkRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentLinkRegistrationOptions +type DocumentLinkRegistrationOptions struct { + TextDocumentRegistrationOptions + DocumentLinkOptions +} + +// Client capabilities of a {@link DocumentOnTypeFormattingRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentOnTypeFormattingClientCapabilities +type DocumentOnTypeFormattingClientCapabilities struct { + // Whether on type formatting supports dynamic registration. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` +} + +// Provider options for a {@link DocumentOnTypeFormattingRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentOnTypeFormattingOptions +type DocumentOnTypeFormattingOptions struct { + // A character on which formatting should be triggered, like `{`. + FirstTriggerCharacter string `json:"firstTriggerCharacter"` + // More trigger characters. + MoreTriggerCharacter []string `json:"moreTriggerCharacter,omitempty"` +} + +// The parameters of a {@link DocumentOnTypeFormattingRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentOnTypeFormattingParams +type DocumentOnTypeFormattingParams struct { + // The document to format. + TextDocument TextDocumentIdentifier `json:"textDocument"` + // The position around which the on type formatting should happen. + // This is not necessarily the exact position where the character denoted + // by the property `ch` got typed. + Position Position `json:"position"` + // The character that has been typed that triggered the formatting + // on type request. That is not necessarily the last character that + // got inserted into the document since the client could auto insert + // characters as well (e.g. like automatic brace completion). + Ch string `json:"ch"` + // The formatting options. + Options FormattingOptions `json:"options"` +} + +// Registration options for a {@link DocumentOnTypeFormattingRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentOnTypeFormattingRegistrationOptions +type DocumentOnTypeFormattingRegistrationOptions struct { + TextDocumentRegistrationOptions + DocumentOnTypeFormattingOptions +} + +// Client capabilities of a {@link DocumentRangeFormattingRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentRangeFormattingClientCapabilities +type DocumentRangeFormattingClientCapabilities struct { + // Whether range formatting supports dynamic registration. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` + // Whether the client supports formatting multiple ranges at once. + // + // @since 3.18.0 + // @proposed + RangesSupport bool `json:"rangesSupport,omitempty"` +} + +// Provider options for a {@link DocumentRangeFormattingRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentRangeFormattingOptions +type DocumentRangeFormattingOptions struct { + // Whether the server supports formatting multiple ranges at once. + // + // @since 3.18.0 + // @proposed + RangesSupport bool `json:"rangesSupport,omitempty"` + WorkDoneProgressOptions +} + +// The parameters of a {@link DocumentRangeFormattingRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentRangeFormattingParams +type DocumentRangeFormattingParams struct { + // The document to format. + TextDocument TextDocumentIdentifier `json:"textDocument"` + // The range to format + Range Range `json:"range"` + // The format options + Options FormattingOptions `json:"options"` + WorkDoneProgressParams +} + +// Registration options for a {@link DocumentRangeFormattingRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentRangeFormattingRegistrationOptions +type DocumentRangeFormattingRegistrationOptions struct { + TextDocumentRegistrationOptions + DocumentRangeFormattingOptions +} + +// The parameters of a {@link DocumentRangesFormattingRequest}. +// +// @since 3.18.0 +// @proposed +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentRangesFormattingParams +type DocumentRangesFormattingParams struct { + // The document to format. + TextDocument TextDocumentIdentifier `json:"textDocument"` + // The ranges to format + Ranges []Range `json:"ranges"` + // The format options + Options FormattingOptions `json:"options"` + WorkDoneProgressParams +} + +// A document selector is the combination of one or many document filters. +// +// @sample `let sel:DocumentSelector = [{ language: 'typescript' }, { language: 'json', pattern: '**∕tsconfig.json' }]`; +// +// The use of a string as a document filter is deprecated @since 3.16.0. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentSelector +type DocumentSelector = []DocumentFilter // (alias) +// Represents programming constructs like variables, classes, interfaces etc. +// that appear in a document. Document symbols can be hierarchical and they +// have two ranges: one that encloses its definition and one that points to +// its most interesting range, e.g. the range of an identifier. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentSymbol +type DocumentSymbol struct { + // The name of this symbol. Will be displayed in the user interface and therefore must not be + // an empty string or a string only consisting of white spaces. + Name string `json:"name"` + // More detail for this symbol, e.g the signature of a function. + Detail string `json:"detail,omitempty"` + // The kind of this symbol. + Kind SymbolKind `json:"kind"` + // Tags for this document symbol. + // + // @since 3.16.0 + Tags []SymbolTag `json:"tags,omitempty"` + // Indicates if this symbol is deprecated. + // + // @deprecated Use tags instead + Deprecated bool `json:"deprecated,omitempty"` + // The range enclosing this symbol not including leading/trailing whitespace but everything else + // like comments. This information is typically used to determine if the clients cursor is + // inside the symbol to reveal in the symbol in the UI. + Range Range `json:"range"` + // The range that should be selected and revealed when this symbol is being picked, e.g the name of a function. + // Must be contained by the `range`. + SelectionRange Range `json:"selectionRange"` + // Children of this symbol, e.g. properties of a class. + Children []DocumentSymbol `json:"children,omitempty"` +} + +// Client Capabilities for a {@link DocumentSymbolRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentSymbolClientCapabilities +type DocumentSymbolClientCapabilities struct { + // Whether document symbol supports dynamic registration. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` + // Specific capabilities for the `SymbolKind` in the + // `textDocument/documentSymbol` request. + SymbolKind *ClientSymbolKindOptions `json:"symbolKind,omitempty"` + // The client supports hierarchical document symbols. + HierarchicalDocumentSymbolSupport bool `json:"hierarchicalDocumentSymbolSupport,omitempty"` + // The client supports tags on `SymbolInformation`. Tags are supported on + // `DocumentSymbol` if `hierarchicalDocumentSymbolSupport` is set to true. + // Clients supporting tags have to handle unknown tags gracefully. + // + // @since 3.16.0 + TagSupport *ClientSymbolTagOptions `json:"tagSupport,omitempty"` + // The client supports an additional label presented in the UI when + // registering a document symbol provider. + // + // @since 3.16.0 + LabelSupport bool `json:"labelSupport,omitempty"` +} + +// Provider options for a {@link DocumentSymbolRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentSymbolOptions +type DocumentSymbolOptions struct { + // A human-readable string that is shown when multiple outlines trees + // are shown for the same document. + // + // @since 3.16.0 + Label string `json:"label,omitempty"` + WorkDoneProgressOptions +} + +// Parameters for a {@link DocumentSymbolRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentSymbolParams +type DocumentSymbolParams struct { + // The text document. + TextDocument TextDocumentIdentifier `json:"textDocument"` + WorkDoneProgressParams + PartialResultParams +} + +// Registration options for a {@link DocumentSymbolRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#documentSymbolRegistrationOptions +type DocumentSymbolRegistrationOptions struct { + TextDocumentRegistrationOptions + DocumentSymbolOptions +} + +// Edit range variant that includes ranges for insert and replace operations. +// +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#editRangeWithInsertReplace +type EditRangeWithInsertReplace struct { + Insert Range `json:"insert"` + Replace Range `json:"replace"` +} + +// Predefined error codes. +type ErrorCodes int32 + +// The client capabilities of a {@link ExecuteCommandRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#executeCommandClientCapabilities +type ExecuteCommandClientCapabilities struct { + // Execute command supports dynamic registration. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` +} + +// The server capabilities of a {@link ExecuteCommandRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#executeCommandOptions +type ExecuteCommandOptions struct { + // The commands to be executed on the server + Commands []string `json:"commands"` + WorkDoneProgressOptions +} + +// The parameters of a {@link ExecuteCommandRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#executeCommandParams +type ExecuteCommandParams struct { + // The identifier of the actual command handler. + Command string `json:"command"` + // Arguments that the command should be invoked with. + Arguments []json.RawMessage `json:"arguments,omitempty"` + WorkDoneProgressParams +} + +// Registration options for a {@link ExecuteCommandRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#executeCommandRegistrationOptions +type ExecuteCommandRegistrationOptions struct { + ExecuteCommandOptions +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#executionSummary +type ExecutionSummary struct { + // A strict monotonically increasing value + // indicating the execution order of a cell + // inside a notebook. + ExecutionOrder uint32 `json:"executionOrder"` + // Whether the execution was successful or + // not if known by the client. + Success bool `json:"success,omitempty"` +} +type FailureHandlingKind string + +// The file event type +type FileChangeType uint32 + +// Represents information on a file/folder create. +// +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#fileCreate +type FileCreate struct { + // A file:// URI for the location of the file/folder being created. + URI string `json:"uri"` +} + +// Represents information on a file/folder delete. +// +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#fileDelete +type FileDelete struct { + // A file:// URI for the location of the file/folder being deleted. + URI string `json:"uri"` +} + +// An event describing a file change. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#fileEvent +type FileEvent struct { + // The file's uri. + URI DocumentUri `json:"uri"` + // The change type. + Type FileChangeType `json:"type"` +} + +// Capabilities relating to events from file operations by the user in the client. +// +// These events do not come from the file system, they come from user operations +// like renaming a file in the UI. +// +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#fileOperationClientCapabilities +type FileOperationClientCapabilities struct { + // Whether the client supports dynamic registration for file requests/notifications. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` + // The client has support for sending didCreateFiles notifications. + DidCreate bool `json:"didCreate,omitempty"` + // The client has support for sending willCreateFiles requests. + WillCreate bool `json:"willCreate,omitempty"` + // The client has support for sending didRenameFiles notifications. + DidRename bool `json:"didRename,omitempty"` + // The client has support for sending willRenameFiles requests. + WillRename bool `json:"willRename,omitempty"` + // The client has support for sending didDeleteFiles notifications. + DidDelete bool `json:"didDelete,omitempty"` + // The client has support for sending willDeleteFiles requests. + WillDelete bool `json:"willDelete,omitempty"` +} + +// A filter to describe in which file operation requests or notifications +// the server is interested in receiving. +// +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#fileOperationFilter +type FileOperationFilter struct { + // A Uri scheme like `file` or `untitled`. + Scheme string `json:"scheme,omitempty"` + // The actual file operation pattern. + Pattern FileOperationPattern `json:"pattern"` +} + +// Options for notifications/requests for user operations on files. +// +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#fileOperationOptions +type FileOperationOptions struct { + // The server is interested in receiving didCreateFiles notifications. + DidCreate *FileOperationRegistrationOptions `json:"didCreate,omitempty"` + // The server is interested in receiving willCreateFiles requests. + WillCreate *FileOperationRegistrationOptions `json:"willCreate,omitempty"` + // The server is interested in receiving didRenameFiles notifications. + DidRename *FileOperationRegistrationOptions `json:"didRename,omitempty"` + // The server is interested in receiving willRenameFiles requests. + WillRename *FileOperationRegistrationOptions `json:"willRename,omitempty"` + // The server is interested in receiving didDeleteFiles file notifications. + DidDelete *FileOperationRegistrationOptions `json:"didDelete,omitempty"` + // The server is interested in receiving willDeleteFiles file requests. + WillDelete *FileOperationRegistrationOptions `json:"willDelete,omitempty"` +} + +// A pattern to describe in which file operation requests or notifications +// the server is interested in receiving. +// +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#fileOperationPattern +type FileOperationPattern struct { + // The glob pattern to match. Glob patterns can have the following syntax: + // + // - `*` to match one or more characters in a path segment + // - `?` to match on one character in a path segment + // - `**` to match any number of path segments, including none + // - `{}` to group sub patterns into an OR expression. (e.g. `**/*.{ts,js}` matches all TypeScript and JavaScript files) + // - `[]` to declare a range of characters to match in a path segment (e.g., `example.[0-9]` to match on `example.0`, `example.1`, …) + // - `[!...]` to negate a range of characters to match in a path segment (e.g., `example.[!0-9]` to match on `example.a`, `example.b`, but not `example.0`) + Glob string `json:"glob"` + // Whether to match files or folders with this pattern. + // + // Matches both if undefined. + Matches *FileOperationPatternKind `json:"matches,omitempty"` + // Additional options used during matching. + Options *FileOperationPatternOptions `json:"options,omitempty"` +} + +// A pattern kind describing if a glob pattern matches a file a folder or +// both. +// +// @since 3.16.0 +type FileOperationPatternKind string + +// Matching options for the file operation pattern. +// +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#fileOperationPatternOptions +type FileOperationPatternOptions struct { + // The pattern should be matched ignoring casing. + IgnoreCase bool `json:"ignoreCase,omitempty"` +} + +// The options to register for file operations. +// +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#fileOperationRegistrationOptions +type FileOperationRegistrationOptions struct { + // The actual filters. + Filters []FileOperationFilter `json:"filters"` +} + +// Represents information on a file/folder rename. +// +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#fileRename +type FileRename struct { + // A file:// URI for the original location of the file/folder being renamed. + OldURI string `json:"oldUri"` + // A file:// URI for the new location of the file/folder being renamed. + NewURI string `json:"newUri"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#fileSystemWatcher +type FileSystemWatcher struct { + // The glob pattern to watch. See {@link GlobPattern glob pattern} for more detail. + // + // @since 3.17.0 support for relative patterns. + GlobPattern GlobPattern `json:"globPattern"` + // The kind of events of interest. If omitted it defaults + // to WatchKind.Create | WatchKind.Change | WatchKind.Delete + // which is 7. + Kind *WatchKind `json:"kind,omitempty"` +} + +// Represents a folding range. To be valid, start and end line must be bigger than zero and smaller +// than the number of lines in the document. Clients are free to ignore invalid ranges. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#foldingRange +type FoldingRange struct { + // The zero-based start line of the range to fold. The folded area starts after the line's last character. + // To be valid, the end must be zero or larger and smaller than the number of lines in the document. + StartLine uint32 `json:"startLine"` + // The zero-based character offset from where the folded range starts. If not defined, defaults to the length of the start line. + StartCharacter uint32 `json:"startCharacter,omitempty"` + // The zero-based end line of the range to fold. The folded area ends with the line's last character. + // To be valid, the end must be zero or larger and smaller than the number of lines in the document. + EndLine uint32 `json:"endLine"` + // The zero-based character offset before the folded range ends. If not defined, defaults to the length of the end line. + EndCharacter uint32 `json:"endCharacter,omitempty"` + // Describes the kind of the folding range such as 'comment' or 'region'. The kind + // is used to categorize folding ranges and used by commands like 'Fold all comments'. + // See {@link FoldingRangeKind} for an enumeration of standardized kinds. + Kind string `json:"kind,omitempty"` + // The text that the client should show when the specified range is + // collapsed. If not defined or not supported by the client, a default + // will be chosen by the client. + // + // @since 3.17.0 + CollapsedText string `json:"collapsedText,omitempty"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#foldingRangeClientCapabilities +type FoldingRangeClientCapabilities struct { + // Whether implementation supports dynamic registration for folding range + // providers. If this is set to `true` the client supports the new + // `FoldingRangeRegistrationOptions` return value for the corresponding + // server capability as well. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` + // The maximum number of folding ranges that the client prefers to receive + // per document. The value serves as a hint, servers are free to follow the + // limit. + RangeLimit uint32 `json:"rangeLimit,omitempty"` + // If set, the client signals that it only supports folding complete lines. + // If set, client will ignore specified `startCharacter` and `endCharacter` + // properties in a FoldingRange. + LineFoldingOnly bool `json:"lineFoldingOnly,omitempty"` + // Specific options for the folding range kind. + // + // @since 3.17.0 + FoldingRangeKind *ClientFoldingRangeKindOptions `json:"foldingRangeKind,omitempty"` + // Specific options for the folding range. + // + // @since 3.17.0 + FoldingRange *ClientFoldingRangeOptions `json:"foldingRange,omitempty"` +} + +// A set of predefined range kinds. +type FoldingRangeKind string + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#foldingRangeOptions +type FoldingRangeOptions struct { + WorkDoneProgressOptions +} + +// Parameters for a {@link FoldingRangeRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#foldingRangeParams +type FoldingRangeParams struct { + // The text document. + TextDocument TextDocumentIdentifier `json:"textDocument"` + WorkDoneProgressParams + PartialResultParams +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#foldingRangeRegistrationOptions +type FoldingRangeRegistrationOptions struct { + TextDocumentRegistrationOptions + FoldingRangeOptions + StaticRegistrationOptions +} + +// Client workspace capabilities specific to folding ranges +// +// @since 3.18.0 +// @proposed +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#foldingRangeWorkspaceClientCapabilities +type FoldingRangeWorkspaceClientCapabilities struct { + // Whether the client implementation supports a refresh request sent from the + // server to the client. + // + // Note that this event is global and will force the client to refresh all + // folding ranges currently shown. It should be used with absolute care and is + // useful for situation where a server for example detects a project wide + // change that requires such a calculation. + // + // @since 3.18.0 + // @proposed + RefreshSupport bool `json:"refreshSupport,omitempty"` +} + +// Value-object describing what options formatting should use. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#formattingOptions +type FormattingOptions struct { + // Size of a tab in spaces. + TabSize uint32 `json:"tabSize"` + // Prefer spaces over tabs. + InsertSpaces bool `json:"insertSpaces"` + // Trim trailing whitespace on a line. + // + // @since 3.15.0 + TrimTrailingWhitespace bool `json:"trimTrailingWhitespace,omitempty"` + // Insert a newline character at the end of the file if one does not exist. + // + // @since 3.15.0 + InsertFinalNewline bool `json:"insertFinalNewline,omitempty"` + // Trim all newlines after the final newline at the end of the file. + // + // @since 3.15.0 + TrimFinalNewlines bool `json:"trimFinalNewlines,omitempty"` +} + +// A diagnostic report with a full set of problems. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#fullDocumentDiagnosticReport +type FullDocumentDiagnosticReport struct { + // A full document diagnostic report. + Kind string `json:"kind"` + // An optional result id. If provided it will + // be sent on the next diagnostic request for the + // same document. + ResultID string `json:"resultId,omitempty"` + // The actual items. + Items []Diagnostic `json:"items"` +} + +// General client capabilities. +// +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#generalClientCapabilities +type GeneralClientCapabilities struct { + // Client capability that signals how the client + // handles stale requests (e.g. a request + // for which the client will not process the response + // anymore since the information is outdated). + // + // @since 3.17.0 + StaleRequestSupport *StaleRequestSupportOptions `json:"staleRequestSupport,omitempty"` + // Client capabilities specific to regular expressions. + // + // @since 3.16.0 + RegularExpressions *RegularExpressionsClientCapabilities `json:"regularExpressions,omitempty"` + // Client capabilities specific to the client's markdown parser. + // + // @since 3.16.0 + Markdown *MarkdownClientCapabilities `json:"markdown,omitempty"` + // The position encodings supported by the client. Client and server + // have to agree on the same position encoding to ensure that offsets + // (e.g. character position in a line) are interpreted the same on both + // sides. + // + // To keep the protocol backwards compatible the following applies: if + // the value 'utf-16' is missing from the array of position encodings + // servers can assume that the client supports UTF-16. UTF-16 is + // therefore a mandatory encoding. + // + // If omitted it defaults to ['utf-16']. + // + // Implementation considerations: since the conversion from one encoding + // into another requires the content of the file / line the conversion + // is best done where the file is read which is usually on the server + // side. + // + // @since 3.17.0 + PositionEncodings []PositionEncodingKind `json:"positionEncodings,omitempty"` +} + +// The glob pattern. Either a string pattern or a relative pattern. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#globPattern +type GlobPattern = Or_GlobPattern // (alias) +// The result of a hover request. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#hover +type Hover struct { + // The hover's content + Contents MarkupContent `json:"contents"` + // An optional range inside the text document that is used to + // visualize the hover, e.g. by changing the background color. + Range Range `json:"range,omitempty"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#hoverClientCapabilities +type HoverClientCapabilities struct { + // Whether hover supports dynamic registration. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` + // Client supports the following content formats for the content + // property. The order describes the preferred format of the client. + ContentFormat []MarkupKind `json:"contentFormat,omitempty"` +} + +// Hover options. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#hoverOptions +type HoverOptions struct { + WorkDoneProgressOptions +} + +// Parameters for a {@link HoverRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#hoverParams +type HoverParams struct { + TextDocumentPositionParams + WorkDoneProgressParams +} + +// Registration options for a {@link HoverRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#hoverRegistrationOptions +type HoverRegistrationOptions struct { + TextDocumentRegistrationOptions + HoverOptions +} + +// @since 3.6.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#implementationClientCapabilities +type ImplementationClientCapabilities struct { + // Whether implementation supports dynamic registration. If this is set to `true` + // the client supports the new `ImplementationRegistrationOptions` return value + // for the corresponding server capability as well. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` + // The client supports additional metadata in the form of definition links. + // + // @since 3.14.0 + LinkSupport bool `json:"linkSupport,omitempty"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#implementationOptions +type ImplementationOptions struct { + WorkDoneProgressOptions +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#implementationParams +type ImplementationParams struct { + TextDocumentPositionParams + WorkDoneProgressParams + PartialResultParams +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#implementationRegistrationOptions +type ImplementationRegistrationOptions struct { + TextDocumentRegistrationOptions + ImplementationOptions + StaticRegistrationOptions +} + +// The data type of the ResponseError if the +// initialize request fails. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#initializeError +type InitializeError struct { + // Indicates whether the client execute the following retry logic: + // (1) show the message provided by the ResponseError to the user + // (2) user selects retry or cancel + // (3) if user selected retry the initialize method is sent again. + Retry bool `json:"retry"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#initializeParams +type InitializeParams struct { + XInitializeParams + WorkspaceFoldersInitializeParams +} + +// The result returned from an initialize request. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#initializeResult +type InitializeResult struct { + // The capabilities the language server provides. + Capabilities ServerCapabilities `json:"capabilities"` + // Information about the server. + // + // @since 3.15.0 + ServerInfo *ServerInfo `json:"serverInfo,omitempty"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#initializedParams +type InitializedParams struct { +} + +// Inlay hint information. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#inlayHint +type InlayHint struct { + // The position of this hint. + // + // If multiple hints have the same position, they will be shown in the order + // they appear in the response. + Position Position `json:"position"` + // The label of this hint. A human readable string or an array of + // InlayHintLabelPart label parts. + // + // *Note* that neither the string nor the label part can be empty. + Label []InlayHintLabelPart `json:"label"` + // The kind of this hint. Can be omitted in which case the client + // should fall back to a reasonable default. + Kind InlayHintKind `json:"kind,omitempty"` + // Optional text edits that are performed when accepting this inlay hint. + // + // *Note* that edits are expected to change the document so that the inlay + // hint (or its nearest variant) is now part of the document and the inlay + // hint itself is now obsolete. + TextEdits []TextEdit `json:"textEdits,omitempty"` + // The tooltip text when you hover over this item. + Tooltip *Or_InlayHint_tooltip `json:"tooltip,omitempty"` + // Render padding before the hint. + // + // Note: Padding should use the editor's background color, not the + // background color of the hint itself. That means padding can be used + // to visually align/separate an inlay hint. + PaddingLeft bool `json:"paddingLeft,omitempty"` + // Render padding after the hint. + // + // Note: Padding should use the editor's background color, not the + // background color of the hint itself. That means padding can be used + // to visually align/separate an inlay hint. + PaddingRight bool `json:"paddingRight,omitempty"` + // A data entry field that is preserved on an inlay hint between + // a `textDocument/inlayHint` and a `inlayHint/resolve` request. + Data interface{} `json:"data,omitempty"` +} + +// Inlay hint client capabilities. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#inlayHintClientCapabilities +type InlayHintClientCapabilities struct { + // Whether inlay hints support dynamic registration. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` + // Indicates which properties a client can resolve lazily on an inlay + // hint. + ResolveSupport *ClientInlayHintResolveOptions `json:"resolveSupport,omitempty"` +} + +// Inlay hint kinds. +// +// @since 3.17.0 +type InlayHintKind uint32 + +// An inlay hint label part allows for interactive and composite labels +// of inlay hints. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#inlayHintLabelPart +type InlayHintLabelPart struct { + // The value of this label part. + Value string `json:"value"` + // The tooltip text when you hover over this label part. Depending on + // the client capability `inlayHint.resolveSupport` clients might resolve + // this property late using the resolve request. + Tooltip *Or_InlayHintLabelPart_tooltip `json:"tooltip,omitempty"` + // An optional source code location that represents this + // label part. + // + // The editor will use this location for the hover and for code navigation + // features: This part will become a clickable link that resolves to the + // definition of the symbol at the given location (not necessarily the + // location itself), it shows the hover that shows at the given location, + // and it shows a context menu with further code navigation commands. + // + // Depending on the client capability `inlayHint.resolveSupport` clients + // might resolve this property late using the resolve request. + Location *Location `json:"location,omitempty"` + // An optional command for this label part. + // + // Depending on the client capability `inlayHint.resolveSupport` clients + // might resolve this property late using the resolve request. + Command *Command `json:"command,omitempty"` +} + +// Inlay hint options used during static registration. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#inlayHintOptions +type InlayHintOptions struct { + // The server provides support to resolve additional + // information for an inlay hint item. + ResolveProvider bool `json:"resolveProvider,omitempty"` + WorkDoneProgressOptions +} + +// A parameter literal used in inlay hint requests. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#inlayHintParams +type InlayHintParams struct { + // The text document. + TextDocument TextDocumentIdentifier `json:"textDocument"` + // The document range for which inlay hints should be computed. + Range Range `json:"range"` + WorkDoneProgressParams +} + +// Inlay hint options used during static or dynamic registration. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#inlayHintRegistrationOptions +type InlayHintRegistrationOptions struct { + InlayHintOptions + TextDocumentRegistrationOptions + StaticRegistrationOptions +} + +// Client workspace capabilities specific to inlay hints. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#inlayHintWorkspaceClientCapabilities +type InlayHintWorkspaceClientCapabilities struct { + // Whether the client implementation supports a refresh request sent from + // the server to the client. + // + // Note that this event is global and will force the client to refresh all + // inlay hints currently shown. It should be used with absolute care and + // is useful for situation where a server for example detects a project wide + // change that requires such a calculation. + RefreshSupport bool `json:"refreshSupport,omitempty"` +} + +// Client capabilities specific to inline completions. +// +// @since 3.18.0 +// @proposed +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#inlineCompletionClientCapabilities +type InlineCompletionClientCapabilities struct { + // Whether implementation supports dynamic registration for inline completion providers. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` +} + +// Provides information about the context in which an inline completion was requested. +// +// @since 3.18.0 +// @proposed +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#inlineCompletionContext +type InlineCompletionContext struct { + // Describes how the inline completion was triggered. + TriggerKind InlineCompletionTriggerKind `json:"triggerKind"` + // Provides information about the currently selected item in the autocomplete widget if it is visible. + SelectedCompletionInfo *SelectedCompletionInfo `json:"selectedCompletionInfo,omitempty"` +} + +// An inline completion item represents a text snippet that is proposed inline to complete text that is being typed. +// +// @since 3.18.0 +// @proposed +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#inlineCompletionItem +type InlineCompletionItem struct { + // The text to replace the range with. Must be set. + InsertText Or_InlineCompletionItem_insertText `json:"insertText"` + // A text that is used to decide if this inline completion should be shown. When `falsy` the {@link InlineCompletionItem.insertText} is used. + FilterText string `json:"filterText,omitempty"` + // The range to replace. Must begin and end on the same line. + Range *Range `json:"range,omitempty"` + // An optional {@link Command} that is executed *after* inserting this completion. + Command *Command `json:"command,omitempty"` +} + +// Represents a collection of {@link InlineCompletionItem inline completion items} to be presented in the editor. +// +// @since 3.18.0 +// @proposed +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#inlineCompletionList +type InlineCompletionList struct { + // The inline completion items + Items []InlineCompletionItem `json:"items"` +} + +// Inline completion options used during static registration. +// +// @since 3.18.0 +// @proposed +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#inlineCompletionOptions +type InlineCompletionOptions struct { + WorkDoneProgressOptions +} + +// A parameter literal used in inline completion requests. +// +// @since 3.18.0 +// @proposed +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#inlineCompletionParams +type InlineCompletionParams struct { + // Additional information about the context in which inline completions were + // requested. + Context InlineCompletionContext `json:"context"` + TextDocumentPositionParams + WorkDoneProgressParams +} + +// Inline completion options used during static or dynamic registration. +// +// @since 3.18.0 +// @proposed +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#inlineCompletionRegistrationOptions +type InlineCompletionRegistrationOptions struct { + InlineCompletionOptions + TextDocumentRegistrationOptions + StaticRegistrationOptions +} + +// Describes how an {@link InlineCompletionItemProvider inline completion provider} was triggered. +// +// @since 3.18.0 +// @proposed +type InlineCompletionTriggerKind uint32 + +// Inline value information can be provided by different means: +// +// - directly as a text value (class InlineValueText). +// - as a name to use for a variable lookup (class InlineValueVariableLookup) +// - as an evaluatable expression (class InlineValueEvaluatableExpression) +// +// The InlineValue types combines all inline value types into one type. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#inlineValue +type InlineValue = Or_InlineValue // (alias) +// Client capabilities specific to inline values. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#inlineValueClientCapabilities +type InlineValueClientCapabilities struct { + // Whether implementation supports dynamic registration for inline value providers. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` +} + +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#inlineValueContext +type InlineValueContext struct { + // The stack frame (as a DAP Id) where the execution has stopped. + FrameID int32 `json:"frameId"` + // The document range where execution has stopped. + // Typically the end position of the range denotes the line where the inline values are shown. + StoppedLocation Range `json:"stoppedLocation"` +} + +// Provide an inline value through an expression evaluation. +// If only a range is specified, the expression will be extracted from the underlying document. +// An optional expression can be used to override the extracted expression. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#inlineValueEvaluatableExpression +type InlineValueEvaluatableExpression struct { + // The document range for which the inline value applies. + // The range is used to extract the evaluatable expression from the underlying document. + Range Range `json:"range"` + // If specified the expression overrides the extracted expression. + Expression string `json:"expression,omitempty"` +} + +// Inline value options used during static registration. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#inlineValueOptions +type InlineValueOptions struct { + WorkDoneProgressOptions +} + +// A parameter literal used in inline value requests. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#inlineValueParams +type InlineValueParams struct { + // The text document. + TextDocument TextDocumentIdentifier `json:"textDocument"` + // The document range for which inline values should be computed. + Range Range `json:"range"` + // Additional information about the context in which inline values were + // requested. + Context InlineValueContext `json:"context"` + WorkDoneProgressParams +} + +// Inline value options used during static or dynamic registration. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#inlineValueRegistrationOptions +type InlineValueRegistrationOptions struct { + InlineValueOptions + TextDocumentRegistrationOptions + StaticRegistrationOptions +} + +// Provide inline value as text. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#inlineValueText +type InlineValueText struct { + // The document range for which the inline value applies. + Range Range `json:"range"` + // The text of the inline value. + Text string `json:"text"` +} + +// Provide inline value through a variable lookup. +// If only a range is specified, the variable name will be extracted from the underlying document. +// An optional variable name can be used to override the extracted name. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#inlineValueVariableLookup +type InlineValueVariableLookup struct { + // The document range for which the inline value applies. + // The range is used to extract the variable name from the underlying document. + Range Range `json:"range"` + // If specified the name of the variable to look up. + VariableName string `json:"variableName,omitempty"` + // How to perform the lookup. + CaseSensitiveLookup bool `json:"caseSensitiveLookup"` +} + +// Client workspace capabilities specific to inline values. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#inlineValueWorkspaceClientCapabilities +type InlineValueWorkspaceClientCapabilities struct { + // Whether the client implementation supports a refresh request sent from the + // server to the client. + // + // Note that this event is global and will force the client to refresh all + // inline values currently shown. It should be used with absolute care and is + // useful for situation where a server for example detects a project wide + // change that requires such a calculation. + RefreshSupport bool `json:"refreshSupport,omitempty"` +} + +// A special text edit to provide an insert and a replace operation. +// +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#insertReplaceEdit +type InsertReplaceEdit struct { + // The string to be inserted. + NewText string `json:"newText"` + // The range if the insert is requested + Insert Range `json:"insert"` + // The range if the replace is requested. + Replace Range `json:"replace"` +} + +// Defines whether the insert text in a completion item should be interpreted as +// plain text or a snippet. +type InsertTextFormat uint32 + +// How whitespace and indentation is handled during completion +// item insertion. +// +// @since 3.16.0 +type InsertTextMode uint32 +type LSPAny = interface{} + +// LSP arrays. +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#lSPArray +type LSPArray = []interface{} // (alias) +type LSPErrorCodes int32 + +// LSP object definition. +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#lSPObject +type LSPObject = map[string]LSPAny // (alias) +// Predefined Language kinds +// @since 3.18.0 +// @proposed +type LanguageKind string + +// Client capabilities for the linked editing range request. +// +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#linkedEditingRangeClientCapabilities +type LinkedEditingRangeClientCapabilities struct { + // Whether implementation supports dynamic registration. If this is set to `true` + // the client supports the new `(TextDocumentRegistrationOptions & StaticRegistrationOptions)` + // return value for the corresponding server capability as well. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#linkedEditingRangeOptions +type LinkedEditingRangeOptions struct { + WorkDoneProgressOptions +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#linkedEditingRangeParams +type LinkedEditingRangeParams struct { + TextDocumentPositionParams + WorkDoneProgressParams +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#linkedEditingRangeRegistrationOptions +type LinkedEditingRangeRegistrationOptions struct { + TextDocumentRegistrationOptions + LinkedEditingRangeOptions + StaticRegistrationOptions +} + +// The result of a linked editing range request. +// +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#linkedEditingRanges +type LinkedEditingRanges struct { + // A list of ranges that can be edited together. The ranges must have + // identical length and contain identical text content. The ranges cannot overlap. + Ranges []Range `json:"ranges"` + // An optional word pattern (regular expression) that describes valid contents for + // the given ranges. If no pattern is provided, the client configuration's word + // pattern will be used. + WordPattern string `json:"wordPattern,omitempty"` +} + +// created for Literal (Lit_ClientSemanticTokensRequestOptions_range_Item1) +type Lit_ClientSemanticTokensRequestOptions_range_Item1 struct { +} + +// created for Literal (Lit_SemanticTokensOptions_range_Item1) +type Lit_SemanticTokensOptions_range_Item1 struct { +} + +// Represents a location inside a resource, such as a line +// inside a text file. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#location +type Location struct { + URI DocumentUri `json:"uri"` + Range Range `json:"range"` +} + +// Represents the connection of two locations. Provides additional metadata over normal {@link Location locations}, +// including an origin range. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#locationLink +type LocationLink struct { + // Span of the origin of this link. + // + // Used as the underlined span for mouse interaction. Defaults to the word range at + // the definition position. + OriginSelectionRange *Range `json:"originSelectionRange,omitempty"` + // The target resource identifier of this link. + TargetURI DocumentUri `json:"targetUri"` + // The full target range of this link. If the target for example is a symbol then target range is the + // range enclosing this symbol not including leading/trailing whitespace but everything else + // like comments. This information is typically used to highlight the range in the editor. + TargetRange Range `json:"targetRange"` + // The range that should be selected and revealed when this link is being followed, e.g the name of a function. + // Must be contained by the `targetRange`. See also `DocumentSymbol#range` + TargetSelectionRange Range `json:"targetSelectionRange"` +} + +// Location with only uri and does not include range. +// +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#locationUriOnly +type LocationUriOnly struct { + URI DocumentUri `json:"uri"` +} + +// The log message parameters. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#logMessageParams +type LogMessageParams struct { + // The message type. See {@link MessageType} + Type MessageType `json:"type"` + // The actual message. + Message string `json:"message"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#logTraceParams +type LogTraceParams struct { + Message string `json:"message"` + Verbose string `json:"verbose,omitempty"` +} + +// Client capabilities specific to the used markdown parser. +// +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#markdownClientCapabilities +type MarkdownClientCapabilities struct { + // The name of the parser. + Parser string `json:"parser"` + // The version of the parser. + Version string `json:"version,omitempty"` + // A list of HTML tags that the client allows / supports in + // Markdown. + // + // @since 3.17.0 + AllowedTags []string `json:"allowedTags,omitempty"` +} + +// MarkedString can be used to render human readable text. It is either a markdown string +// or a code-block that provides a language and a code snippet. The language identifier +// is semantically equal to the optional language identifier in fenced code blocks in GitHub +// issues. See https://help.github.com/articles/creating-and-highlighting-code-blocks/#syntax-highlighting +// +// The pair of a language and a value is an equivalent to markdown: +// ```${language} +// ${value} +// ``` +// +// Note that markdown strings will be sanitized - that means html will be escaped. +// @deprecated use MarkupContent instead. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#markedString +type MarkedString = Or_MarkedString // (alias) +// @since 3.18.0 +// @deprecated use MarkupContent instead. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#markedStringWithLanguage +type MarkedStringWithLanguage struct { + Language string `json:"language"` + Value string `json:"value"` +} + +// A `MarkupContent` literal represents a string value which content is interpreted base on its +// kind flag. Currently the protocol supports `plaintext` and `markdown` as markup kinds. +// +// If the kind is `markdown` then the value can contain fenced code blocks like in GitHub issues. +// See https://help.github.com/articles/creating-and-highlighting-code-blocks/#syntax-highlighting +// +// Here is an example how such a string can be constructed using JavaScript / TypeScript: +// ```ts +// +// let markdown: MarkdownContent = { +// kind: MarkupKind.Markdown, +// value: [ +// '# Header', +// 'Some text', +// '```typescript', +// 'someCode();', +// '```' +// ].join('\n') +// }; +// +// ``` +// +// *Please Note* that clients might sanitize the return markdown. A client could decide to +// remove HTML from the markdown to avoid script execution. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#markupContent +type MarkupContent struct { + // The type of the Markup + Kind MarkupKind `json:"kind"` + // The content itself + Value string `json:"value"` +} + +// Describes the content type that a client supports in various +// result literals like `Hover`, `ParameterInfo` or `CompletionItem`. +// +// Please note that `MarkupKinds` must not start with a `$`. This kinds +// are reserved for internal usage. +type MarkupKind string + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#messageActionItem +type MessageActionItem struct { + // A short title like 'Retry', 'Open Log' etc. + Title string `json:"title"` +} + +// The message type +type MessageType uint32 + +// Moniker definition to match LSIF 0.5 moniker definition. +// +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#moniker +type Moniker struct { + // The scheme of the moniker. For example tsc or .Net + Scheme string `json:"scheme"` + // The identifier of the moniker. The value is opaque in LSIF however + // schema owners are allowed to define the structure if they want. + Identifier string `json:"identifier"` + // The scope in which the moniker is unique + Unique UniquenessLevel `json:"unique"` + // The moniker kind if known. + Kind *MonikerKind `json:"kind,omitempty"` +} + +// Client capabilities specific to the moniker request. +// +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#monikerClientCapabilities +type MonikerClientCapabilities struct { + // Whether moniker supports dynamic registration. If this is set to `true` + // the client supports the new `MonikerRegistrationOptions` return value + // for the corresponding server capability as well. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` +} + +// The moniker kind. +// +// @since 3.16.0 +type MonikerKind string + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#monikerOptions +type MonikerOptions struct { + WorkDoneProgressOptions +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#monikerParams +type MonikerParams struct { + TextDocumentPositionParams + WorkDoneProgressParams + PartialResultParams +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#monikerRegistrationOptions +type MonikerRegistrationOptions struct { + TextDocumentRegistrationOptions + MonikerOptions +} + +// A notebook cell. +// +// A cell's document URI must be unique across ALL notebook +// cells and can therefore be used to uniquely identify a +// notebook cell or the cell's text document. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#notebookCell +type NotebookCell struct { + // The cell's kind + Kind NotebookCellKind `json:"kind"` + // The URI of the cell's text document + // content. + Document DocumentUri `json:"document"` + // Additional metadata stored with the cell. + // + // Note: should always be an object literal (e.g. LSPObject) + Metadata *LSPObject `json:"metadata,omitempty"` + // Additional execution summary information + // if supported by the client. + ExecutionSummary *ExecutionSummary `json:"executionSummary,omitempty"` +} + +// A change describing how to move a `NotebookCell` +// array from state S to S'. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#notebookCellArrayChange +type NotebookCellArrayChange struct { + // The start oftest of the cell that changed. + Start uint32 `json:"start"` + // The deleted cells + DeleteCount uint32 `json:"deleteCount"` + // The new cells, if any + Cells []NotebookCell `json:"cells,omitempty"` +} + +// A notebook cell kind. +// +// @since 3.17.0 +type NotebookCellKind uint32 + +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#notebookCellLanguage +type NotebookCellLanguage struct { + Language string `json:"language"` +} + +// A notebook cell text document filter denotes a cell text +// document by different properties. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#notebookCellTextDocumentFilter +type NotebookCellTextDocumentFilter struct { + // A filter that matches against the notebook + // containing the notebook cell. If a string + // value is provided it matches against the + // notebook type. '*' matches every notebook. + Notebook Or_NotebookCellTextDocumentFilter_notebook `json:"notebook"` + // A language id like `python`. + // + // Will be matched against the language id of the + // notebook cell document. '*' matches every language. + Language string `json:"language,omitempty"` +} + +// A notebook document. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#notebookDocument +type NotebookDocument struct { + // The notebook document's uri. + URI URI `json:"uri"` + // The type of the notebook. + NotebookType string `json:"notebookType"` + // The version number of this document (it will increase after each + // change, including undo/redo). + Version int32 `json:"version"` + // Additional metadata stored with the notebook + // document. + // + // Note: should always be an object literal (e.g. LSPObject) + Metadata *LSPObject `json:"metadata,omitempty"` + // The cells of a notebook. + Cells []NotebookCell `json:"cells"` +} + +// Structural changes to cells in a notebook document. +// +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#notebookDocumentCellChangeStructure +type NotebookDocumentCellChangeStructure struct { + // The change to the cell array. + Array NotebookCellArrayChange `json:"array"` + // Additional opened cell text documents. + DidOpen []TextDocumentItem `json:"didOpen,omitempty"` + // Additional closed cell text documents. + DidClose []TextDocumentIdentifier `json:"didClose,omitempty"` +} + +// Cell changes to a notebook document. +// +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#notebookDocumentCellChanges +type NotebookDocumentCellChanges struct { + // Changes to the cell structure to add or + // remove cells. + Structure *NotebookDocumentCellChangeStructure `json:"structure,omitempty"` + // Changes to notebook cells properties like its + // kind, execution summary or metadata. + Data []NotebookCell `json:"data,omitempty"` + // Changes to the text content of notebook cells. + TextContent []NotebookDocumentCellContentChanges `json:"textContent,omitempty"` +} + +// Content changes to a cell in a notebook document. +// +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#notebookDocumentCellContentChanges +type NotebookDocumentCellContentChanges struct { + Document VersionedTextDocumentIdentifier `json:"document"` + Changes []TextDocumentContentChangeEvent `json:"changes"` +} + +// A change event for a notebook document. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#notebookDocumentChangeEvent +type NotebookDocumentChangeEvent struct { + // The changed meta data if any. + // + // Note: should always be an object literal (e.g. LSPObject) + Metadata *LSPObject `json:"metadata,omitempty"` + // Changes to cells + Cells *NotebookDocumentCellChanges `json:"cells,omitempty"` +} + +// Capabilities specific to the notebook document support. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#notebookDocumentClientCapabilities +type NotebookDocumentClientCapabilities struct { + // Capabilities specific to notebook document synchronization + // + // @since 3.17.0 + Synchronization NotebookDocumentSyncClientCapabilities `json:"synchronization"` +} + +// A notebook document filter denotes a notebook document by +// different properties. The properties will be match +// against the notebook's URI (same as with documents) +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#notebookDocumentFilter +type NotebookDocumentFilter = Or_NotebookDocumentFilter // (alias) +// A notebook document filter where `notebookType` is required field. +// +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#notebookDocumentFilterNotebookType +type NotebookDocumentFilterNotebookType struct { + // The type of the enclosing notebook. + NotebookType string `json:"notebookType"` + // A Uri {@link Uri.scheme scheme}, like `file` or `untitled`. + Scheme string `json:"scheme,omitempty"` + // A glob pattern. + Pattern *GlobPattern `json:"pattern,omitempty"` +} + +// A notebook document filter where `pattern` is required field. +// +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#notebookDocumentFilterPattern +type NotebookDocumentFilterPattern struct { + // The type of the enclosing notebook. + NotebookType string `json:"notebookType,omitempty"` + // A Uri {@link Uri.scheme scheme}, like `file` or `untitled`. + Scheme string `json:"scheme,omitempty"` + // A glob pattern. + Pattern GlobPattern `json:"pattern"` +} + +// A notebook document filter where `scheme` is required field. +// +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#notebookDocumentFilterScheme +type NotebookDocumentFilterScheme struct { + // The type of the enclosing notebook. + NotebookType string `json:"notebookType,omitempty"` + // A Uri {@link Uri.scheme scheme}, like `file` or `untitled`. + Scheme string `json:"scheme"` + // A glob pattern. + Pattern *GlobPattern `json:"pattern,omitempty"` +} + +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#notebookDocumentFilterWithCells +type NotebookDocumentFilterWithCells struct { + // The notebook to be synced If a string + // value is provided it matches against the + // notebook type. '*' matches every notebook. + Notebook *Or_NotebookDocumentFilterWithCells_notebook `json:"notebook,omitempty"` + // The cells of the matching notebook to be synced. + Cells []NotebookCellLanguage `json:"cells"` +} + +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#notebookDocumentFilterWithNotebook +type NotebookDocumentFilterWithNotebook struct { + // The notebook to be synced If a string + // value is provided it matches against the + // notebook type. '*' matches every notebook. + Notebook Or_NotebookDocumentFilterWithNotebook_notebook `json:"notebook"` + // The cells of the matching notebook to be synced. + Cells []NotebookCellLanguage `json:"cells,omitempty"` +} + +// A literal to identify a notebook document in the client. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#notebookDocumentIdentifier +type NotebookDocumentIdentifier struct { + // The notebook document's uri. + URI URI `json:"uri"` +} + +// Notebook specific client capabilities. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#notebookDocumentSyncClientCapabilities +type NotebookDocumentSyncClientCapabilities struct { + // Whether implementation supports dynamic registration. If this is + // set to `true` the client supports the new + // `(TextDocumentRegistrationOptions & StaticRegistrationOptions)` + // return value for the corresponding server capability as well. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` + // The client supports sending execution summary data per cell. + ExecutionSummarySupport bool `json:"executionSummarySupport,omitempty"` +} + +// Options specific to a notebook plus its cells +// to be synced to the server. +// +// If a selector provides a notebook document +// filter but no cell selector all cells of a +// matching notebook document will be synced. +// +// If a selector provides no notebook document +// filter but only a cell selector all notebook +// document that contain at least one matching +// cell will be synced. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#notebookDocumentSyncOptions +type NotebookDocumentSyncOptions struct { + // The notebooks to be synced + NotebookSelector []Or_NotebookDocumentSyncOptions_notebookSelector_Elem `json:"notebookSelector"` + // Whether save notification should be forwarded to + // the server. Will only be honored if mode === `notebook`. + Save bool `json:"save,omitempty"` +} + +// Registration options specific to a notebook. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#notebookDocumentSyncRegistrationOptions +type NotebookDocumentSyncRegistrationOptions struct { + NotebookDocumentSyncOptions + StaticRegistrationOptions +} + +// A text document identifier to optionally denote a specific version of a text document. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#optionalVersionedTextDocumentIdentifier +type OptionalVersionedTextDocumentIdentifier struct { + // The version number of this document. If a versioned text document identifier + // is sent from the server to the client and the file is not open in the editor + // (the server has not received an open notification before) the server can send + // `null` to indicate that the version is unknown and the content on disk is the + // truth (as specified with document content ownership). + Version int32 `json:"version"` + TextDocumentIdentifier +} + +// created for Or [int32 string] +type Or_CancelParams_id struct { + Value interface{} `json:"value"` +} + +// created for Or [ClientSemanticTokensRequestFullDelta bool] +type Or_ClientSemanticTokensRequestOptions_full struct { + Value interface{} `json:"value"` +} + +// created for Or [Lit_ClientSemanticTokensRequestOptions_range_Item1 bool] +type Or_ClientSemanticTokensRequestOptions_range struct { + Value interface{} `json:"value"` +} + +// created for Or [EditRangeWithInsertReplace Range] +type Or_CompletionItemDefaults_editRange struct { + Value interface{} `json:"value"` +} + +// created for Or [MarkupContent string] +type Or_CompletionItem_documentation struct { + Value interface{} `json:"value"` +} + +// created for Or [InsertReplaceEdit TextEdit] +type Or_CompletionItem_textEdit struct { + Value interface{} `json:"value"` +} + +// created for Or [Location []Location] +type Or_Declaration struct { + Value interface{} `json:"value"` +} + +// created for Or [Location []Location] +type Or_Definition struct { + Value interface{} `json:"value"` +} + +// created for Or [int32 string] +type Or_Diagnostic_code struct { + Value interface{} `json:"value"` +} + +// created for Or [[]string string] +type Or_DidChangeConfigurationRegistrationOptions_section struct { + Value interface{} `json:"value"` +} + +// created for Or [RelatedFullDocumentDiagnosticReport RelatedUnchangedDocumentDiagnosticReport] +type Or_DocumentDiagnosticReport struct { + Value interface{} `json:"value"` +} + +// created for Or [FullDocumentDiagnosticReport UnchangedDocumentDiagnosticReport] +type Or_DocumentDiagnosticReportPartialResult_relatedDocuments_Value struct { + Value interface{} `json:"value"` +} + +// created for Or [NotebookCellTextDocumentFilter TextDocumentFilter] +type Or_DocumentFilter struct { + Value interface{} `json:"value"` +} + +// created for Or [Pattern RelativePattern] +type Or_GlobPattern struct { + Value interface{} `json:"value"` +} + +// created for Or [MarkedString MarkupContent []MarkedString] +type Or_Hover_contents struct { + Value interface{} `json:"value"` +} + +// created for Or [MarkupContent string] +type Or_InlayHintLabelPart_tooltip struct { + Value interface{} `json:"value"` +} + +// created for Or [[]InlayHintLabelPart string] +type Or_InlayHint_label struct { + Value interface{} `json:"value"` +} + +// created for Or [MarkupContent string] +type Or_InlayHint_tooltip struct { + Value interface{} `json:"value"` +} + +// created for Or [StringValue string] +type Or_InlineCompletionItem_insertText struct { + Value interface{} `json:"value"` +} + +// created for Or [InlineValueEvaluatableExpression InlineValueText InlineValueVariableLookup] +type Or_InlineValue struct { + Value interface{} `json:"value"` +} + +// created for Or [LSPArray LSPObject bool float64 int32 string uint32] +type Or_LSPAny struct { + Value interface{} `json:"value"` +} + +// created for Or [MarkedStringWithLanguage string] +type Or_MarkedString struct { + Value interface{} `json:"value"` +} + +// created for Or [NotebookDocumentFilter string] +type Or_NotebookCellTextDocumentFilter_notebook struct { + Value interface{} `json:"value"` +} + +// created for Or [NotebookDocumentFilterNotebookType NotebookDocumentFilterPattern NotebookDocumentFilterScheme] +type Or_NotebookDocumentFilter struct { + Value interface{} `json:"value"` +} + +// created for Or [NotebookDocumentFilter string] +type Or_NotebookDocumentFilterWithCells_notebook struct { + Value interface{} `json:"value"` +} + +// created for Or [NotebookDocumentFilter string] +type Or_NotebookDocumentFilterWithNotebook_notebook struct { + Value interface{} `json:"value"` +} + +// created for Or [NotebookDocumentFilterWithCells NotebookDocumentFilterWithNotebook] +type Or_NotebookDocumentSyncOptions_notebookSelector_Elem struct { + Value interface{} `json:"value"` +} + +// created for Or [MarkupContent string] +type Or_ParameterInformation_documentation struct { + Value interface{} `json:"value"` +} + +// created for Or [Tuple_ParameterInformation_label_Item1 string] +type Or_ParameterInformation_label struct { + Value interface{} `json:"value"` +} + +// created for Or [PrepareRenameDefaultBehavior PrepareRenamePlaceholder Range] +type Or_PrepareRenameResult struct { + Value interface{} `json:"value"` +} + +// created for Or [int32 string] +type Or_ProgressToken struct { + Value interface{} `json:"value"` +} + +// created for Or [FullDocumentDiagnosticReport UnchangedDocumentDiagnosticReport] +type Or_RelatedFullDocumentDiagnosticReport_relatedDocuments_Value struct { + Value interface{} `json:"value"` +} + +// created for Or [FullDocumentDiagnosticReport UnchangedDocumentDiagnosticReport] +type Or_RelatedUnchangedDocumentDiagnosticReport_relatedDocuments_Value struct { + Value interface{} `json:"value"` +} + +// created for Or [URI WorkspaceFolder] +type Or_RelativePattern_baseUri struct { + Value interface{} `json:"value"` +} + +// created for Or [CodeAction Command] +type Or_Result_textDocument_codeAction_Item0_Elem struct { + Value interface{} `json:"value"` +} + +// created for Or [CompletionList []CompletionItem] +type Or_Result_textDocument_completion struct { + Value interface{} `json:"value"` +} + +// created for Or [Declaration []DeclarationLink] +type Or_Result_textDocument_declaration struct { + Value interface{} `json:"value"` +} + +// created for Or [Definition []DefinitionLink] +type Or_Result_textDocument_definition struct { + Value interface{} `json:"value"` +} + +// created for Or [[]DocumentSymbol []SymbolInformation] +type Or_Result_textDocument_documentSymbol struct { + Value interface{} `json:"value"` +} + +// created for Or [Definition []DefinitionLink] +type Or_Result_textDocument_implementation struct { + Value interface{} `json:"value"` +} + +// created for Or [InlineCompletionList []InlineCompletionItem] +type Or_Result_textDocument_inlineCompletion struct { + Value interface{} `json:"value"` +} + +// created for Or [SemanticTokens SemanticTokensDelta] +type Or_Result_textDocument_semanticTokens_full_delta struct { + Value interface{} `json:"value"` +} + +// created for Or [Definition []DefinitionLink] +type Or_Result_textDocument_typeDefinition struct { + Value interface{} `json:"value"` +} + +// created for Or [[]SymbolInformation []WorkspaceSymbol] +type Or_Result_workspace_symbol struct { + Value interface{} `json:"value"` +} + +// created for Or [SemanticTokensFullDelta bool] +type Or_SemanticTokensOptions_full struct { + Value interface{} `json:"value"` +} + +// created for Or [Lit_SemanticTokensOptions_range_Item1 bool] +type Or_SemanticTokensOptions_range struct { + Value interface{} `json:"value"` +} + +// created for Or [CallHierarchyOptions CallHierarchyRegistrationOptions bool] +type Or_ServerCapabilities_callHierarchyProvider struct { + Value interface{} `json:"value"` +} + +// created for Or [CodeActionOptions bool] +type Or_ServerCapabilities_codeActionProvider struct { + Value interface{} `json:"value"` +} + +// created for Or [DocumentColorOptions DocumentColorRegistrationOptions bool] +type Or_ServerCapabilities_colorProvider struct { + Value interface{} `json:"value"` +} + +// created for Or [DeclarationOptions DeclarationRegistrationOptions bool] +type Or_ServerCapabilities_declarationProvider struct { + Value interface{} `json:"value"` +} + +// created for Or [DefinitionOptions bool] +type Or_ServerCapabilities_definitionProvider struct { + Value interface{} `json:"value"` +} + +// created for Or [DiagnosticOptions DiagnosticRegistrationOptions] +type Or_ServerCapabilities_diagnosticProvider struct { + Value interface{} `json:"value"` +} + +// created for Or [DocumentFormattingOptions bool] +type Or_ServerCapabilities_documentFormattingProvider struct { + Value interface{} `json:"value"` +} + +// created for Or [DocumentHighlightOptions bool] +type Or_ServerCapabilities_documentHighlightProvider struct { + Value interface{} `json:"value"` +} + +// created for Or [DocumentRangeFormattingOptions bool] +type Or_ServerCapabilities_documentRangeFormattingProvider struct { + Value interface{} `json:"value"` +} + +// created for Or [DocumentSymbolOptions bool] +type Or_ServerCapabilities_documentSymbolProvider struct { + Value interface{} `json:"value"` +} + +// created for Or [FoldingRangeOptions FoldingRangeRegistrationOptions bool] +type Or_ServerCapabilities_foldingRangeProvider struct { + Value interface{} `json:"value"` +} + +// created for Or [HoverOptions bool] +type Or_ServerCapabilities_hoverProvider struct { + Value interface{} `json:"value"` +} + +// created for Or [ImplementationOptions ImplementationRegistrationOptions bool] +type Or_ServerCapabilities_implementationProvider struct { + Value interface{} `json:"value"` +} + +// created for Or [InlayHintOptions InlayHintRegistrationOptions bool] +type Or_ServerCapabilities_inlayHintProvider struct { + Value interface{} `json:"value"` +} + +// created for Or [InlineCompletionOptions bool] +type Or_ServerCapabilities_inlineCompletionProvider struct { + Value interface{} `json:"value"` +} + +// created for Or [InlineValueOptions InlineValueRegistrationOptions bool] +type Or_ServerCapabilities_inlineValueProvider struct { + Value interface{} `json:"value"` +} + +// created for Or [LinkedEditingRangeOptions LinkedEditingRangeRegistrationOptions bool] +type Or_ServerCapabilities_linkedEditingRangeProvider struct { + Value interface{} `json:"value"` +} + +// created for Or [MonikerOptions MonikerRegistrationOptions bool] +type Or_ServerCapabilities_monikerProvider struct { + Value interface{} `json:"value"` +} + +// created for Or [NotebookDocumentSyncOptions NotebookDocumentSyncRegistrationOptions] +type Or_ServerCapabilities_notebookDocumentSync struct { + Value interface{} `json:"value"` +} + +// created for Or [ReferenceOptions bool] +type Or_ServerCapabilities_referencesProvider struct { + Value interface{} `json:"value"` +} + +// created for Or [RenameOptions bool] +type Or_ServerCapabilities_renameProvider struct { + Value interface{} `json:"value"` +} + +// created for Or [SelectionRangeOptions SelectionRangeRegistrationOptions bool] +type Or_ServerCapabilities_selectionRangeProvider struct { + Value interface{} `json:"value"` +} + +// created for Or [SemanticTokensOptions SemanticTokensRegistrationOptions] +type Or_ServerCapabilities_semanticTokensProvider struct { + Value interface{} `json:"value"` +} + +// created for Or [TextDocumentSyncKind TextDocumentSyncOptions] +type Or_ServerCapabilities_textDocumentSync struct { + Value interface{} `json:"value"` +} + +// created for Or [TypeDefinitionOptions TypeDefinitionRegistrationOptions bool] +type Or_ServerCapabilities_typeDefinitionProvider struct { + Value interface{} `json:"value"` +} + +// created for Or [TypeHierarchyOptions TypeHierarchyRegistrationOptions bool] +type Or_ServerCapabilities_typeHierarchyProvider struct { + Value interface{} `json:"value"` +} + +// created for Or [WorkspaceSymbolOptions bool] +type Or_ServerCapabilities_workspaceSymbolProvider struct { + Value interface{} `json:"value"` +} + +// created for Or [MarkupContent string] +type Or_SignatureInformation_documentation struct { + Value interface{} `json:"value"` +} + +// created for Or [TextDocumentContentChangePartial TextDocumentContentChangeWholeDocument] +type Or_TextDocumentContentChangeEvent struct { + Value interface{} `json:"value"` +} + +// created for Or [AnnotatedTextEdit SnippetTextEdit TextEdit] +type Or_TextDocumentEdit_edits_Elem struct { + Value interface{} `json:"value"` +} + +// created for Or [TextDocumentFilterLanguage TextDocumentFilterPattern TextDocumentFilterScheme] +type Or_TextDocumentFilter struct { + Value interface{} `json:"value"` +} + +// created for Or [SaveOptions bool] +type Or_TextDocumentSyncOptions_save struct { + Value interface{} `json:"value"` +} + +// created for Or [WorkspaceFullDocumentDiagnosticReport WorkspaceUnchangedDocumentDiagnosticReport] +type Or_WorkspaceDocumentDiagnosticReport struct { + Value interface{} `json:"value"` +} + +// created for Or [CreateFile DeleteFile RenameFile TextDocumentEdit] +type Or_WorkspaceEdit_documentChanges_Elem struct { + Value interface{} `json:"value"` +} + +// created for Or [bool string] +type Or_WorkspaceFoldersServerCapabilities_changeNotifications struct { + Value interface{} `json:"value"` +} + +// created for Or [TextDocumentContentOptions TextDocumentContentRegistrationOptions] +type Or_WorkspaceOptions_textDocumentContent struct { + Value interface{} `json:"value"` +} + +// created for Or [Location LocationUriOnly] +type Or_WorkspaceSymbol_location struct { + Value interface{} `json:"value"` +} + +// The parameters of a configuration request. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#configurationParams +type ParamConfiguration struct { + Items []ConfigurationItem `json:"items"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#initializeParams +type ParamInitialize struct { + XInitializeParams + WorkspaceFoldersInitializeParams +} + +// Represents a parameter of a callable-signature. A parameter can +// have a label and a doc-comment. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#parameterInformation +type ParameterInformation struct { + // The label of this parameter information. + // + // Either a string or an inclusive start and exclusive end offsets within its containing + // signature label. (see SignatureInformation.label). The offsets are based on a UTF-16 + // string representation as `Position` and `Range` does. + // + // To avoid ambiguities a server should use the [start, end] offset value instead of using + // a substring. Whether a client support this is controlled via `labelOffsetSupport` client + // capability. + // + // *Note*: a label of type string should be a substring of its containing signature label. + // Its intended use case is to highlight the parameter label part in the `SignatureInformation.label`. + Label Or_ParameterInformation_label `json:"label"` + // The human-readable doc-comment of this parameter. Will be shown + // in the UI but can be omitted. + Documentation *Or_ParameterInformation_documentation `json:"documentation,omitempty"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#partialResultParams +type PartialResultParams struct { + // An optional token that a server can use to report partial results (e.g. streaming) to + // the client. + PartialResultToken *ProgressToken `json:"partialResultToken,omitempty"` +} + +// The glob pattern to watch relative to the base path. Glob patterns can have the following syntax: +// +// - `*` to match one or more characters in a path segment +// - `?` to match on one character in a path segment +// - `**` to match any number of path segments, including none +// - `{}` to group conditions (e.g. `**/*.{ts,js}` matches all TypeScript and JavaScript files) +// - `[]` to declare a range of characters to match in a path segment (e.g., `example.[0-9]` to match on `example.0`, `example.1`, …) +// - `[!...]` to negate a range of characters to match in a path segment (e.g., `example.[!0-9]` to match on `example.a`, `example.b`, but not `example.0`) +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#pattern +type Pattern = string // (alias) +// Position in a text document expressed as zero-based line and character +// offset. Prior to 3.17 the offsets were always based on a UTF-16 string +// representation. So a string of the form `a𐐀b` the character offset of the +// character `a` is 0, the character offset of `𐐀` is 1 and the character +// offset of b is 3 since `𐐀` is represented using two code units in UTF-16. +// Since 3.17 clients and servers can agree on a different string encoding +// representation (e.g. UTF-8). The client announces it's supported encoding +// via the client capability [`general.positionEncodings`](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#clientCapabilities). +// The value is an array of position encodings the client supports, with +// decreasing preference (e.g. the encoding at index `0` is the most preferred +// one). To stay backwards compatible the only mandatory encoding is UTF-16 +// represented via the string `utf-16`. The server can pick one of the +// encodings offered by the client and signals that encoding back to the +// client via the initialize result's property +// [`capabilities.positionEncoding`](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#serverCapabilities). If the string value +// `utf-16` is missing from the client's capability `general.positionEncodings` +// servers can safely assume that the client supports UTF-16. If the server +// omits the position encoding in its initialize result the encoding defaults +// to the string value `utf-16`. Implementation considerations: since the +// conversion from one encoding into another requires the content of the +// file / line the conversion is best done where the file is read which is +// usually on the server side. +// +// Positions are line end character agnostic. So you can not specify a position +// that denotes `\r|\n` or `\n|` where `|` represents the character offset. +// +// @since 3.17.0 - support for negotiated position encoding. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#position +type Position struct { + // Line position in a document (zero-based). + // + // If a line number is greater than the number of lines in a document, it defaults back to the number of lines in the document. + // If a line number is negative, it defaults to 0. + Line uint32 `json:"line"` + // Character offset on a line in a document (zero-based). + // + // The meaning of this offset is determined by the negotiated + // `PositionEncodingKind`. + // + // If the character value is greater than the line length it defaults back to the + // line length. + Character uint32 `json:"character"` +} + +// A set of predefined position encoding kinds. +// +// @since 3.17.0 +type PositionEncodingKind string + +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#prepareRenameDefaultBehavior +type PrepareRenameDefaultBehavior struct { + DefaultBehavior bool `json:"defaultBehavior"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#prepareRenameParams +type PrepareRenameParams struct { + TextDocumentPositionParams + WorkDoneProgressParams +} + +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#prepareRenamePlaceholder +type PrepareRenamePlaceholder struct { + Range Range `json:"range"` + Placeholder string `json:"placeholder"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#prepareRenameResult +type PrepareRenameResult = Or_PrepareRenameResult // (alias) +type PrepareSupportDefaultBehavior uint32 + +// A previous result id in a workspace pull request. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#previousResultId +type PreviousResultID struct { + // The URI for which the client knowns a + // result id. + URI DocumentUri `json:"uri"` + // The value of the previous result id. + Value string `json:"value"` +} + +// A previous result id in a workspace pull request. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#previousResultId +type PreviousResultId struct { + // The URI for which the client knowns a + // result id. + URI DocumentUri `json:"uri"` + // The value of the previous result id. + Value string `json:"value"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#progressParams +type ProgressParams struct { + // The progress token provided by the client or server. + Token ProgressToken `json:"token"` + // The progress data. + Value interface{} `json:"value"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#progressToken +type ProgressToken = Or_ProgressToken // (alias) +// The publish diagnostic client capabilities. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#publishDiagnosticsClientCapabilities +type PublishDiagnosticsClientCapabilities struct { + // Whether the client interprets the version property of the + // `textDocument/publishDiagnostics` notification's parameter. + // + // @since 3.15.0 + VersionSupport bool `json:"versionSupport,omitempty"` + DiagnosticsCapabilities +} + +// The publish diagnostic notification's parameters. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#publishDiagnosticsParams +type PublishDiagnosticsParams struct { + // The URI for which diagnostic information is reported. + URI DocumentUri `json:"uri"` + // Optional the version number of the document the diagnostics are published for. + // + // @since 3.15.0 + Version int32 `json:"version,omitempty"` + // An array of diagnostic information items. + Diagnostics []Diagnostic `json:"diagnostics"` +} + +// A range in a text document expressed as (zero-based) start and end positions. +// +// If you want to specify a range that contains a line including the line ending +// character(s) then use an end position denoting the start of the next line. +// For example: +// ```ts +// +// { +// start: { line: 5, character: 23 } +// end : { line 6, character : 0 } +// } +// +// ``` +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#range +type Range struct { + // The range's start position. + Start Position `json:"start"` + // The range's end position. + End Position `json:"end"` +} + +// Client Capabilities for a {@link ReferencesRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#referenceClientCapabilities +type ReferenceClientCapabilities struct { + // Whether references supports dynamic registration. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` +} + +// Value-object that contains additional information when +// requesting references. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#referenceContext +type ReferenceContext struct { + // Include the declaration of the current symbol. + IncludeDeclaration bool `json:"includeDeclaration"` +} + +// Reference options. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#referenceOptions +type ReferenceOptions struct { + WorkDoneProgressOptions +} + +// Parameters for a {@link ReferencesRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#referenceParams +type ReferenceParams struct { + Context ReferenceContext `json:"context"` + TextDocumentPositionParams + WorkDoneProgressParams + PartialResultParams +} + +// Registration options for a {@link ReferencesRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#referenceRegistrationOptions +type ReferenceRegistrationOptions struct { + TextDocumentRegistrationOptions + ReferenceOptions +} + +// General parameters to register for a notification or to register a provider. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#registration +type Registration struct { + // The id used to register the request. The id can be used to deregister + // the request again. + ID string `json:"id"` + // The method / capability to register for. + Method string `json:"method"` + // Options necessary for the registration. + RegisterOptions interface{} `json:"registerOptions,omitempty"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#registrationParams +type RegistrationParams struct { + Registrations []Registration `json:"registrations"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#regularExpressionEngineKind +type RegularExpressionEngineKind = string // (alias) +// Client capabilities specific to regular expressions. +// +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#regularExpressionsClientCapabilities +type RegularExpressionsClientCapabilities struct { + // The engine's name. + Engine RegularExpressionEngineKind `json:"engine"` + // The engine's version. + Version string `json:"version,omitempty"` +} + +// A full diagnostic report with a set of related documents. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#relatedFullDocumentDiagnosticReport +type RelatedFullDocumentDiagnosticReport struct { + // Diagnostics of related documents. This information is useful + // in programming languages where code in a file A can generate + // diagnostics in a file B which A depends on. An example of + // such a language is C/C++ where marco definitions in a file + // a.cpp and result in errors in a header file b.hpp. + // + // @since 3.17.0 + RelatedDocuments map[DocumentUri]interface{} `json:"relatedDocuments,omitempty"` + FullDocumentDiagnosticReport +} + +// An unchanged diagnostic report with a set of related documents. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#relatedUnchangedDocumentDiagnosticReport +type RelatedUnchangedDocumentDiagnosticReport struct { + // Diagnostics of related documents. This information is useful + // in programming languages where code in a file A can generate + // diagnostics in a file B which A depends on. An example of + // such a language is C/C++ where marco definitions in a file + // a.cpp and result in errors in a header file b.hpp. + // + // @since 3.17.0 + RelatedDocuments map[DocumentUri]interface{} `json:"relatedDocuments,omitempty"` + UnchangedDocumentDiagnosticReport +} + +// A relative pattern is a helper to construct glob patterns that are matched +// relatively to a base URI. The common value for a `baseUri` is a workspace +// folder root, but it can be another absolute URI as well. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#relativePattern +type RelativePattern struct { + // A workspace folder or a base URI to which this pattern will be matched + // against relatively. + BaseURI Or_RelativePattern_baseUri `json:"baseUri"` + // The actual glob pattern; + Pattern Pattern `json:"pattern"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#renameClientCapabilities +type RenameClientCapabilities struct { + // Whether rename supports dynamic registration. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` + // Client supports testing for validity of rename operations + // before execution. + // + // @since 3.12.0 + PrepareSupport bool `json:"prepareSupport,omitempty"` + // Client supports the default behavior result. + // + // The value indicates the default behavior used by the + // client. + // + // @since 3.16.0 + PrepareSupportDefaultBehavior *PrepareSupportDefaultBehavior `json:"prepareSupportDefaultBehavior,omitempty"` + // Whether the client honors the change annotations in + // text edits and resource operations returned via the + // rename request's workspace edit by for example presenting + // the workspace edit in the user interface and asking + // for confirmation. + // + // @since 3.16.0 + HonorsChangeAnnotations bool `json:"honorsChangeAnnotations,omitempty"` +} + +// Rename file operation +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#renameFile +type RenameFile struct { + // A rename + Kind string `json:"kind"` + // The old (existing) location. + OldURI DocumentUri `json:"oldUri"` + // The new location. + NewURI DocumentUri `json:"newUri"` + // Rename options. + Options *RenameFileOptions `json:"options,omitempty"` + ResourceOperation +} + +// Rename file options +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#renameFileOptions +type RenameFileOptions struct { + // Overwrite target if existing. Overwrite wins over `ignoreIfExists` + Overwrite bool `json:"overwrite,omitempty"` + // Ignores if target exists. + IgnoreIfExists bool `json:"ignoreIfExists,omitempty"` +} + +// The parameters sent in notifications/requests for user-initiated renames of +// files. +// +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#renameFilesParams +type RenameFilesParams struct { + // An array of all files/folders renamed in this operation. When a folder is renamed, only + // the folder will be included, and not its children. + Files []FileRename `json:"files"` +} + +// Provider options for a {@link RenameRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#renameOptions +type RenameOptions struct { + // Renames should be checked and tested before being executed. + // + // @since version 3.12.0 + PrepareProvider bool `json:"prepareProvider,omitempty"` + WorkDoneProgressOptions +} + +// The parameters of a {@link RenameRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#renameParams +type RenameParams struct { + // The document to rename. + TextDocument TextDocumentIdentifier `json:"textDocument"` + // The position at which this request was sent. + Position Position `json:"position"` + // The new name of the symbol. If the given name is not valid the + // request must return a {@link ResponseError} with an + // appropriate message set. + NewName string `json:"newName"` + WorkDoneProgressParams +} + +// Registration options for a {@link RenameRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#renameRegistrationOptions +type RenameRegistrationOptions struct { + TextDocumentRegistrationOptions + RenameOptions +} + +// A generic resource operation. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#resourceOperation +type ResourceOperation struct { + // The resource operation kind. + Kind string `json:"kind"` + // An optional annotation identifier describing the operation. + // + // @since 3.16.0 + AnnotationID *ChangeAnnotationIdentifier `json:"annotationId,omitempty"` +} +type ResourceOperationKind string + +// Save options. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#saveOptions +type SaveOptions struct { + // The client is supposed to include the content on save. + IncludeText bool `json:"includeText,omitempty"` +} + +// Describes the currently selected completion item. +// +// @since 3.18.0 +// @proposed +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#selectedCompletionInfo +type SelectedCompletionInfo struct { + // The range that will be replaced if this completion item is accepted. + Range Range `json:"range"` + // The text the range will be replaced with if this completion is accepted. + Text string `json:"text"` +} + +// A selection range represents a part of a selection hierarchy. A selection range +// may have a parent selection range that contains it. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#selectionRange +type SelectionRange struct { + // The {@link Range range} of this selection range. + Range Range `json:"range"` + // The parent selection range containing this range. Therefore `parent.range` must contain `this.range`. + Parent *SelectionRange `json:"parent,omitempty"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#selectionRangeClientCapabilities +type SelectionRangeClientCapabilities struct { + // Whether implementation supports dynamic registration for selection range providers. If this is set to `true` + // the client supports the new `SelectionRangeRegistrationOptions` return value for the corresponding server + // capability as well. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#selectionRangeOptions +type SelectionRangeOptions struct { + WorkDoneProgressOptions +} + +// A parameter literal used in selection range requests. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#selectionRangeParams +type SelectionRangeParams struct { + // The text document. + TextDocument TextDocumentIdentifier `json:"textDocument"` + // The positions inside the text document. + Positions []Position `json:"positions"` + WorkDoneProgressParams + PartialResultParams +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#selectionRangeRegistrationOptions +type SelectionRangeRegistrationOptions struct { + SelectionRangeOptions + TextDocumentRegistrationOptions + StaticRegistrationOptions +} + +// A set of predefined token modifiers. This set is not fixed +// an clients can specify additional token types via the +// corresponding client capabilities. +// +// @since 3.16.0 +type SemanticTokenModifiers string + +// A set of predefined token types. This set is not fixed +// an clients can specify additional token types via the +// corresponding client capabilities. +// +// @since 3.16.0 +type SemanticTokenTypes string + +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#semanticTokens +type SemanticTokens struct { + // An optional result id. If provided and clients support delta updating + // the client will include the result id in the next semantic token request. + // A server can then instead of computing all semantic tokens again simply + // send a delta. + ResultID string `json:"resultId,omitempty"` + // The actual tokens. + Data []uint32 `json:"data"` +} + +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#semanticTokensClientCapabilities +type SemanticTokensClientCapabilities struct { + // Whether implementation supports dynamic registration. If this is set to `true` + // the client supports the new `(TextDocumentRegistrationOptions & StaticRegistrationOptions)` + // return value for the corresponding server capability as well. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` + // Which requests the client supports and might send to the server + // depending on the server's capability. Please note that clients might not + // show semantic tokens or degrade some of the user experience if a range + // or full request is advertised by the client but not provided by the + // server. If for example the client capability `requests.full` and + // `request.range` are both set to true but the server only provides a + // range provider the client might not render a minimap correctly or might + // even decide to not show any semantic tokens at all. + Requests ClientSemanticTokensRequestOptions `json:"requests"` + // The token types that the client supports. + TokenTypes []string `json:"tokenTypes"` + // The token modifiers that the client supports. + TokenModifiers []string `json:"tokenModifiers"` + // The token formats the clients supports. + Formats []TokenFormat `json:"formats"` + // Whether the client supports tokens that can overlap each other. + OverlappingTokenSupport bool `json:"overlappingTokenSupport,omitempty"` + // Whether the client supports tokens that can span multiple lines. + MultilineTokenSupport bool `json:"multilineTokenSupport,omitempty"` + // Whether the client allows the server to actively cancel a + // semantic token request, e.g. supports returning + // LSPErrorCodes.ServerCancelled. If a server does the client + // needs to retrigger the request. + // + // @since 3.17.0 + ServerCancelSupport bool `json:"serverCancelSupport,omitempty"` + // Whether the client uses semantic tokens to augment existing + // syntax tokens. If set to `true` client side created syntax + // tokens and semantic tokens are both used for colorization. If + // set to `false` the client only uses the returned semantic tokens + // for colorization. + // + // If the value is `undefined` then the client behavior is not + // specified. + // + // @since 3.17.0 + AugmentsSyntaxTokens bool `json:"augmentsSyntaxTokens,omitempty"` +} + +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#semanticTokensDelta +type SemanticTokensDelta struct { + ResultID string `json:"resultId,omitempty"` + // The semantic token edits to transform a previous result into a new result. + Edits []SemanticTokensEdit `json:"edits"` +} + +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#semanticTokensDeltaParams +type SemanticTokensDeltaParams struct { + // The text document. + TextDocument TextDocumentIdentifier `json:"textDocument"` + // The result id of a previous response. The result Id can either point to a full response + // or a delta response depending on what was received last. + PreviousResultID string `json:"previousResultId"` + WorkDoneProgressParams + PartialResultParams +} + +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#semanticTokensDeltaPartialResult +type SemanticTokensDeltaPartialResult struct { + Edits []SemanticTokensEdit `json:"edits"` +} + +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#semanticTokensEdit +type SemanticTokensEdit struct { + // The start offset of the edit. + Start uint32 `json:"start"` + // The count of elements to remove. + DeleteCount uint32 `json:"deleteCount"` + // The elements to insert. + Data []uint32 `json:"data,omitempty"` +} + +// Semantic tokens options to support deltas for full documents +// +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#semanticTokensFullDelta +type SemanticTokensFullDelta struct { + // The server supports deltas for full documents. + Delta bool `json:"delta,omitempty"` +} + +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#semanticTokensLegend +type SemanticTokensLegend struct { + // The token types a server uses. + TokenTypes []string `json:"tokenTypes"` + // The token modifiers a server uses. + TokenModifiers []string `json:"tokenModifiers"` +} + +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#semanticTokensOptions +type SemanticTokensOptions struct { + // The legend used by the server + Legend SemanticTokensLegend `json:"legend"` + // Server supports providing semantic tokens for a specific range + // of a document. + Range *Or_SemanticTokensOptions_range `json:"range,omitempty"` + // Server supports providing semantic tokens for a full document. + Full *Or_SemanticTokensOptions_full `json:"full,omitempty"` + WorkDoneProgressOptions +} + +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#semanticTokensParams +type SemanticTokensParams struct { + // The text document. + TextDocument TextDocumentIdentifier `json:"textDocument"` + WorkDoneProgressParams + PartialResultParams +} + +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#semanticTokensPartialResult +type SemanticTokensPartialResult struct { + Data []uint32 `json:"data"` +} + +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#semanticTokensRangeParams +type SemanticTokensRangeParams struct { + // The text document. + TextDocument TextDocumentIdentifier `json:"textDocument"` + // The range the semantic tokens are requested for. + Range Range `json:"range"` + WorkDoneProgressParams + PartialResultParams +} + +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#semanticTokensRegistrationOptions +type SemanticTokensRegistrationOptions struct { + TextDocumentRegistrationOptions + SemanticTokensOptions + StaticRegistrationOptions +} + +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#semanticTokensWorkspaceClientCapabilities +type SemanticTokensWorkspaceClientCapabilities struct { + // Whether the client implementation supports a refresh request sent from + // the server to the client. + // + // Note that this event is global and will force the client to refresh all + // semantic tokens currently shown. It should be used with absolute care + // and is useful for situation where a server for example detects a project + // wide change that requires such a calculation. + RefreshSupport bool `json:"refreshSupport,omitempty"` +} + +// Defines the capabilities provided by a language +// server. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#serverCapabilities +type ServerCapabilities struct { + // The position encoding the server picked from the encodings offered + // by the client via the client capability `general.positionEncodings`. + // + // If the client didn't provide any position encodings the only valid + // value that a server can return is 'utf-16'. + // + // If omitted it defaults to 'utf-16'. + // + // @since 3.17.0 + PositionEncoding *PositionEncodingKind `json:"positionEncoding,omitempty"` + // Defines how text documents are synced. Is either a detailed structure + // defining each notification or for backwards compatibility the + // TextDocumentSyncKind number. + TextDocumentSync interface{} `json:"textDocumentSync,omitempty"` + // Defines how notebook documents are synced. + // + // @since 3.17.0 + NotebookDocumentSync *Or_ServerCapabilities_notebookDocumentSync `json:"notebookDocumentSync,omitempty"` + // The server provides completion support. + CompletionProvider *CompletionOptions `json:"completionProvider,omitempty"` + // The server provides hover support. + HoverProvider *Or_ServerCapabilities_hoverProvider `json:"hoverProvider,omitempty"` + // The server provides signature help support. + SignatureHelpProvider *SignatureHelpOptions `json:"signatureHelpProvider,omitempty"` + // The server provides Goto Declaration support. + DeclarationProvider *Or_ServerCapabilities_declarationProvider `json:"declarationProvider,omitempty"` + // The server provides goto definition support. + DefinitionProvider *Or_ServerCapabilities_definitionProvider `json:"definitionProvider,omitempty"` + // The server provides Goto Type Definition support. + TypeDefinitionProvider *Or_ServerCapabilities_typeDefinitionProvider `json:"typeDefinitionProvider,omitempty"` + // The server provides Goto Implementation support. + ImplementationProvider *Or_ServerCapabilities_implementationProvider `json:"implementationProvider,omitempty"` + // The server provides find references support. + ReferencesProvider *Or_ServerCapabilities_referencesProvider `json:"referencesProvider,omitempty"` + // The server provides document highlight support. + DocumentHighlightProvider *Or_ServerCapabilities_documentHighlightProvider `json:"documentHighlightProvider,omitempty"` + // The server provides document symbol support. + DocumentSymbolProvider *Or_ServerCapabilities_documentSymbolProvider `json:"documentSymbolProvider,omitempty"` + // The server provides code actions. CodeActionOptions may only be + // specified if the client states that it supports + // `codeActionLiteralSupport` in its initial `initialize` request. + CodeActionProvider interface{} `json:"codeActionProvider,omitempty"` + // The server provides code lens. + CodeLensProvider *CodeLensOptions `json:"codeLensProvider,omitempty"` + // The server provides document link support. + DocumentLinkProvider *DocumentLinkOptions `json:"documentLinkProvider,omitempty"` + // The server provides color provider support. + ColorProvider *Or_ServerCapabilities_colorProvider `json:"colorProvider,omitempty"` + // The server provides workspace symbol support. + WorkspaceSymbolProvider *Or_ServerCapabilities_workspaceSymbolProvider `json:"workspaceSymbolProvider,omitempty"` + // The server provides document formatting. + DocumentFormattingProvider *Or_ServerCapabilities_documentFormattingProvider `json:"documentFormattingProvider,omitempty"` + // The server provides document range formatting. + DocumentRangeFormattingProvider *Or_ServerCapabilities_documentRangeFormattingProvider `json:"documentRangeFormattingProvider,omitempty"` + // The server provides document formatting on typing. + DocumentOnTypeFormattingProvider *DocumentOnTypeFormattingOptions `json:"documentOnTypeFormattingProvider,omitempty"` + // The server provides rename support. RenameOptions may only be + // specified if the client states that it supports + // `prepareSupport` in its initial `initialize` request. + RenameProvider interface{} `json:"renameProvider,omitempty"` + // The server provides folding provider support. + FoldingRangeProvider *Or_ServerCapabilities_foldingRangeProvider `json:"foldingRangeProvider,omitempty"` + // The server provides selection range support. + SelectionRangeProvider *Or_ServerCapabilities_selectionRangeProvider `json:"selectionRangeProvider,omitempty"` + // The server provides execute command support. + ExecuteCommandProvider *ExecuteCommandOptions `json:"executeCommandProvider,omitempty"` + // The server provides call hierarchy support. + // + // @since 3.16.0 + CallHierarchyProvider *Or_ServerCapabilities_callHierarchyProvider `json:"callHierarchyProvider,omitempty"` + // The server provides linked editing range support. + // + // @since 3.16.0 + LinkedEditingRangeProvider *Or_ServerCapabilities_linkedEditingRangeProvider `json:"linkedEditingRangeProvider,omitempty"` + // The server provides semantic tokens support. + // + // @since 3.16.0 + SemanticTokensProvider interface{} `json:"semanticTokensProvider,omitempty"` + // The server provides moniker support. + // + // @since 3.16.0 + MonikerProvider *Or_ServerCapabilities_monikerProvider `json:"monikerProvider,omitempty"` + // The server provides type hierarchy support. + // + // @since 3.17.0 + TypeHierarchyProvider *Or_ServerCapabilities_typeHierarchyProvider `json:"typeHierarchyProvider,omitempty"` + // The server provides inline values. + // + // @since 3.17.0 + InlineValueProvider *Or_ServerCapabilities_inlineValueProvider `json:"inlineValueProvider,omitempty"` + // The server provides inlay hints. + // + // @since 3.17.0 + InlayHintProvider interface{} `json:"inlayHintProvider,omitempty"` + // The server has support for pull model diagnostics. + // + // @since 3.17.0 + DiagnosticProvider *Or_ServerCapabilities_diagnosticProvider `json:"diagnosticProvider,omitempty"` + // Inline completion options used during static registration. + // + // @since 3.18.0 + // @proposed + InlineCompletionProvider *Or_ServerCapabilities_inlineCompletionProvider `json:"inlineCompletionProvider,omitempty"` + // Workspace specific server capabilities. + Workspace *WorkspaceOptions `json:"workspace,omitempty"` + // Experimental server capabilities. + Experimental interface{} `json:"experimental,omitempty"` +} + +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#serverCompletionItemOptions +type ServerCompletionItemOptions struct { + // The server has support for completion item label + // details (see also `CompletionItemLabelDetails`) when + // receiving a completion item in a resolve call. + // + // @since 3.17.0 + LabelDetailsSupport bool `json:"labelDetailsSupport,omitempty"` +} + +// Information about the server +// +// @since 3.15.0 +// @since 3.18.0 ServerInfo type name added. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#serverInfo +type ServerInfo struct { + // The name of the server as defined by the server. + Name string `json:"name"` + // The server's version as defined by the server. + Version string `json:"version,omitempty"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#setTraceParams +type SetTraceParams struct { + Value TraceValue `json:"value"` +} + +// Client capabilities for the showDocument request. +// +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#showDocumentClientCapabilities +type ShowDocumentClientCapabilities struct { + // The client has support for the showDocument + // request. + Support bool `json:"support"` +} + +// Params to show a resource in the UI. +// +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#showDocumentParams +type ShowDocumentParams struct { + // The uri to show. + URI URI `json:"uri"` + // Indicates to show the resource in an external program. + // To show, for example, `https://code.visualstudio.com/` + // in the default WEB browser set `external` to `true`. + External bool `json:"external,omitempty"` + // An optional property to indicate whether the editor + // showing the document should take focus or not. + // Clients might ignore this property if an external + // program is started. + TakeFocus bool `json:"takeFocus,omitempty"` + // An optional selection range if the document is a text + // document. Clients might ignore the property if an + // external program is started or the file is not a text + // file. + Selection *Range `json:"selection,omitempty"` +} + +// The result of a showDocument request. +// +// @since 3.16.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#showDocumentResult +type ShowDocumentResult struct { + // A boolean indicating if the show was successful. + Success bool `json:"success"` +} + +// The parameters of a notification message. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#showMessageParams +type ShowMessageParams struct { + // The message type. See {@link MessageType} + Type MessageType `json:"type"` + // The actual message. + Message string `json:"message"` +} + +// Show message request client capabilities +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#showMessageRequestClientCapabilities +type ShowMessageRequestClientCapabilities struct { + // Capabilities specific to the `MessageActionItem` type. + MessageActionItem *ClientShowMessageActionItemOptions `json:"messageActionItem,omitempty"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#showMessageRequestParams +type ShowMessageRequestParams struct { + // The message type. See {@link MessageType} + Type MessageType `json:"type"` + // The actual message. + Message string `json:"message"` + // The message action items to present. + Actions []MessageActionItem `json:"actions,omitempty"` +} + +// Signature help represents the signature of something +// callable. There can be multiple signature but only one +// active and only one active parameter. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#signatureHelp +type SignatureHelp struct { + // One or more signatures. + Signatures []SignatureInformation `json:"signatures"` + // The active signature. If omitted or the value lies outside the + // range of `signatures` the value defaults to zero or is ignored if + // the `SignatureHelp` has no signatures. + // + // Whenever possible implementors should make an active decision about + // the active signature and shouldn't rely on a default value. + // + // In future version of the protocol this property might become + // mandatory to better express this. + ActiveSignature uint32 `json:"activeSignature,omitempty"` + // The active parameter of the active signature. + // + // If `null`, no parameter of the signature is active (for example a named + // argument that does not match any declared parameters). This is only valid + // if the client specifies the client capability + // `textDocument.signatureHelp.noActiveParameterSupport === true` + // + // If omitted or the value lies outside the range of + // `signatures[activeSignature].parameters` defaults to 0 if the active + // signature has parameters. + // + // If the active signature has no parameters it is ignored. + // + // In future version of the protocol this property might become + // mandatory (but still nullable) to better express the active parameter if + // the active signature does have any. + ActiveParameter uint32 `json:"activeParameter,omitempty"` +} + +// Client Capabilities for a {@link SignatureHelpRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#signatureHelpClientCapabilities +type SignatureHelpClientCapabilities struct { + // Whether signature help supports dynamic registration. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` + // The client supports the following `SignatureInformation` + // specific properties. + SignatureInformation *ClientSignatureInformationOptions `json:"signatureInformation,omitempty"` + // The client supports to send additional context information for a + // `textDocument/signatureHelp` request. A client that opts into + // contextSupport will also support the `retriggerCharacters` on + // `SignatureHelpOptions`. + // + // @since 3.15.0 + ContextSupport bool `json:"contextSupport,omitempty"` +} + +// Additional information about the context in which a signature help request was triggered. +// +// @since 3.15.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#signatureHelpContext +type SignatureHelpContext struct { + // Action that caused signature help to be triggered. + TriggerKind SignatureHelpTriggerKind `json:"triggerKind"` + // Character that caused signature help to be triggered. + // + // This is undefined when `triggerKind !== SignatureHelpTriggerKind.TriggerCharacter` + TriggerCharacter string `json:"triggerCharacter,omitempty"` + // `true` if signature help was already showing when it was triggered. + // + // Retriggers occurs when the signature help is already active and can be caused by actions such as + // typing a trigger character, a cursor move, or document content changes. + IsRetrigger bool `json:"isRetrigger"` + // The currently active `SignatureHelp`. + // + // The `activeSignatureHelp` has its `SignatureHelp.activeSignature` field updated based on + // the user navigating through available signatures. + ActiveSignatureHelp *SignatureHelp `json:"activeSignatureHelp,omitempty"` +} + +// Server Capabilities for a {@link SignatureHelpRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#signatureHelpOptions +type SignatureHelpOptions struct { + // List of characters that trigger signature help automatically. + TriggerCharacters []string `json:"triggerCharacters,omitempty"` + // List of characters that re-trigger signature help. + // + // These trigger characters are only active when signature help is already showing. All trigger characters + // are also counted as re-trigger characters. + // + // @since 3.15.0 + RetriggerCharacters []string `json:"retriggerCharacters,omitempty"` + WorkDoneProgressOptions +} + +// Parameters for a {@link SignatureHelpRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#signatureHelpParams +type SignatureHelpParams struct { + // The signature help context. This is only available if the client specifies + // to send this using the client capability `textDocument.signatureHelp.contextSupport === true` + // + // @since 3.15.0 + Context *SignatureHelpContext `json:"context,omitempty"` + TextDocumentPositionParams + WorkDoneProgressParams +} + +// Registration options for a {@link SignatureHelpRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#signatureHelpRegistrationOptions +type SignatureHelpRegistrationOptions struct { + TextDocumentRegistrationOptions + SignatureHelpOptions +} + +// How a signature help was triggered. +// +// @since 3.15.0 +type SignatureHelpTriggerKind uint32 + +// Represents the signature of something callable. A signature +// can have a label, like a function-name, a doc-comment, and +// a set of parameters. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#signatureInformation +type SignatureInformation struct { + // The label of this signature. Will be shown in + // the UI. + Label string `json:"label"` + // The human-readable doc-comment of this signature. Will be shown + // in the UI but can be omitted. + Documentation *Or_SignatureInformation_documentation `json:"documentation,omitempty"` + // The parameters of this signature. + Parameters []ParameterInformation `json:"parameters,omitempty"` + // The index of the active parameter. + // + // If `null`, no parameter of the signature is active (for example a named + // argument that does not match any declared parameters). This is only valid + // if the client specifies the client capability + // `textDocument.signatureHelp.noActiveParameterSupport === true` + // + // If provided (or `null`), this is used in place of + // `SignatureHelp.activeParameter`. + // + // @since 3.16.0 + ActiveParameter uint32 `json:"activeParameter,omitempty"` +} + +// An interactive text edit. +// +// @since 3.18.0 +// @proposed +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#snippetTextEdit +type SnippetTextEdit struct { + // The range of the text document to be manipulated. + Range Range `json:"range"` + // The snippet to be inserted. + Snippet StringValue `json:"snippet"` + // The actual identifier of the snippet edit. + AnnotationID *ChangeAnnotationIdentifier `json:"annotationId,omitempty"` +} + +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#staleRequestSupportOptions +type StaleRequestSupportOptions struct { + // The client will actively cancel the request. + Cancel bool `json:"cancel"` + // The list of requests for which the client + // will retry the request if it receives a + // response with error code `ContentModified` + RetryOnContentModified []string `json:"retryOnContentModified"` +} + +// Static registration options to be returned in the initialize +// request. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#staticRegistrationOptions +type StaticRegistrationOptions struct { + // The id used to register the request. The id can be used to deregister + // the request again. See also Registration#id. + ID string `json:"id,omitempty"` +} + +// A string value used as a snippet is a template which allows to insert text +// and to control the editor cursor when insertion happens. +// +// A snippet can define tab stops and placeholders with `$1`, `$2` +// and `${3:foo}`. `$0` defines the final tab stop, it defaults to +// the end of the snippet. Variables are defined with `$name` and +// `${name:default value}`. +// +// @since 3.18.0 +// @proposed +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#stringValue +type StringValue struct { + // The kind of string value. + Kind string `json:"kind"` + // The snippet string. + Value string `json:"value"` +} + +// Represents information about programming constructs like variables, classes, +// interfaces etc. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#symbolInformation +type SymbolInformation struct { + // extends BaseSymbolInformation + // Indicates if this symbol is deprecated. + // + // @deprecated Use tags instead + Deprecated bool `json:"deprecated,omitempty"` + // The location of this symbol. The location's range is used by a tool + // to reveal the location in the editor. If the symbol is selected in the + // tool the range's start information is used to position the cursor. So + // the range usually spans more than the actual symbol's name and does + // normally include things like visibility modifiers. + // + // The range doesn't have to denote a node range in the sense of an abstract + // syntax tree. It can therefore not be used to re-construct a hierarchy of + // the symbols. + Location Location `json:"location"` + // The name of this symbol. + Name string `json:"name"` + // The kind of this symbol. + Kind SymbolKind `json:"kind"` + // Tags for this symbol. + // + // @since 3.16.0 + Tags []SymbolTag `json:"tags,omitempty"` + // The name of the symbol containing this symbol. This information is for + // user interface purposes (e.g. to render a qualifier in the user interface + // if necessary). It can't be used to re-infer a hierarchy for the document + // symbols. + ContainerName string `json:"containerName,omitempty"` +} + +// A symbol kind. +type SymbolKind uint32 + +// Symbol tags are extra annotations that tweak the rendering of a symbol. +// +// @since 3.16 +type SymbolTag uint32 + +// Describe options to be used when registered for text document change events. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocumentChangeRegistrationOptions +type TextDocumentChangeRegistrationOptions struct { + // How documents are synced to the server. + SyncKind TextDocumentSyncKind `json:"syncKind"` + TextDocumentRegistrationOptions +} + +// Text document specific client capabilities. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocumentClientCapabilities +type TextDocumentClientCapabilities struct { + // Defines which synchronization capabilities the client supports. + Synchronization *TextDocumentSyncClientCapabilities `json:"synchronization,omitempty"` + // Capabilities specific to the `textDocument/completion` request. + Completion CompletionClientCapabilities `json:"completion,omitempty"` + // Capabilities specific to the `textDocument/hover` request. + Hover *HoverClientCapabilities `json:"hover,omitempty"` + // Capabilities specific to the `textDocument/signatureHelp` request. + SignatureHelp *SignatureHelpClientCapabilities `json:"signatureHelp,omitempty"` + // Capabilities specific to the `textDocument/declaration` request. + // + // @since 3.14.0 + Declaration *DeclarationClientCapabilities `json:"declaration,omitempty"` + // Capabilities specific to the `textDocument/definition` request. + Definition *DefinitionClientCapabilities `json:"definition,omitempty"` + // Capabilities specific to the `textDocument/typeDefinition` request. + // + // @since 3.6.0 + TypeDefinition *TypeDefinitionClientCapabilities `json:"typeDefinition,omitempty"` + // Capabilities specific to the `textDocument/implementation` request. + // + // @since 3.6.0 + Implementation *ImplementationClientCapabilities `json:"implementation,omitempty"` + // Capabilities specific to the `textDocument/references` request. + References *ReferenceClientCapabilities `json:"references,omitempty"` + // Capabilities specific to the `textDocument/documentHighlight` request. + DocumentHighlight *DocumentHighlightClientCapabilities `json:"documentHighlight,omitempty"` + // Capabilities specific to the `textDocument/documentSymbol` request. + DocumentSymbol DocumentSymbolClientCapabilities `json:"documentSymbol,omitempty"` + // Capabilities specific to the `textDocument/codeAction` request. + CodeAction CodeActionClientCapabilities `json:"codeAction,omitempty"` + // Capabilities specific to the `textDocument/codeLens` request. + CodeLens *CodeLensClientCapabilities `json:"codeLens,omitempty"` + // Capabilities specific to the `textDocument/documentLink` request. + DocumentLink *DocumentLinkClientCapabilities `json:"documentLink,omitempty"` + // Capabilities specific to the `textDocument/documentColor` and the + // `textDocument/colorPresentation` request. + // + // @since 3.6.0 + ColorProvider *DocumentColorClientCapabilities `json:"colorProvider,omitempty"` + // Capabilities specific to the `textDocument/formatting` request. + Formatting *DocumentFormattingClientCapabilities `json:"formatting,omitempty"` + // Capabilities specific to the `textDocument/rangeFormatting` request. + RangeFormatting *DocumentRangeFormattingClientCapabilities `json:"rangeFormatting,omitempty"` + // Capabilities specific to the `textDocument/onTypeFormatting` request. + OnTypeFormatting *DocumentOnTypeFormattingClientCapabilities `json:"onTypeFormatting,omitempty"` + // Capabilities specific to the `textDocument/rename` request. + Rename *RenameClientCapabilities `json:"rename,omitempty"` + // Capabilities specific to the `textDocument/foldingRange` request. + // + // @since 3.10.0 + FoldingRange *FoldingRangeClientCapabilities `json:"foldingRange,omitempty"` + // Capabilities specific to the `textDocument/selectionRange` request. + // + // @since 3.15.0 + SelectionRange *SelectionRangeClientCapabilities `json:"selectionRange,omitempty"` + // Capabilities specific to the `textDocument/publishDiagnostics` notification. + PublishDiagnostics PublishDiagnosticsClientCapabilities `json:"publishDiagnostics,omitempty"` + // Capabilities specific to the various call hierarchy requests. + // + // @since 3.16.0 + CallHierarchy *CallHierarchyClientCapabilities `json:"callHierarchy,omitempty"` + // Capabilities specific to the various semantic token request. + // + // @since 3.16.0 + SemanticTokens SemanticTokensClientCapabilities `json:"semanticTokens,omitempty"` + // Capabilities specific to the `textDocument/linkedEditingRange` request. + // + // @since 3.16.0 + LinkedEditingRange *LinkedEditingRangeClientCapabilities `json:"linkedEditingRange,omitempty"` + // Client capabilities specific to the `textDocument/moniker` request. + // + // @since 3.16.0 + Moniker *MonikerClientCapabilities `json:"moniker,omitempty"` + // Capabilities specific to the various type hierarchy requests. + // + // @since 3.17.0 + TypeHierarchy *TypeHierarchyClientCapabilities `json:"typeHierarchy,omitempty"` + // Capabilities specific to the `textDocument/inlineValue` request. + // + // @since 3.17.0 + InlineValue *InlineValueClientCapabilities `json:"inlineValue,omitempty"` + // Capabilities specific to the `textDocument/inlayHint` request. + // + // @since 3.17.0 + InlayHint *InlayHintClientCapabilities `json:"inlayHint,omitempty"` + // Capabilities specific to the diagnostic pull model. + // + // @since 3.17.0 + Diagnostic *DiagnosticClientCapabilities `json:"diagnostic,omitempty"` + // Client capabilities specific to inline completions. + // + // @since 3.18.0 + // @proposed + InlineCompletion *InlineCompletionClientCapabilities `json:"inlineCompletion,omitempty"` +} + +// An event describing a change to a text document. If only a text is provided +// it is considered to be the full content of the document. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocumentContentChangeEvent +type TextDocumentContentChangeEvent = Or_TextDocumentContentChangeEvent // (alias) +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocumentContentChangePartial +type TextDocumentContentChangePartial struct { + // The range of the document that changed. + Range *Range `json:"range,omitempty"` + // The optional length of the range that got replaced. + // + // @deprecated use range instead. + RangeLength uint32 `json:"rangeLength,omitempty"` + // The new text for the provided range. + Text string `json:"text"` +} + +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocumentContentChangeWholeDocument +type TextDocumentContentChangeWholeDocument struct { + // The new text of the whole document. + Text string `json:"text"` +} + +// Client capabilities for a text document content provider. +// +// @since 3.18.0 +// @proposed +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocumentContentClientCapabilities +type TextDocumentContentClientCapabilities struct { + // Text document content provider supports dynamic registration. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` +} + +// Text document content provider options. +// +// @since 3.18.0 +// @proposed +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocumentContentOptions +type TextDocumentContentOptions struct { + // The scheme for which the server provides content. + Scheme string `json:"scheme"` +} + +// Parameters for the `workspace/textDocumentContent` request. +// +// @since 3.18.0 +// @proposed +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocumentContentParams +type TextDocumentContentParams struct { + // The uri of the text document. + URI DocumentUri `json:"uri"` +} + +// Parameters for the `workspace/textDocumentContent/refresh` request. +// +// @since 3.18.0 +// @proposed +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocumentContentRefreshParams +type TextDocumentContentRefreshParams struct { + // The uri of the text document to refresh. + URI DocumentUri `json:"uri"` +} + +// Text document content provider registration options. +// +// @since 3.18.0 +// @proposed +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocumentContentRegistrationOptions +type TextDocumentContentRegistrationOptions struct { + TextDocumentContentOptions + StaticRegistrationOptions +} + +// Describes textual changes on a text document. A TextDocumentEdit describes all changes +// on a document version Si and after they are applied move the document to version Si+1. +// So the creator of a TextDocumentEdit doesn't need to sort the array of edits or do any +// kind of ordering. However the edits must be non overlapping. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocumentEdit +type TextDocumentEdit struct { + // The text document to change. + TextDocument OptionalVersionedTextDocumentIdentifier `json:"textDocument"` + // The edits to be applied. + // + // @since 3.16.0 - support for AnnotatedTextEdit. This is guarded using a + // client capability. + // + // @since 3.18.0 - support for SnippetTextEdit. This is guarded using a + // client capability. + Edits []Or_TextDocumentEdit_edits_Elem `json:"edits"` +} + +// A document filter denotes a document by different properties like +// the {@link TextDocument.languageId language}, the {@link Uri.scheme scheme} of +// its resource, or a glob-pattern that is applied to the {@link TextDocument.fileName path}. +// +// Glob patterns can have the following syntax: +// +// - `*` to match one or more characters in a path segment +// - `?` to match on one character in a path segment +// - `**` to match any number of path segments, including none +// - `{}` to group sub patterns into an OR expression. (e.g. `**/*.{ts,js}` matches all TypeScript and JavaScript files) +// - `[]` to declare a range of characters to match in a path segment (e.g., `example.[0-9]` to match on `example.0`, `example.1`, …) +// - `[!...]` to negate a range of characters to match in a path segment (e.g., `example.[!0-9]` to match on `example.a`, `example.b`, but not `example.0`) +// +// @sample A language filter that applies to typescript files on disk: `{ language: 'typescript', scheme: 'file' }` +// @sample A language filter that applies to all package.json paths: `{ language: 'json', pattern: '**package.json' }` +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocumentFilter +type TextDocumentFilter = Or_TextDocumentFilter // (alias) +// A document filter where `language` is required field. +// +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocumentFilterLanguage +type TextDocumentFilterLanguage struct { + // A language id, like `typescript`. + Language string `json:"language"` + // A Uri {@link Uri.scheme scheme}, like `file` or `untitled`. + Scheme string `json:"scheme,omitempty"` + // A glob pattern, like **/*.{ts,js}. See TextDocumentFilter for examples. + // + // @since 3.18.0 - support for relative patterns. + Pattern *GlobPattern `json:"pattern,omitempty"` +} + +// A document filter where `pattern` is required field. +// +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocumentFilterPattern +type TextDocumentFilterPattern struct { + // A language id, like `typescript`. + Language string `json:"language,omitempty"` + // A Uri {@link Uri.scheme scheme}, like `file` or `untitled`. + Scheme string `json:"scheme,omitempty"` + // A glob pattern, like **/*.{ts,js}. See TextDocumentFilter for examples. + // + // @since 3.18.0 - support for relative patterns. + Pattern GlobPattern `json:"pattern"` +} + +// A document filter where `scheme` is required field. +// +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocumentFilterScheme +type TextDocumentFilterScheme struct { + // A language id, like `typescript`. + Language string `json:"language,omitempty"` + // A Uri {@link Uri.scheme scheme}, like `file` or `untitled`. + Scheme string `json:"scheme"` + // A glob pattern, like **/*.{ts,js}. See TextDocumentFilter for examples. + // + // @since 3.18.0 - support for relative patterns. + Pattern *GlobPattern `json:"pattern,omitempty"` +} + +// A literal to identify a text document in the client. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocumentIdentifier +type TextDocumentIdentifier struct { + // The text document's uri. + URI DocumentUri `json:"uri"` +} + +// An item to transfer a text document from the client to the +// server. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocumentItem +type TextDocumentItem struct { + // The text document's uri. + URI DocumentUri `json:"uri"` + // The text document's language identifier. + LanguageID LanguageKind `json:"languageId"` + // The version number of this document (it will increase after each + // change, including undo/redo). + Version int32 `json:"version"` + // The content of the opened text document. + Text string `json:"text"` +} + +// A parameter literal used in requests to pass a text document and a position inside that +// document. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocumentPositionParams +type TextDocumentPositionParams struct { + // The text document. + TextDocument TextDocumentIdentifier `json:"textDocument"` + // The position inside the text document. + Position Position `json:"position"` +} + +// General text document registration options. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocumentRegistrationOptions +type TextDocumentRegistrationOptions struct { + // A document selector to identify the scope of the registration. If set to null + // the document selector provided on the client side will be used. + DocumentSelector DocumentSelector `json:"documentSelector"` +} + +// Represents reasons why a text document is saved. +type TextDocumentSaveReason uint32 + +// Save registration options. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocumentSaveRegistrationOptions +type TextDocumentSaveRegistrationOptions struct { + TextDocumentRegistrationOptions + SaveOptions +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocumentSyncClientCapabilities +type TextDocumentSyncClientCapabilities struct { + // Whether text document synchronization supports dynamic registration. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` + // The client supports sending will save notifications. + WillSave bool `json:"willSave,omitempty"` + // The client supports sending a will save request and + // waits for a response providing text edits which will + // be applied to the document before it is saved. + WillSaveWaitUntil bool `json:"willSaveWaitUntil,omitempty"` + // The client supports did save notifications. + DidSave bool `json:"didSave,omitempty"` +} + +// Defines how the host (editor) should sync +// document changes to the language server. +type TextDocumentSyncKind uint32 + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textDocumentSyncOptions +type TextDocumentSyncOptions struct { + // Open and close notifications are sent to the server. If omitted open close notification should not + // be sent. + OpenClose bool `json:"openClose,omitempty"` + // Change notifications are sent to the server. See TextDocumentSyncKind.None, TextDocumentSyncKind.Full + // and TextDocumentSyncKind.Incremental. If omitted it defaults to TextDocumentSyncKind.None. + Change TextDocumentSyncKind `json:"change,omitempty"` + // If present will save notifications are sent to the server. If omitted the notification should not be + // sent. + WillSave bool `json:"willSave,omitempty"` + // If present will save wait until requests are sent to the server. If omitted the request should not be + // sent. + WillSaveWaitUntil bool `json:"willSaveWaitUntil,omitempty"` + // If present save notifications are sent to the server. If omitted the notification should not be + // sent. + Save *SaveOptions `json:"save,omitempty"` +} + +// A text edit applicable to a text document. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#textEdit +type TextEdit struct { + // The range of the text document to be manipulated. To insert + // text into a document create a range where start === end. + Range Range `json:"range"` + // The string to be inserted. For delete operations use an + // empty string. + NewText string `json:"newText"` +} +type TokenFormat string +type TraceValue string + +// created for Tuple +type Tuple_ParameterInformation_label_Item1 struct { + Fld0 uint32 `json:"fld0"` + Fld1 uint32 `json:"fld1"` +} + +// Since 3.6.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#typeDefinitionClientCapabilities +type TypeDefinitionClientCapabilities struct { + // Whether implementation supports dynamic registration. If this is set to `true` + // the client supports the new `TypeDefinitionRegistrationOptions` return value + // for the corresponding server capability as well. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` + // The client supports additional metadata in the form of definition links. + // + // Since 3.14.0 + LinkSupport bool `json:"linkSupport,omitempty"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#typeDefinitionOptions +type TypeDefinitionOptions struct { + WorkDoneProgressOptions +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#typeDefinitionParams +type TypeDefinitionParams struct { + TextDocumentPositionParams + WorkDoneProgressParams + PartialResultParams +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#typeDefinitionRegistrationOptions +type TypeDefinitionRegistrationOptions struct { + TextDocumentRegistrationOptions + TypeDefinitionOptions + StaticRegistrationOptions +} + +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#typeHierarchyClientCapabilities +type TypeHierarchyClientCapabilities struct { + // Whether implementation supports dynamic registration. If this is set to `true` + // the client supports the new `(TextDocumentRegistrationOptions & StaticRegistrationOptions)` + // return value for the corresponding server capability as well. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` +} + +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#typeHierarchyItem +type TypeHierarchyItem struct { + // The name of this item. + Name string `json:"name"` + // The kind of this item. + Kind SymbolKind `json:"kind"` + // Tags for this item. + Tags []SymbolTag `json:"tags,omitempty"` + // More detail for this item, e.g. the signature of a function. + Detail string `json:"detail,omitempty"` + // The resource identifier of this item. + URI DocumentUri `json:"uri"` + // The range enclosing this symbol not including leading/trailing whitespace + // but everything else, e.g. comments and code. + Range Range `json:"range"` + // The range that should be selected and revealed when this symbol is being + // picked, e.g. the name of a function. Must be contained by the + // {@link TypeHierarchyItem.range `range`}. + SelectionRange Range `json:"selectionRange"` + // A data entry field that is preserved between a type hierarchy prepare and + // supertypes or subtypes requests. It could also be used to identify the + // type hierarchy in the server, helping improve the performance on + // resolving supertypes and subtypes. + Data interface{} `json:"data,omitempty"` +} + +// Type hierarchy options used during static registration. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#typeHierarchyOptions +type TypeHierarchyOptions struct { + WorkDoneProgressOptions +} + +// The parameter of a `textDocument/prepareTypeHierarchy` request. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#typeHierarchyPrepareParams +type TypeHierarchyPrepareParams struct { + TextDocumentPositionParams + WorkDoneProgressParams +} + +// Type hierarchy options used during static or dynamic registration. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#typeHierarchyRegistrationOptions +type TypeHierarchyRegistrationOptions struct { + TextDocumentRegistrationOptions + TypeHierarchyOptions + StaticRegistrationOptions +} + +// The parameter of a `typeHierarchy/subtypes` request. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#typeHierarchySubtypesParams +type TypeHierarchySubtypesParams struct { + Item TypeHierarchyItem `json:"item"` + WorkDoneProgressParams + PartialResultParams +} + +// The parameter of a `typeHierarchy/supertypes` request. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#typeHierarchySupertypesParams +type TypeHierarchySupertypesParams struct { + Item TypeHierarchyItem `json:"item"` + WorkDoneProgressParams + PartialResultParams +} + +// A diagnostic report indicating that the last returned +// report is still accurate. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#unchangedDocumentDiagnosticReport +type UnchangedDocumentDiagnosticReport struct { + // A document diagnostic report indicating + // no changes to the last result. A server can + // only return `unchanged` if result ids are + // provided. + Kind string `json:"kind"` + // A result id which will be sent on the next + // diagnostic request for the same document. + ResultID string `json:"resultId"` +} + +// Moniker uniqueness level to define scope of the moniker. +// +// @since 3.16.0 +type UniquenessLevel string + +// General parameters to unregister a request or notification. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#unregistration +type Unregistration struct { + // The id used to unregister the request or notification. Usually an id + // provided during the register request. + ID string `json:"id"` + // The method to unregister for. + Method string `json:"method"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#unregistrationParams +type UnregistrationParams struct { + Unregisterations []Unregistration `json:"unregisterations"` +} + +// A versioned notebook document identifier. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#versionedNotebookDocumentIdentifier +type VersionedNotebookDocumentIdentifier struct { + // The version number of this notebook document. + Version int32 `json:"version"` + // The notebook document's uri. + URI URI `json:"uri"` +} + +// A text document identifier to denote a specific version of a text document. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#versionedTextDocumentIdentifier +type VersionedTextDocumentIdentifier struct { + // The version number of this document. + Version int32 `json:"version"` + TextDocumentIdentifier +} +type WatchKind = uint32 // The parameters sent in a will save text document notification. +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#willSaveTextDocumentParams +type WillSaveTextDocumentParams struct { + // The document that will be saved. + TextDocument TextDocumentIdentifier `json:"textDocument"` + // The 'TextDocumentSaveReason'. + Reason TextDocumentSaveReason `json:"reason"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#windowClientCapabilities +type WindowClientCapabilities struct { + // It indicates whether the client supports server initiated + // progress using the `window/workDoneProgress/create` request. + // + // The capability also controls Whether client supports handling + // of progress notifications. If set servers are allowed to report a + // `workDoneProgress` property in the request specific server + // capabilities. + // + // @since 3.15.0 + WorkDoneProgress bool `json:"workDoneProgress,omitempty"` + // Capabilities specific to the showMessage request. + // + // @since 3.16.0 + ShowMessage *ShowMessageRequestClientCapabilities `json:"showMessage,omitempty"` + // Capabilities specific to the showDocument request. + // + // @since 3.16.0 + ShowDocument *ShowDocumentClientCapabilities `json:"showDocument,omitempty"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workDoneProgressBegin +type WorkDoneProgressBegin struct { + Kind string `json:"kind"` + // Mandatory title of the progress operation. Used to briefly inform about + // the kind of operation being performed. + // + // Examples: "Indexing" or "Linking dependencies". + Title string `json:"title"` + // Controls if a cancel button should show to allow the user to cancel the + // long running operation. Clients that don't support cancellation are allowed + // to ignore the setting. + Cancellable bool `json:"cancellable,omitempty"` + // Optional, more detailed associated progress message. Contains + // complementary information to the `title`. + // + // Examples: "3/25 files", "project/src/module2", "node_modules/some_dep". + // If unset, the previous progress message (if any) is still valid. + Message string `json:"message,omitempty"` + // Optional progress percentage to display (value 100 is considered 100%). + // If not provided infinite progress is assumed and clients are allowed + // to ignore the `percentage` value in subsequent in report notifications. + // + // The value should be steadily rising. Clients are free to ignore values + // that are not following this rule. The value range is [0, 100]. + Percentage uint32 `json:"percentage,omitempty"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workDoneProgressCancelParams +type WorkDoneProgressCancelParams struct { + // The token to be used to report progress. + Token ProgressToken `json:"token"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workDoneProgressCreateParams +type WorkDoneProgressCreateParams struct { + // The token to be used to report progress. + Token ProgressToken `json:"token"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workDoneProgressEnd +type WorkDoneProgressEnd struct { + Kind string `json:"kind"` + // Optional, a final message indicating to for example indicate the outcome + // of the operation. + Message string `json:"message,omitempty"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workDoneProgressOptions +type WorkDoneProgressOptions struct { + WorkDoneProgress bool `json:"workDoneProgress,omitempty"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workDoneProgressParams +type WorkDoneProgressParams struct { + // An optional token that a server can use to report work done progress. + WorkDoneToken ProgressToken `json:"workDoneToken,omitempty"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workDoneProgressReport +type WorkDoneProgressReport struct { + Kind string `json:"kind"` + // Controls enablement state of a cancel button. + // + // Clients that don't support cancellation or don't support controlling the button's + // enablement state are allowed to ignore the property. + Cancellable bool `json:"cancellable,omitempty"` + // Optional, more detailed associated progress message. Contains + // complementary information to the `title`. + // + // Examples: "3/25 files", "project/src/module2", "node_modules/some_dep". + // If unset, the previous progress message (if any) is still valid. + Message string `json:"message,omitempty"` + // Optional progress percentage to display (value 100 is considered 100%). + // If not provided infinite progress is assumed and clients are allowed + // to ignore the `percentage` value in subsequent in report notifications. + // + // The value should be steadily rising. Clients are free to ignore values + // that are not following this rule. The value range is [0, 100] + Percentage uint32 `json:"percentage,omitempty"` +} + +// Workspace specific client capabilities. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspaceClientCapabilities +type WorkspaceClientCapabilities struct { + // The client supports applying batch edits + // to the workspace by supporting the request + // 'workspace/applyEdit' + ApplyEdit bool `json:"applyEdit,omitempty"` + // Capabilities specific to `WorkspaceEdit`s. + WorkspaceEdit *WorkspaceEditClientCapabilities `json:"workspaceEdit,omitempty"` + // Capabilities specific to the `workspace/didChangeConfiguration` notification. + DidChangeConfiguration DidChangeConfigurationClientCapabilities `json:"didChangeConfiguration,omitempty"` + // Capabilities specific to the `workspace/didChangeWatchedFiles` notification. + DidChangeWatchedFiles DidChangeWatchedFilesClientCapabilities `json:"didChangeWatchedFiles,omitempty"` + // Capabilities specific to the `workspace/symbol` request. + Symbol *WorkspaceSymbolClientCapabilities `json:"symbol,omitempty"` + // Capabilities specific to the `workspace/executeCommand` request. + ExecuteCommand *ExecuteCommandClientCapabilities `json:"executeCommand,omitempty"` + // The client has support for workspace folders. + // + // @since 3.6.0 + WorkspaceFolders bool `json:"workspaceFolders,omitempty"` + // The client supports `workspace/configuration` requests. + // + // @since 3.6.0 + Configuration bool `json:"configuration,omitempty"` + // Capabilities specific to the semantic token requests scoped to the + // workspace. + // + // @since 3.16.0. + SemanticTokens *SemanticTokensWorkspaceClientCapabilities `json:"semanticTokens,omitempty"` + // Capabilities specific to the code lens requests scoped to the + // workspace. + // + // @since 3.16.0. + CodeLens *CodeLensWorkspaceClientCapabilities `json:"codeLens,omitempty"` + // The client has support for file notifications/requests for user operations on files. + // + // Since 3.16.0 + FileOperations *FileOperationClientCapabilities `json:"fileOperations,omitempty"` + // Capabilities specific to the inline values requests scoped to the + // workspace. + // + // @since 3.17.0. + InlineValue *InlineValueWorkspaceClientCapabilities `json:"inlineValue,omitempty"` + // Capabilities specific to the inlay hint requests scoped to the + // workspace. + // + // @since 3.17.0. + InlayHint *InlayHintWorkspaceClientCapabilities `json:"inlayHint,omitempty"` + // Capabilities specific to the diagnostic requests scoped to the + // workspace. + // + // @since 3.17.0. + Diagnostics *DiagnosticWorkspaceClientCapabilities `json:"diagnostics,omitempty"` + // Capabilities specific to the folding range requests scoped to the workspace. + // + // @since 3.18.0 + // @proposed + FoldingRange *FoldingRangeWorkspaceClientCapabilities `json:"foldingRange,omitempty"` + // Capabilities specific to the `workspace/textDocumentContent` request. + // + // @since 3.18.0 + // @proposed + TextDocumentContent *TextDocumentContentClientCapabilities `json:"textDocumentContent,omitempty"` +} + +// Parameters of the workspace diagnostic request. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspaceDiagnosticParams +type WorkspaceDiagnosticParams struct { + // The additional identifier provided during registration. + Identifier string `json:"identifier,omitempty"` + // The currently known diagnostic reports with their + // previous result ids. + PreviousResultIds []PreviousResultId `json:"previousResultIds"` + WorkDoneProgressParams + PartialResultParams +} + +// A workspace diagnostic report. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspaceDiagnosticReport +type WorkspaceDiagnosticReport struct { + Items []WorkspaceDocumentDiagnosticReport `json:"items"` +} + +// A partial result for a workspace diagnostic report. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspaceDiagnosticReportPartialResult +type WorkspaceDiagnosticReportPartialResult struct { + Items []WorkspaceDocumentDiagnosticReport `json:"items"` +} + +// A workspace diagnostic document report. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspaceDocumentDiagnosticReport +type WorkspaceDocumentDiagnosticReport = Or_WorkspaceDocumentDiagnosticReport // (alias) +// A workspace edit represents changes to many resources managed in the workspace. The edit +// should either provide `changes` or `documentChanges`. If documentChanges are present +// they are preferred over `changes` if the client can handle versioned document edits. +// +// Since version 3.13.0 a workspace edit can contain resource operations as well. If resource +// operations are present clients need to execute the operations in the order in which they +// are provided. So a workspace edit for example can consist of the following two changes: +// (1) a create file a.txt and (2) a text document edit which insert text into file a.txt. +// +// An invalid sequence (e.g. (1) delete file a.txt and (2) insert text into file a.txt) will +// cause failure of the operation. How the client recovers from the failure is described by +// the client capability: `workspace.workspaceEdit.failureHandling` +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspaceEdit +type WorkspaceEdit struct { + // Holds changes to existing resources. + Changes map[DocumentUri][]TextEdit `json:"changes,omitempty"` + // Depending on the client capability `workspace.workspaceEdit.resourceOperations` document changes + // are either an array of `TextDocumentEdit`s to express changes to n different text documents + // where each text document edit addresses a specific version of a text document. Or it can contain + // above `TextDocumentEdit`s mixed with create, rename and delete file / folder operations. + // + // Whether a client supports versioned document edits is expressed via + // `workspace.workspaceEdit.documentChanges` client capability. + // + // If a client neither supports `documentChanges` nor `workspace.workspaceEdit.resourceOperations` then + // only plain `TextEdit`s using the `changes` property are supported. + DocumentChanges []DocumentChange `json:"documentChanges,omitempty"` + // A map of change annotations that can be referenced in `AnnotatedTextEdit`s or create, rename and + // delete file / folder operations. + // + // Whether clients honor this property depends on the client capability `workspace.changeAnnotationSupport`. + // + // @since 3.16.0 + ChangeAnnotations map[ChangeAnnotationIdentifier]ChangeAnnotation `json:"changeAnnotations,omitempty"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspaceEditClientCapabilities +type WorkspaceEditClientCapabilities struct { + // The client supports versioned document changes in `WorkspaceEdit`s + DocumentChanges bool `json:"documentChanges,omitempty"` + // The resource operations the client supports. Clients should at least + // support 'create', 'rename' and 'delete' files and folders. + // + // @since 3.13.0 + ResourceOperations []ResourceOperationKind `json:"resourceOperations,omitempty"` + // The failure handling strategy of a client if applying the workspace edit + // fails. + // + // @since 3.13.0 + FailureHandling *FailureHandlingKind `json:"failureHandling,omitempty"` + // Whether the client normalizes line endings to the client specific + // setting. + // If set to `true` the client will normalize line ending characters + // in a workspace edit to the client-specified new line + // character. + // + // @since 3.16.0 + NormalizesLineEndings bool `json:"normalizesLineEndings,omitempty"` + // Whether the client in general supports change annotations on text edits, + // create file, rename file and delete file changes. + // + // @since 3.16.0 + ChangeAnnotationSupport *ChangeAnnotationsSupportOptions `json:"changeAnnotationSupport,omitempty"` + // Whether the client supports `WorkspaceEditMetadata` in `WorkspaceEdit`s. + // + // @since 3.18.0 + // @proposed + MetadataSupport bool `json:"metadataSupport,omitempty"` + // Whether the client supports snippets as text edits. + // + // @since 3.18.0 + // @proposed + SnippetEditSupport bool `json:"snippetEditSupport,omitempty"` +} + +// Additional data about a workspace edit. +// +// @since 3.18.0 +// @proposed +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspaceEditMetadata +type WorkspaceEditMetadata struct { + // Signal to the editor that this edit is a refactoring. + IsRefactoring bool `json:"isRefactoring,omitempty"` +} + +// A workspace folder inside a client. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspaceFolder +type WorkspaceFolder struct { + // The associated URI for this workspace folder. + URI URI `json:"uri"` + // The name of the workspace folder. Used to refer to this + // workspace folder in the user interface. + Name string `json:"name"` +} + +// The workspace folder change event. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspaceFoldersChangeEvent +type WorkspaceFoldersChangeEvent struct { + // The array of added workspace folders + Added []WorkspaceFolder `json:"added"` + // The array of the removed workspace folders + Removed []WorkspaceFolder `json:"removed"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspaceFoldersInitializeParams +type WorkspaceFoldersInitializeParams struct { + // The workspace folders configured in the client when the server starts. + // + // This property is only available if the client supports workspace folders. + // It can be `null` if the client supports workspace folders but none are + // configured. + // + // @since 3.6.0 + WorkspaceFolders []WorkspaceFolder `json:"workspaceFolders,omitempty"` +} + +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspaceFoldersServerCapabilities +type WorkspaceFoldersServerCapabilities struct { + // The server has support for workspace folders + Supported bool `json:"supported,omitempty"` + // Whether the server wants to receive workspace folder + // change notifications. + // + // If a string is provided the string is treated as an ID + // under which the notification is registered on the client + // side. The ID can be used to unregister for these events + // using the `client/unregisterCapability` request. + ChangeNotifications *Or_WorkspaceFoldersServerCapabilities_changeNotifications `json:"changeNotifications,omitempty"` +} + +// A full document diagnostic report for a workspace diagnostic result. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspaceFullDocumentDiagnosticReport +type WorkspaceFullDocumentDiagnosticReport struct { + // The URI for which diagnostic information is reported. + URI DocumentUri `json:"uri"` + // The version number for which the diagnostics are reported. + // If the document is not marked as open `null` can be provided. + Version int32 `json:"version"` + FullDocumentDiagnosticReport +} + +// Defines workspace specific capabilities of the server. +// +// @since 3.18.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspaceOptions +type WorkspaceOptions struct { + // The server supports workspace folder. + // + // @since 3.6.0 + WorkspaceFolders *WorkspaceFoldersServerCapabilities `json:"workspaceFolders,omitempty"` + // The server is interested in notifications/requests for operations on files. + // + // @since 3.16.0 + FileOperations *FileOperationOptions `json:"fileOperations,omitempty"` + // The server supports the `workspace/textDocumentContent` request. + // + // @since 3.18.0 + // @proposed + TextDocumentContent *Or_WorkspaceOptions_textDocumentContent `json:"textDocumentContent,omitempty"` +} + +// A special workspace symbol that supports locations without a range. +// +// See also SymbolInformation. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspaceSymbol +type WorkspaceSymbol struct { + // The location of the symbol. Whether a server is allowed to + // return a location without a range depends on the client + // capability `workspace.symbol.resolveSupport`. + // + // See SymbolInformation#location for more details. + Location Or_WorkspaceSymbol_location `json:"location"` + // A data entry field that is preserved on a workspace symbol between a + // workspace symbol request and a workspace symbol resolve request. + Data interface{} `json:"data,omitempty"` + BaseSymbolInformation +} + +// Client capabilities for a {@link WorkspaceSymbolRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspaceSymbolClientCapabilities +type WorkspaceSymbolClientCapabilities struct { + // Symbol request supports dynamic registration. + DynamicRegistration bool `json:"dynamicRegistration,omitempty"` + // Specific capabilities for the `SymbolKind` in the `workspace/symbol` request. + SymbolKind *ClientSymbolKindOptions `json:"symbolKind,omitempty"` + // The client supports tags on `SymbolInformation`. + // Clients supporting tags have to handle unknown tags gracefully. + // + // @since 3.16.0 + TagSupport *ClientSymbolTagOptions `json:"tagSupport,omitempty"` + // The client support partial workspace symbols. The client will send the + // request `workspaceSymbol/resolve` to the server to resolve additional + // properties. + // + // @since 3.17.0 + ResolveSupport *ClientSymbolResolveOptions `json:"resolveSupport,omitempty"` +} + +// Server capabilities for a {@link WorkspaceSymbolRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspaceSymbolOptions +type WorkspaceSymbolOptions struct { + // The server provides support to resolve additional + // information for a workspace symbol. + // + // @since 3.17.0 + ResolveProvider bool `json:"resolveProvider,omitempty"` + WorkDoneProgressOptions +} + +// The parameters of a {@link WorkspaceSymbolRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspaceSymbolParams +type WorkspaceSymbolParams struct { + // A query string to filter symbols by. Clients may send an empty + // string here to request all symbols. + // + // The `query`-parameter should be interpreted in a *relaxed way* as editors + // will apply their own highlighting and scoring on the results. A good rule + // of thumb is to match case-insensitive and to simply check that the + // characters of *query* appear in their order in a candidate symbol. + // Servers shouldn't use prefix, substring, or similar strict matching. + Query string `json:"query"` + WorkDoneProgressParams + PartialResultParams +} + +// Registration options for a {@link WorkspaceSymbolRequest}. +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspaceSymbolRegistrationOptions +type WorkspaceSymbolRegistrationOptions struct { + WorkspaceSymbolOptions +} + +// An unchanged document diagnostic report for a workspace diagnostic result. +// +// @since 3.17.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#workspaceUnchangedDocumentDiagnosticReport +type WorkspaceUnchangedDocumentDiagnosticReport struct { + // The URI for which diagnostic information is reported. + URI DocumentUri `json:"uri"` + // The version number for which the diagnostics are reported. + // If the document is not marked as open `null` can be provided. + Version int32 `json:"version"` + UnchangedDocumentDiagnosticReport +} + +// The initialize parameters +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#_InitializeParams +type XInitializeParams struct { + // The process Id of the parent process that started + // the server. + // + // Is `null` if the process has not been started by another process. + // If the parent process is not alive then the server should exit. + ProcessID int32 `json:"processId"` + // Information about the client + // + // @since 3.15.0 + ClientInfo *ClientInfo `json:"clientInfo,omitempty"` + // The locale the client is currently showing the user interface + // in. This must not necessarily be the locale of the operating + // system. + // + // Uses IETF language tags as the value's syntax + // (See https://en.wikipedia.org/wiki/IETF_language_tag) + // + // @since 3.16.0 + Locale string `json:"locale,omitempty"` + // The rootPath of the workspace. Is null + // if no folder is open. + // + // @deprecated in favour of rootUri. + RootPath string `json:"rootPath,omitempty"` + // The rootUri of the workspace. Is null if no + // folder is open. If both `rootPath` and `rootUri` are set + // `rootUri` wins. + // + // @deprecated in favour of workspaceFolders. + RootURI DocumentUri `json:"rootUri"` + // The capabilities provided by the client (editor or tool) + Capabilities ClientCapabilities `json:"capabilities"` + // User provided initialization options. + InitializationOptions interface{} `json:"initializationOptions,omitempty"` + // The initial trace setting. If omitted trace is disabled ('off'). + Trace *TraceValue `json:"trace,omitempty"` + WorkDoneProgressParams +} + +// The initialize parameters +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification#_InitializeParams +type _InitializeParams struct { + // The process Id of the parent process that started + // the server. + // + // Is `null` if the process has not been started by another process. + // If the parent process is not alive then the server should exit. + ProcessID int32 `json:"processId"` + // Information about the client + // + // @since 3.15.0 + ClientInfo *ClientInfo `json:"clientInfo,omitempty"` + // The locale the client is currently showing the user interface + // in. This must not necessarily be the locale of the operating + // system. + // + // Uses IETF language tags as the value's syntax + // (See https://en.wikipedia.org/wiki/IETF_language_tag) + // + // @since 3.16.0 + Locale string `json:"locale,omitempty"` + // The rootPath of the workspace. Is null + // if no folder is open. + // + // @deprecated in favour of rootUri. + RootPath string `json:"rootPath,omitempty"` + // The rootUri of the workspace. Is null if no + // folder is open. If both `rootPath` and `rootUri` are set + // `rootUri` wins. + // + // @deprecated in favour of workspaceFolders. + RootURI DocumentUri `json:"rootUri"` + // The capabilities provided by the client (editor or tool) + Capabilities ClientCapabilities `json:"capabilities"` + // User provided initialization options. + InitializationOptions interface{} `json:"initializationOptions,omitempty"` + // The initial trace setting. If omitted trace is disabled ('off'). + Trace *TraceValue `json:"trace,omitempty"` + WorkDoneProgressParams +} + +const ( + // A set of predefined code action kinds + // Empty kind. + Empty CodeActionKind = "" + // Base kind for quickfix actions: 'quickfix' + QuickFix CodeActionKind = "quickfix" + // Base kind for refactoring actions: 'refactor' + Refactor CodeActionKind = "refactor" + // Base kind for refactoring extraction actions: 'refactor.extract' + // + // Example extract actions: + // + // + // - Extract method + // - Extract function + // - Extract variable + // - Extract interface from class + // - ... + RefactorExtract CodeActionKind = "refactor.extract" + // Base kind for refactoring inline actions: 'refactor.inline' + // + // Example inline actions: + // + // + // - Inline function + // - Inline variable + // - Inline constant + // - ... + RefactorInline CodeActionKind = "refactor.inline" + // Base kind for refactoring move actions: `refactor.move` + // + // Example move actions: + // + // + // - Move a function to a new file + // - Move a property between classes + // - Move method to base class + // - ... + // + // @since 3.18.0 + // @proposed + RefactorMove CodeActionKind = "refactor.move" + // Base kind for refactoring rewrite actions: 'refactor.rewrite' + // + // Example rewrite actions: + // + // + // - Convert JavaScript function to class + // - Add or remove parameter + // - Encapsulate field + // - Make method static + // - Move method to base class + // - ... + RefactorRewrite CodeActionKind = "refactor.rewrite" + // Base kind for source actions: `source` + // + // Source code actions apply to the entire file. + Source CodeActionKind = "source" + // Base kind for an organize imports source action: `source.organizeImports` + SourceOrganizeImports CodeActionKind = "source.organizeImports" + // Base kind for auto-fix source actions: `source.fixAll`. + // + // Fix all actions automatically fix errors that have a clear fix that do not require user input. + // They should not suppress errors or perform unsafe fixes such as generating new types or classes. + // + // @since 3.15.0 + SourceFixAll CodeActionKind = "source.fixAll" + // Base kind for all code actions applying to the entire notebook's scope. CodeActionKinds using + // this should always begin with `notebook.` + // + // @since 3.18.0 + Notebook CodeActionKind = "notebook" + // The reason why code actions were requested. + // + // @since 3.17.0 + // Code actions were explicitly requested by the user or by an extension. + CodeActionInvoked CodeActionTriggerKind = 1 + // Code actions were requested automatically. + // + // This typically happens when current selection in a file changes, but can + // also be triggered when file content changes. + CodeActionAutomatic CodeActionTriggerKind = 2 + // The kind of a completion entry. + TextCompletion CompletionItemKind = 1 + MethodCompletion CompletionItemKind = 2 + FunctionCompletion CompletionItemKind = 3 + ConstructorCompletion CompletionItemKind = 4 + FieldCompletion CompletionItemKind = 5 + VariableCompletion CompletionItemKind = 6 + ClassCompletion CompletionItemKind = 7 + InterfaceCompletion CompletionItemKind = 8 + ModuleCompletion CompletionItemKind = 9 + PropertyCompletion CompletionItemKind = 10 + UnitCompletion CompletionItemKind = 11 + ValueCompletion CompletionItemKind = 12 + EnumCompletion CompletionItemKind = 13 + KeywordCompletion CompletionItemKind = 14 + SnippetCompletion CompletionItemKind = 15 + ColorCompletion CompletionItemKind = 16 + FileCompletion CompletionItemKind = 17 + ReferenceCompletion CompletionItemKind = 18 + FolderCompletion CompletionItemKind = 19 + EnumMemberCompletion CompletionItemKind = 20 + ConstantCompletion CompletionItemKind = 21 + StructCompletion CompletionItemKind = 22 + EventCompletion CompletionItemKind = 23 + OperatorCompletion CompletionItemKind = 24 + TypeParameterCompletion CompletionItemKind = 25 + // Completion item tags are extra annotations that tweak the rendering of a completion + // item. + // + // @since 3.15.0 + // Render a completion as obsolete, usually using a strike-out. + ComplDeprecated CompletionItemTag = 1 + // How a completion was triggered + // Completion was triggered by typing an identifier (24x7 code + // complete), manual invocation (e.g Ctrl+Space) or via API. + Invoked CompletionTriggerKind = 1 + // Completion was triggered by a trigger character specified by + // the `triggerCharacters` properties of the `CompletionRegistrationOptions`. + TriggerCharacter CompletionTriggerKind = 2 + // Completion was re-triggered as current completion list is incomplete + TriggerForIncompleteCompletions CompletionTriggerKind = 3 + // The diagnostic's severity. + // Reports an error. + SeverityError DiagnosticSeverity = 1 + // Reports a warning. + SeverityWarning DiagnosticSeverity = 2 + // Reports an information. + SeverityInformation DiagnosticSeverity = 3 + // Reports a hint. + SeverityHint DiagnosticSeverity = 4 + // The diagnostic tags. + // + // @since 3.15.0 + // Unused or unnecessary code. + // + // Clients are allowed to render diagnostics with this tag faded out instead of having + // an error squiggle. + Unnecessary DiagnosticTag = 1 + // Deprecated or obsolete code. + // + // Clients are allowed to rendered diagnostics with this tag strike through. + Deprecated DiagnosticTag = 2 + // The document diagnostic report kinds. + // + // @since 3.17.0 + // A diagnostic report with a full + // set of problems. + DiagnosticFull DocumentDiagnosticReportKind = "full" + // A report indicating that the last + // returned report is still accurate. + DiagnosticUnchanged DocumentDiagnosticReportKind = "unchanged" + // A document highlight kind. + // A textual occurrence. + Text DocumentHighlightKind = 1 + // Read-access of a symbol, like reading a variable. + Read DocumentHighlightKind = 2 + // Write-access of a symbol, like writing to a variable. + Write DocumentHighlightKind = 3 + // Predefined error codes. + ParseError ErrorCodes = -32700 + InvalidRequest ErrorCodes = -32600 + MethodNotFound ErrorCodes = -32601 + InvalidParams ErrorCodes = -32602 + InternalError ErrorCodes = -32603 + // Error code indicating that a server received a notification or + // request before the server has received the `initialize` request. + ServerNotInitialized ErrorCodes = -32002 + UnknownErrorCode ErrorCodes = -32001 + // Applying the workspace change is simply aborted if one of the changes provided + // fails. All operations executed before the failing operation stay executed. + Abort FailureHandlingKind = "abort" + // All operations are executed transactional. That means they either all + // succeed or no changes at all are applied to the workspace. + Transactional FailureHandlingKind = "transactional" + // If the workspace edit contains only textual file changes they are executed transactional. + // If resource changes (create, rename or delete file) are part of the change the failure + // handling strategy is abort. + TextOnlyTransactional FailureHandlingKind = "textOnlyTransactional" + // The client tries to undo the operations already executed. But there is no + // guarantee that this is succeeding. + Undo FailureHandlingKind = "undo" + // The file event type + // The file got created. + Created FileChangeType = 1 + // The file got changed. + Changed FileChangeType = 2 + // The file got deleted. + Deleted FileChangeType = 3 + // A pattern kind describing if a glob pattern matches a file a folder or + // both. + // + // @since 3.16.0 + // The pattern matches a file only. + FilePattern FileOperationPatternKind = "file" + // The pattern matches a folder only. + FolderPattern FileOperationPatternKind = "folder" + // A set of predefined range kinds. + // Folding range for a comment + Comment FoldingRangeKind = "comment" + // Folding range for an import or include + Imports FoldingRangeKind = "imports" + // Folding range for a region (e.g. `#region`) + Region FoldingRangeKind = "region" + // Inlay hint kinds. + // + // @since 3.17.0 + // An inlay hint that for a type annotation. + Type InlayHintKind = 1 + // An inlay hint that is for a parameter. + Parameter InlayHintKind = 2 + // Describes how an {@link InlineCompletionItemProvider inline completion provider} was triggered. + // + // @since 3.18.0 + // @proposed + // Completion was triggered explicitly by a user gesture. + InlineInvoked InlineCompletionTriggerKind = 1 + // Completion was triggered automatically while editing. + InlineAutomatic InlineCompletionTriggerKind = 2 + // Defines whether the insert text in a completion item should be interpreted as + // plain text or a snippet. + // The primary text to be inserted is treated as a plain string. + PlainTextTextFormat InsertTextFormat = 1 + // The primary text to be inserted is treated as a snippet. + // + // A snippet can define tab stops and placeholders with `$1`, `$2` + // and `${3:foo}`. `$0` defines the final tab stop, it defaults to + // the end of the snippet. Placeholders with equal identifiers are linked, + // that is typing in one will update others too. + // + // See also: https://microsoft.github.io/language-server-protocol/specifications/specification-current/#snippet_syntax + SnippetTextFormat InsertTextFormat = 2 + // How whitespace and indentation is handled during completion + // item insertion. + // + // @since 3.16.0 + // The insertion or replace strings is taken as it is. If the + // value is multi line the lines below the cursor will be + // inserted using the indentation defined in the string value. + // The client will not apply any kind of adjustments to the + // string. + AsIs InsertTextMode = 1 + // The editor adjusts leading whitespace of new lines so that + // they match the indentation up to the cursor of the line for + // which the item is accepted. + // + // Consider a line like this: <2tabs><cursor><3tabs>foo. Accepting a + // multi line completion item is indented using 2 tabs and all + // following lines inserted will be indented using 2 tabs as well. + AdjustIndentation InsertTextMode = 2 + // A request failed but it was syntactically correct, e.g the + // method name was known and the parameters were valid. The error + // message should contain human readable information about why + // the request failed. + // + // @since 3.17.0 + RequestFailed LSPErrorCodes = -32803 + // The server cancelled the request. This error code should + // only be used for requests that explicitly support being + // server cancellable. + // + // @since 3.17.0 + ServerCancelled LSPErrorCodes = -32802 + // The server detected that the content of a document got + // modified outside normal conditions. A server should + // NOT send this error code if it detects a content change + // in it unprocessed messages. The result even computed + // on an older state might still be useful for the client. + // + // If a client decides that a result is not of any use anymore + // the client should cancel the request. + ContentModified LSPErrorCodes = -32801 + // The client has canceled a request and a server has detected + // the cancel. + RequestCancelled LSPErrorCodes = -32800 + // Predefined Language kinds + // @since 3.18.0 + // @proposed + LangABAP LanguageKind = "abap" + LangWindowsBat LanguageKind = "bat" + LangBibTeX LanguageKind = "bibtex" + LangClojure LanguageKind = "clojure" + LangCoffeescript LanguageKind = "coffeescript" + LangC LanguageKind = "c" + LangCPP LanguageKind = "cpp" + LangCSharp LanguageKind = "csharp" + LangCSS LanguageKind = "css" + // @since 3.18.0 + // @proposed + LangD LanguageKind = "d" + // @since 3.18.0 + // @proposed + LangDelphi LanguageKind = "pascal" + LangDiff LanguageKind = "diff" + LangDart LanguageKind = "dart" + LangDockerfile LanguageKind = "dockerfile" + LangElixir LanguageKind = "elixir" + LangErlang LanguageKind = "erlang" + LangFSharp LanguageKind = "fsharp" + LangGitCommit LanguageKind = "git-commit" + LangGitRebase LanguageKind = "rebase" + LangGo LanguageKind = "go" + LangGroovy LanguageKind = "groovy" + LangHandlebars LanguageKind = "handlebars" + LangHaskell LanguageKind = "haskell" + LangHTML LanguageKind = "html" + LangIni LanguageKind = "ini" + LangJava LanguageKind = "java" + LangJavaScript LanguageKind = "javascript" + LangJavaScriptReact LanguageKind = "javascriptreact" + LangJSON LanguageKind = "json" + LangLaTeX LanguageKind = "latex" + LangLess LanguageKind = "less" + LangLua LanguageKind = "lua" + LangMakefile LanguageKind = "makefile" + LangMarkdown LanguageKind = "markdown" + LangObjectiveC LanguageKind = "objective-c" + LangObjectiveCPP LanguageKind = "objective-cpp" + // @since 3.18.0 + // @proposed + LangPascal LanguageKind = "pascal" + LangPerl LanguageKind = "perl" + LangPerl6 LanguageKind = "perl6" + LangPHP LanguageKind = "php" + LangPowershell LanguageKind = "powershell" + LangPug LanguageKind = "jade" + LangPython LanguageKind = "python" + LangR LanguageKind = "r" + LangRazor LanguageKind = "razor" + LangRuby LanguageKind = "ruby" + LangRust LanguageKind = "rust" + LangSCSS LanguageKind = "scss" + LangSASS LanguageKind = "sass" + LangScala LanguageKind = "scala" + LangShaderLab LanguageKind = "shaderlab" + LangShellScript LanguageKind = "shellscript" + LangSQL LanguageKind = "sql" + LangSwift LanguageKind = "swift" + LangTypeScript LanguageKind = "typescript" + LangTypeScriptReact LanguageKind = "typescriptreact" + LangTeX LanguageKind = "tex" + LangVisualBasic LanguageKind = "vb" + LangXML LanguageKind = "xml" + LangXSL LanguageKind = "xsl" + LangYAML LanguageKind = "yaml" + // Describes the content type that a client supports in various + // result literals like `Hover`, `ParameterInfo` or `CompletionItem`. + // + // Please note that `MarkupKinds` must not start with a `$`. This kinds + // are reserved for internal usage. + // Plain text is supported as a content format + PlainText MarkupKind = "plaintext" + // Markdown is supported as a content format + Markdown MarkupKind = "markdown" + // The message type + // An error message. + Error MessageType = 1 + // A warning message. + Warning MessageType = 2 + // An information message. + Info MessageType = 3 + // A log message. + Log MessageType = 4 + // A debug message. + // + // @since 3.18.0 + // @proposed + Debug MessageType = 5 + // The moniker kind. + // + // @since 3.16.0 + // The moniker represent a symbol that is imported into a project + Import MonikerKind = "import" + // The moniker represents a symbol that is exported from a project + Export MonikerKind = "export" + // The moniker represents a symbol that is local to a project (e.g. a local + // variable of a function, a class not visible outside the project, ...) + Local MonikerKind = "local" + // A notebook cell kind. + // + // @since 3.17.0 + // A markup-cell is formatted source that is used for display. + Markup NotebookCellKind = 1 + // A code-cell is source code. + Code NotebookCellKind = 2 + // A set of predefined position encoding kinds. + // + // @since 3.17.0 + // Character offsets count UTF-8 code units (e.g. bytes). + UTF8 PositionEncodingKind = "utf-8" + // Character offsets count UTF-16 code units. + // + // This is the default and must always be supported + // by servers + UTF16 PositionEncodingKind = "utf-16" + // Character offsets count UTF-32 code units. + // + // Implementation note: these are the same as Unicode codepoints, + // so this `PositionEncodingKind` may also be used for an + // encoding-agnostic representation of character offsets. + UTF32 PositionEncodingKind = "utf-32" + // The client's default behavior is to select the identifier + // according the to language's syntax rule. + Identifier PrepareSupportDefaultBehavior = 1 + // Supports creating new files and folders. + Create ResourceOperationKind = "create" + // Supports renaming existing files and folders. + Rename ResourceOperationKind = "rename" + // Supports deleting existing files and folders. + Delete ResourceOperationKind = "delete" + // A set of predefined token modifiers. This set is not fixed + // an clients can specify additional token types via the + // corresponding client capabilities. + // + // @since 3.16.0 + ModDeclaration SemanticTokenModifiers = "declaration" + ModDefinition SemanticTokenModifiers = "definition" + ModReadonly SemanticTokenModifiers = "readonly" + ModStatic SemanticTokenModifiers = "static" + ModDeprecated SemanticTokenModifiers = "deprecated" + ModAbstract SemanticTokenModifiers = "abstract" + ModAsync SemanticTokenModifiers = "async" + ModModification SemanticTokenModifiers = "modification" + ModDocumentation SemanticTokenModifiers = "documentation" + ModDefaultLibrary SemanticTokenModifiers = "defaultLibrary" + // A set of predefined token types. This set is not fixed + // an clients can specify additional token types via the + // corresponding client capabilities. + // + // @since 3.16.0 + NamespaceType SemanticTokenTypes = "namespace" + // Represents a generic type. Acts as a fallback for types which can't be mapped to + // a specific type like class or enum. + TypeType SemanticTokenTypes = "type" + ClassType SemanticTokenTypes = "class" + EnumType SemanticTokenTypes = "enum" + InterfaceType SemanticTokenTypes = "interface" + StructType SemanticTokenTypes = "struct" + TypeParameterType SemanticTokenTypes = "typeParameter" + ParameterType SemanticTokenTypes = "parameter" + VariableType SemanticTokenTypes = "variable" + PropertyType SemanticTokenTypes = "property" + EnumMemberType SemanticTokenTypes = "enumMember" + EventType SemanticTokenTypes = "event" + FunctionType SemanticTokenTypes = "function" + MethodType SemanticTokenTypes = "method" + MacroType SemanticTokenTypes = "macro" + KeywordType SemanticTokenTypes = "keyword" + ModifierType SemanticTokenTypes = "modifier" + CommentType SemanticTokenTypes = "comment" + StringType SemanticTokenTypes = "string" + NumberType SemanticTokenTypes = "number" + RegexpType SemanticTokenTypes = "regexp" + OperatorType SemanticTokenTypes = "operator" + // @since 3.17.0 + DecoratorType SemanticTokenTypes = "decorator" + // @since 3.18.0 + LabelType SemanticTokenTypes = "label" + // How a signature help was triggered. + // + // @since 3.15.0 + // Signature help was invoked manually by the user or by a command. + SigInvoked SignatureHelpTriggerKind = 1 + // Signature help was triggered by a trigger character. + SigTriggerCharacter SignatureHelpTriggerKind = 2 + // Signature help was triggered by the cursor moving or by the document content changing. + SigContentChange SignatureHelpTriggerKind = 3 + // A symbol kind. + File SymbolKind = 1 + Module SymbolKind = 2 + Namespace SymbolKind = 3 + Package SymbolKind = 4 + Class SymbolKind = 5 + Method SymbolKind = 6 + Property SymbolKind = 7 + Field SymbolKind = 8 + Constructor SymbolKind = 9 + Enum SymbolKind = 10 + Interface SymbolKind = 11 + Function SymbolKind = 12 + Variable SymbolKind = 13 + Constant SymbolKind = 14 + String SymbolKind = 15 + Number SymbolKind = 16 + Boolean SymbolKind = 17 + Array SymbolKind = 18 + Object SymbolKind = 19 + Key SymbolKind = 20 + Null SymbolKind = 21 + EnumMember SymbolKind = 22 + Struct SymbolKind = 23 + Event SymbolKind = 24 + Operator SymbolKind = 25 + TypeParameter SymbolKind = 26 + // Symbol tags are extra annotations that tweak the rendering of a symbol. + // + // @since 3.16 + // Render a symbol as obsolete, usually using a strike-out. + DeprecatedSymbol SymbolTag = 1 + // Represents reasons why a text document is saved. + // Manually triggered, e.g. by the user pressing save, by starting debugging, + // or by an API call. + Manual TextDocumentSaveReason = 1 + // Automatic after a delay. + AfterDelay TextDocumentSaveReason = 2 + // When the editor lost focus. + FocusOut TextDocumentSaveReason = 3 + // Defines how the host (editor) should sync + // document changes to the language server. + // Documents should not be synced at all. + None TextDocumentSyncKind = 0 + // Documents are synced by always sending the full content + // of the document. + Full TextDocumentSyncKind = 1 + // Documents are synced by sending the full content on open. + // After that only incremental updates to the document are + // send. + Incremental TextDocumentSyncKind = 2 + Relative TokenFormat = "relative" + // Turn tracing off. + Off TraceValue = "off" + // Trace messages only. + Messages TraceValue = "messages" + // Verbose message tracing. + Verbose TraceValue = "verbose" + // Moniker uniqueness level to define scope of the moniker. + // + // @since 3.16.0 + // The moniker is only unique inside a document + Document UniquenessLevel = "document" + // The moniker is unique inside a project for which a dump got created + Project UniquenessLevel = "project" + // The moniker is unique inside the group to which a project belongs + Group UniquenessLevel = "group" + // The moniker is unique inside the moniker scheme. + Scheme UniquenessLevel = "scheme" + // The moniker is globally unique + Global UniquenessLevel = "global" + // Interested in create events. + WatchCreate WatchKind = 1 + // Interested in change events + WatchChange WatchKind = 2 + // Interested in delete events + WatchDelete WatchKind = 4 +) diff --git a/internal/lsp/protocol/uri.go b/internal/lsp/protocol/uri.go new file mode 100644 index 000000000..18fd5ea75 --- /dev/null +++ b/internal/lsp/protocol/uri.go @@ -0,0 +1,218 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package protocol + +// This file declares URI, DocumentUri, and its methods. +// +// For the LSP definition of these types, see +// https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#uri + +import ( + "fmt" + "net/url" + "path/filepath" + "strings" + "unicode" +) + +// A DocumentUri is the URI of a client editor document. +// +// According to the LSP specification: +// +// Care should be taken to handle encoding in URIs. For +// example, some clients (such as VS Code) may encode colons +// in drive letters while others do not. The URIs below are +// both valid, but clients and servers should be consistent +// with the form they use themselves to ensure the other party +// doesn’t interpret them as distinct URIs. Clients and +// servers should not assume that each other are encoding the +// same way (for example a client encoding colons in drive +// letters cannot assume server responses will have encoded +// colons). The same applies to casing of drive letters - one +// party should not assume the other party will return paths +// with drive letters cased the same as it. +// +// file:///c:/project/readme.md +// file:///C%3A/project/readme.md +// +// This is done during JSON unmarshalling; +// see [DocumentUri.UnmarshalText] for details. +type DocumentUri string + +// A URI is an arbitrary URL (e.g. https), not necessarily a file. +type URI = string + +// UnmarshalText implements decoding of DocumentUri values. +// +// In particular, it implements a systematic correction of various odd +// features of the definition of DocumentUri in the LSP spec that +// appear to be workarounds for bugs in VS Code. For example, it may +// URI-encode the URI itself, so that colon becomes %3A, and it may +// send file://foo.go URIs that have two slashes (not three) and no +// hostname. +// +// We use UnmarshalText, not UnmarshalJSON, because it is called even +// for non-addressable values such as keys and values of map[K]V, +// where there is no pointer of type *K or *V on which to call +// UnmarshalJSON. (See Go issue #28189 for more detail.) +// +// Non-empty DocumentUris are valid "file"-scheme URIs. +// The empty DocumentUri is valid. +func (uri *DocumentUri) UnmarshalText(data []byte) (err error) { + *uri, err = ParseDocumentUri(string(data)) + return +} + +// Path returns the file path for the given URI. +// +// DocumentUri("").Path() returns the empty string. +// +// Path panics if called on a URI that is not a valid filename. +func (uri DocumentUri) Path() string { + filename, err := filename(uri) + if err != nil { + // e.g. ParseRequestURI failed. + // + // This can only affect DocumentUris created by + // direct string manipulation; all DocumentUris + // received from the client pass through + // ParseRequestURI, which ensures validity. + panic(err) + } + return filepath.FromSlash(filename) +} + +// Dir returns the URI for the directory containing the receiver. +func (uri DocumentUri) Dir() DocumentUri { + // This function could be more efficiently implemented by avoiding any call + // to Path(), but at least consolidates URI manipulation. + return URIFromPath(uri.DirPath()) +} + +// DirPath returns the file path to the directory containing this URI, which +// must be a file URI. +func (uri DocumentUri) DirPath() string { + return filepath.Dir(uri.Path()) +} + +func filename(uri DocumentUri) (string, error) { + if uri == "" { + return "", nil + } + + // This conservative check for the common case + // of a simple non-empty absolute POSIX filename + // avoids the allocation of a net.URL. + if strings.HasPrefix(string(uri), "file:///") { + rest := string(uri)[len("file://"):] // leave one slash + for i := range len(rest) { + b := rest[i] + // Reject these cases: + if b < ' ' || b == 0x7f || // control character + b == '%' || b == '+' || // URI escape + b == ':' || // Windows drive letter + b == '@' || b == '&' || b == '?' { // authority or query + goto slow + } + } + return rest, nil + } +slow: + + u, err := url.ParseRequestURI(string(uri)) + if err != nil { + return "", err + } + if u.Scheme != fileScheme { + return "", fmt.Errorf("only file URIs are supported, got %q from %q", u.Scheme, uri) + } + // If the URI is a Windows URI, we trim the leading "/" and uppercase + // the drive letter, which will never be case sensitive. + if isWindowsDriveURIPath(u.Path) { + u.Path = strings.ToUpper(string(u.Path[1])) + u.Path[2:] + } + + return u.Path, nil +} + +// ParseDocumentUri interprets a string as a DocumentUri, applying VS +// Code workarounds; see [DocumentUri.UnmarshalText] for details. +func ParseDocumentUri(s string) (DocumentUri, error) { + if s == "" { + return "", nil + } + + if !strings.HasPrefix(s, "file://") { + return "", fmt.Errorf("DocumentUri scheme is not 'file': %s", s) + } + + // VS Code sends URLs with only two slashes, + // which are invalid. golang/go#39789. + if !strings.HasPrefix(s, "file:///") { + s = "file:///" + s[len("file://"):] + } + + // Even though the input is a URI, it may not be in canonical form. VS Code + // in particular over-escapes :, @, etc. Unescape and re-encode to canonicalize. + path, err := url.PathUnescape(s[len("file://"):]) + if err != nil { + return "", err + } + + // File URIs from Windows may have lowercase drive letters. + // Since drive letters are guaranteed to be case insensitive, + // we change them to uppercase to remain consistent. + // For example, file:///c:/x/y/z becomes file:///C:/x/y/z. + if isWindowsDriveURIPath(path) { + path = path[:1] + strings.ToUpper(string(path[1])) + path[2:] + } + u := url.URL{Scheme: fileScheme, Path: path} + return DocumentUri(u.String()), nil +} + +// URIFromPath returns DocumentUri for the supplied file path. +// Given "", it returns "". +func URIFromPath(path string) DocumentUri { + if path == "" { + return "" + } + if !isWindowsDrivePath(path) { + if abs, err := filepath.Abs(path); err == nil { + path = abs + } + } + // Check the file path again, in case it became absolute. + if isWindowsDrivePath(path) { + path = "/" + strings.ToUpper(string(path[0])) + path[1:] + } + path = filepath.ToSlash(path) + u := url.URL{ + Scheme: fileScheme, + Path: path, + } + return DocumentUri(u.String()) +} + +const fileScheme = "file" + +// isWindowsDrivePath returns true if the file path is of the form used by +// Windows. We check if the path begins with a drive letter, followed by a ":". +// For example: C:/x/y/z. +func isWindowsDrivePath(path string) bool { + if len(path) < 3 { + return false + } + return unicode.IsLetter(rune(path[0])) && path[1] == ':' +} + +// isWindowsDriveURIPath returns true if the file URI is of the format used by +// Windows URIs. The url.Parse package does not specially handle Windows paths +// (see golang/go#6027), so we check if the URI path has a drive prefix (e.g. "/C:"). +func isWindowsDriveURIPath(uri string) bool { + if len(uri) < 4 { + return false + } + return uri[0] == '/' && unicode.IsLetter(rune(uri[1])) && uri[2] == ':' +} |
