summaryrefslogtreecommitdiffhomepage
path: root/internal/lsp/protocol/pattern_interfaces.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/lsp/protocol/pattern_interfaces.go')
-rw-r--r--internal/lsp/protocol/pattern_interfaces.go58
1 files changed, 58 insertions, 0 deletions
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)
+ }
+}