mirror of
https://github.com/aljazceru/opencode.git
synced 2025-12-21 17:54:23 +01:00
add initial lsp support
This commit is contained in:
58
internal/lsp/protocol/pattern_interfaces.go
Normal file
58
internal/lsp/protocol/pattern_interfaces.go
Normal file
@@ -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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user