Skip to content

Commit 7bd982c

Browse files
authored
Support 0.13 provider identities (hashicorp#255)
* Add OS filesystem implementation * Support 0.13 provider identities * Bump terraform-config-inspect to latest
1 parent fa320f9 commit 7bd982c

File tree

100 files changed

+10702
-197
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

100 files changed

+10702
-197
lines changed

commands/completion_command.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ func (c *CompletionCommand) Run(args []string) int {
110110
return 1
111111
}
112112

113-
w, err := rootmodule.NewRootModule(context.Background(), fh.Dir())
113+
w, err := rootmodule.NewRootModule(context.Background(), fs, fh.Dir())
114114
if err != nil {
115115
c.Ui.Error(fmt.Sprintf("failed to load root module: %s", err.Error()))
116116
return 1

commands/inspect_module_command.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414

1515
"github.com/hashicorp/go-multierror"
1616
ictx "github.com/hashicorp/terraform-ls/internal/context"
17+
"github.com/hashicorp/terraform-ls/internal/filesystem"
1718
"github.com/hashicorp/terraform-ls/internal/terraform/rootmodule"
1819
"github.com/hashicorp/terraform-ls/logging"
1920
"github.com/mitchellh/cli"
@@ -81,7 +82,9 @@ func (c *InspectModuleCommand) inspect(rootPath string) error {
8182
return fmt.Errorf("expected %s to be a directory", rootPath)
8283
}
8384

84-
rmm := rootmodule.NewRootModuleManager()
85+
fs := filesystem.NewFilesystem()
86+
87+
rmm := rootmodule.NewRootModuleManager(fs)
8588
rmm.SetLogger(c.logger)
8689
walker := rootmodule.NewWalker()
8790
walker.SetLogger(c.logger)

go.mod

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ require (
1010
github.com/hashicorp/go-multierror v1.1.0
1111
github.com/hashicorp/go-version v1.2.0
1212
github.com/hashicorp/hcl/v2 v2.5.2-0.20200528183353-fa7c453538de
13+
github.com/hashicorp/terraform-config-inspect v0.0.0-20200806211835-c481b8bfa41e
1314
github.com/hashicorp/terraform-json v0.5.0
1415
github.com/hashicorp/terraform-svchost v0.0.0-20191119180714-d2e4933b9136
1516
github.com/mh-cbon/go-fmt-fail v0.0.0-20160815164508-67765b3fbcb5

go.sum

+19
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
55
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
66
github.com/agext/levenshtein v1.2.1 h1:QmvMAjj2aEICytGiWzmxoE0x2KZvE0fvmqMOfy2tjT8=
77
github.com/agext/levenshtein v1.2.1/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558=
8+
github.com/agext/levenshtein v1.2.2 h1:0S/Yg6LYmFJ5stwQeRp6EeOcCbj7xiqQSdNelsXvaqE=
9+
github.com/agext/levenshtein v1.2.2/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558=
810
github.com/apparentlymart/go-dump v0.0.0-20180507223929-23540a00eaa3/go.mod h1:oL81AME2rN47vu18xqj1S1jPIPuN7afo62yKTNn3XMM=
911
github.com/apparentlymart/go-textseg v1.0.0 h1:rRmlIsPEEhUTIKQb7T++Nz/A5Q6C9IuX2wFoYVvnCs0=
1012
github.com/apparentlymart/go-textseg v1.0.0/go.mod h1:z96Txxhf3xSFMPmb5X/1W05FF/Nj9VFpLOpjS5yuumk=
@@ -28,6 +30,8 @@ github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68=
2830
github.com/go-test/deep v1.0.3/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
2931
github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
3032
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
33+
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
34+
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
3135
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
3236
github.com/google/go-cmp v0.4.1 h1:/exdXoGamhu5ONeUJH0deniYLWYvQwW66yvlfiiKTu0=
3337
github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
@@ -40,8 +44,13 @@ github.com/hashicorp/go-multierror v1.1.0 h1:B9UzwGQJehnUY1yNrnwREHc3fGbC2xefo8g
4044
github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA=
4145
github.com/hashicorp/go-version v1.2.0 h1:3vNe/fWF5CBgRIguda1meWhsZHy3m8gCJ5wx+dIzX/E=
4246
github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
47+
github.com/hashicorp/hcl v0.0.0-20170504190234-a4b07c25de5f h1:UdxlrJz4JOnY8W+DbLISwf2B8WXEolNRA8BGCwI9jws=
48+
github.com/hashicorp/hcl v0.0.0-20170504190234-a4b07c25de5f/go.mod h1:oZtUIOe8dh44I2q6ScRibXws4Ajl+d+nod3AaR9vL5w=
49+
github.com/hashicorp/hcl/v2 v2.0.0/go.mod h1:oVVDG71tEinNGYCxinCYadcmKU9bglqW9pV3txagJ90=
4350
github.com/hashicorp/hcl/v2 v2.5.2-0.20200528183353-fa7c453538de h1:bCeWhTigOmP9am0cJA+5kaTtA2RFDmnWIRtBIxo+Ydg=
4451
github.com/hashicorp/hcl/v2 v2.5.2-0.20200528183353-fa7c453538de/go.mod h1:bQTN5mpo+jewjJgh8jr0JUguIi7qPHUF6yIfAEN3jqY=
52+
github.com/hashicorp/terraform-config-inspect v0.0.0-20200806211835-c481b8bfa41e h1:wIsEsIITggCC4FTO9PisDjy561UU7OPL6uTu7tnkHH8=
53+
github.com/hashicorp/terraform-config-inspect v0.0.0-20200806211835-c481b8bfa41e/go.mod h1:Z0Nnk4+3Cy89smEbrq+sl1bxc9198gIP4I7wcQF6Kqs=
4554
github.com/hashicorp/terraform-json v0.5.0 h1:7TV3/F3y7QVSuN4r9BEXqnWqrAyeOtON8f0wvREtyzs=
4655
github.com/hashicorp/terraform-json v0.5.0/go.mod h1:eAbqb4w0pSlRmdvl8fOyHAi/+8jnkVYN28gJkSJrLhU=
4756
github.com/hashicorp/terraform-svchost v0.0.0-20191119180714-d2e4933b9136 h1:81Dg7SK6Q5vzqFItO8e1iIF2Nj8bLXV23NXjEgbev/s=
@@ -54,6 +63,8 @@ github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
5463
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
5564
github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348 h1:MtvEpTB6LX3vkb4ax0b5D2DHbNAUsen0Gx5wZoq3lV4=
5665
github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k=
66+
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
67+
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
5768
github.com/mattn/go-colorable v0.0.9 h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRUIY4=
5869
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
5970
github.com/mattn/go-isatty v0.0.3 h1:ns/ykhmWi7G9O+8a448SecJU3nSMBXJfqQkl0upE1jI=
@@ -66,6 +77,8 @@ github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG
6677
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
6778
github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7 h1:DpOJ2HYzCv8LZP15IdmG+YdwD2luVPHITV96TkirNBM=
6879
github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo=
80+
github.com/mitchellh/go-wordwrap v1.0.0 h1:6GlHJ/LTGMrIJbwgdqdl2eEH8o+Exx/0m8ir9Gns0u4=
81+
github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo=
6982
github.com/mitchellh/mapstructure v1.3.2 h1:mRS76wmkOn3KkKAyXDu42V+6ebnXWIztFSYGN7GeoRg=
7083
github.com/mitchellh/mapstructure v1.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
7184
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -81,9 +94,13 @@ github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAm
8194
github.com/spf13/afero v1.3.2 h1:GDarE4TJQI52kYSbSAmLiId1Elfj+xgSDqrUZxFhxlU=
8295
github.com/spf13/afero v1.3.2/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4=
8396
github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
97+
github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
98+
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
8499
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
85100
github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
86101
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
102+
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
103+
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
87104
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
88105
github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk=
89106
github.com/zclconf/go-cty v1.1.0/go.mod h1:xnAOWiHeOqg2nWS62VtQ7pbOu17FtxJNW8RLEih+O3s=
@@ -121,5 +138,7 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T
121138
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
122139
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
123140
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
141+
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
124142
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
143+
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
125144
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=

internal/filesystem/document.go

+2-12
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,19 @@ package filesystem
22

33
import (
44
"bytes"
5-
"io/ioutil"
65
"path/filepath"
76

87
"github.com/hashicorp/terraform-ls/internal/source"
98
"github.com/spf13/afero"
109
)
1110

12-
type fileOpener interface {
13-
Open(name string) (afero.File, error)
14-
}
15-
1611
type document struct {
1712
meta *documentMetadata
18-
fo fileOpener
13+
fs afero.Fs
1914
}
2015

2116
func (d *document) Text() ([]byte, error) {
22-
f, err := d.fo.Open(d.meta.dh.FullPath())
23-
if err != nil {
24-
return nil, err
25-
}
26-
27-
return ioutil.ReadAll(f)
17+
return afero.ReadFile(d.fs, d.meta.dh.FullPath())
2818
}
2919

3020
func (d *document) FullPath() string {

internal/filesystem/document_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010

1111
func TestFile_ApplyChange_fullUpdate(t *testing.T) {
1212
fs := testDocumentStorage()
13-
dh := &testHandler{"file:///test.tf"}
13+
dh := &testHandler{uri: "file:///test.tf"}
1414

1515
err := fs.CreateAndOpenDocument(dh, []byte("hello world"))
1616
if err != nil {
@@ -171,7 +171,7 @@ func TestFile_ApplyChange_partialUpdate(t *testing.T) {
171171

172172
for _, v := range testData {
173173
fs := testDocumentStorage()
174-
dh := &testHandler{"file:///test.tf"}
174+
dh := &testHandler{uri: "file:///test.tf"}
175175

176176
err := fs.CreateAndOpenDocument(dh, []byte(v.Content))
177177
if err != nil {
@@ -214,7 +214,7 @@ func testDocument(t *testing.T, dh DocumentHandler, meta *documentMetadata, b []
214214

215215
return &document{
216216
meta: meta,
217-
fo: fs,
217+
fs: fs,
218218
}
219219
}
220220

internal/filesystem/filesystem.go

+52-1
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@ import (
77
"os"
88
"sync"
99

10+
"github.com/hashicorp/terraform-config-inspect/tfconfig"
1011
"github.com/spf13/afero"
1112
)
1213

1314
type fsystem struct {
1415
memFs afero.Fs
16+
osFs afero.Fs
1517

1618
docMeta map[string]*documentMetadata
1719
docMetaMu *sync.RWMutex
@@ -22,6 +24,7 @@ type fsystem struct {
2224
func NewFilesystem() *fsystem {
2325
return &fsystem{
2426
memFs: afero.NewMemMapFs(),
27+
osFs: afero.NewReadOnlyFs(afero.NewOsFs()),
2528
docMeta: make(map[string]*documentMetadata, 0),
2629
docMetaMu: &sync.RWMutex{},
2730
logger: log.New(ioutil.Discard, "", 0),
@@ -173,6 +176,54 @@ func (fs *fsystem) GetDocument(dh DocumentHandler) (Document, error) {
173176

174177
return &document{
175178
meta: dm,
176-
fo: fs.memFs,
179+
fs: fs.memFs,
177180
}, nil
178181
}
182+
183+
func (fs *fsystem) ReadFile(name string) ([]byte, error) {
184+
b, err := afero.ReadFile(fs.memFs, name)
185+
if err != nil && os.IsNotExist(err) {
186+
return afero.ReadFile(fs.osFs, name)
187+
}
188+
189+
return b, err
190+
}
191+
192+
func (fs *fsystem) ReadDir(name string) ([]os.FileInfo, error) {
193+
memList, err := afero.ReadDir(fs.memFs, name)
194+
if err != nil {
195+
return nil, err
196+
}
197+
osList, err := afero.ReadDir(fs.osFs, name)
198+
if err != nil {
199+
return nil, err
200+
}
201+
202+
list := memList
203+
for _, osFi := range osList {
204+
if fileIsInList(list, osFi) {
205+
continue
206+
}
207+
list = append(list, osFi)
208+
}
209+
210+
return list, nil
211+
}
212+
213+
func fileIsInList(list []os.FileInfo, file os.FileInfo) bool {
214+
for _, fi := range list {
215+
if fi.Name() == file.Name() {
216+
return true
217+
}
218+
}
219+
return false
220+
}
221+
222+
func (fs *fsystem) Open(name string) (tfconfig.File, error) {
223+
f, err := fs.memFs.Open(name)
224+
if err != nil && os.IsNotExist(err) {
225+
return fs.osFs.Open(name)
226+
}
227+
228+
return f, err
229+
}

0 commit comments

Comments
 (0)