@@ -2,15 +2,19 @@ package filesystem
2
2
3
3
import (
4
4
"fmt"
5
+ "io/ioutil"
6
+ "log"
5
7
"sync"
6
8
7
9
"github.com/hashicorp/hcl/v2"
8
10
lsp "github.com/sourcegraph/go-lsp"
9
11
)
10
12
11
13
type fsystem struct {
12
- mu sync.RWMutex
13
- dirs map [string ]* dir
14
+ mu sync.RWMutex
15
+
16
+ logger * log.Logger
17
+ dirs map [string ]* dir
14
18
}
15
19
16
20
type Filesystem interface {
@@ -23,10 +27,15 @@ type Filesystem interface {
23
27
24
28
func NewFilesystem () * fsystem {
25
29
return & fsystem {
26
- dirs : make (map [string ]* dir ),
30
+ dirs : make (map [string ]* dir ),
31
+ logger : log .New (ioutil .Discard , "" , 0 ),
27
32
}
28
33
}
29
34
35
+ func (fs * fsystem ) SetLogger (logger * log.Logger ) {
36
+ fs .logger = logger
37
+ }
38
+
30
39
func (fs * fsystem ) Open (doc lsp.TextDocumentItem ) error {
31
40
fs .mu .Lock ()
32
41
defer fs .mu .Unlock ()
@@ -89,11 +98,18 @@ func (fs *fsystem) URI(uri lsp.DocumentURI) URI {
89
98
}
90
99
91
100
func (fs * fsystem ) HclBlockAtDocPosition (params lsp.TextDocumentPositionParams ) (* hcl.Block , hcl.Pos , error ) {
92
- u := URI (params .TextDocument .URI )
101
+ u := fs . URI (params .TextDocument .URI )
93
102
f := fs .file (u )
103
+ if f == nil || ! f .open {
104
+ return nil , hcl.Pos {}, fmt .Errorf ("file %q is not open" , u )
105
+ }
106
+
107
+ fs .logger .Printf ("Converting LSP position %#v into HCL" , params .Position )
94
108
95
109
hclPos := f .LspPosToHCLPos (params .Position )
96
110
111
+ fs .logger .Printf ("Finding HCL block at position %#v" , hclPos )
112
+
97
113
block , err := f .HclBlockAtPos (hclPos )
98
114
99
115
return block , hclPos , err
0 commit comments