| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- 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)
- }
- }
|