mirror of
https://github.com/laravel-ls/protocol.git
synced 2026-06-17 20:40:04 +02:00
Initial commit
This commit is contained in:
commit
9061064e97
21 changed files with 1699 additions and 0 deletions
104
document_completion.go
Normal file
104
document_completion.go
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
package protocol
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
)
|
||||
|
||||
const (
|
||||
// MethodTextDocumentCompletion method name of "textDocument/completion".
|
||||
MethodTextDocumentCompletion = "textDocument/completion"
|
||||
)
|
||||
|
||||
// CompletionTriggerKind - How a completion was triggered.
|
||||
//
|
||||
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#completionTriggerKind
|
||||
type CompletionTriggerKind int
|
||||
|
||||
const (
|
||||
// Completion was triggered by typing an identifier (24x7 code complete), manual invocation (e.g Ctrl+Space) or via API.
|
||||
CompletionTriggerKindInvoked CompletionTriggerKind = 1
|
||||
|
||||
// Completion was triggered by a trigger character specified by the `triggerCharacters` properties of the `CompletionOptions`.
|
||||
CompletionTriggerKindTriggerCharacter CompletionTriggerKind = 2
|
||||
|
||||
// Completion was re-triggered as the current completion list is incomplete.
|
||||
CompletionTriggerKindTriggerForIncompleteCompletions CompletionTriggerKind = 3
|
||||
)
|
||||
|
||||
// CompletionContext - 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 !== CompletionTriggerKindTriggerCharacter`
|
||||
TriggerCharacter string `json:"triggerCharacter,omitempty"`
|
||||
}
|
||||
|
||||
// CompletionParams - parameters for a completion request.
|
||||
//
|
||||
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#completionParams
|
||||
type CompletionParams struct {
|
||||
TextDocumentPositionParams
|
||||
WorkDoneProgressParams
|
||||
PartialResultParams
|
||||
|
||||
// The completion context. This is only available if the client specifies to send this using the client capability `textDocument.completion.contextSupport === true`
|
||||
Context *CompletionContext `json:"context,omitempty"`
|
||||
}
|
||||
|
||||
// CompletionResponse - The result of a textDocument/completion request is either an array of CompletionItem
|
||||
// or a CompletionList.
|
||||
//
|
||||
// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#completion
|
||||
type CompletionResponse struct {
|
||||
// When the result is a list of completion items.
|
||||
Items []CompletionItem
|
||||
|
||||
// When the result is a completion list with additional metadata like isIncomplete.
|
||||
List *CompletionList
|
||||
|
||||
// If null
|
||||
Null bool
|
||||
}
|
||||
|
||||
func (cr CompletionResponse) MarshalJSON() ([]byte, error) {
|
||||
if cr.List != nil {
|
||||
return json.Marshal(cr.List)
|
||||
}
|
||||
return json.Marshal(cr.Items)
|
||||
}
|
||||
|
||||
func (cr *CompletionResponse) UnmarshalJSON(data []byte) error {
|
||||
// Check for null
|
||||
if string(data) == "null" {
|
||||
cr.Null = true
|
||||
cr.List = nil
|
||||
cr.Items = nil
|
||||
return nil
|
||||
}
|
||||
|
||||
// Try to decode as a CompletionList.
|
||||
var list CompletionList
|
||||
if err := json.Unmarshal(data, &list); err == nil && list.Items != nil {
|
||||
cr.Null = true
|
||||
cr.List = &list
|
||||
cr.Items = nil
|
||||
return nil
|
||||
}
|
||||
|
||||
// If decoding as CompletionList fails, try to decode as []CompletionItem.
|
||||
var items []CompletionItem
|
||||
if err := json.Unmarshal(data, &items); err == nil {
|
||||
cr.Null = true
|
||||
cr.List = nil
|
||||
cr.Items = items
|
||||
return nil
|
||||
}
|
||||
|
||||
// Unknown structure
|
||||
return errors.New("invalid CompletionResponse: not a CompletionList, []CompletionItem or null")
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue