@@ -78,8 +78,8 @@ func (pkg *pkg) GetImport(ctx context.Context, pkgPath string) (source.Package,
78
78
}
79
79
80
80
// checkPackageHandle returns a source.CheckPackageHandle for a given package and config.
81
- func (imp * importer ) checkPackageHandle (m * metadata ) (* checkPackageHandle , error ) {
82
- phs , err := imp .parseGoHandles (m )
81
+ func (imp * importer ) checkPackageHandle (ctx context. Context , m * metadata ) (* checkPackageHandle , error ) {
82
+ phs , err := imp .parseGoHandles (ctx , m )
83
83
if err != nil {
84
84
return nil , err
85
85
}
@@ -94,15 +94,8 @@ func (imp *importer) checkPackageHandle(m *metadata) (*checkPackageHandle, error
94
94
imports : make (map [packagePath ]* checkPackageHandle ),
95
95
}
96
96
h := imp .view .session .cache .store .Bind (key , func (ctx context.Context ) interface {} {
97
- origCtx := imp .ctx
98
- defer func () { imp .ctx = origCtx }()
99
-
100
- // We must use the store's detached context to avoid poisoning the
101
- // cache with context.Canceled if the request is cancelled.
102
- imp .ctx = ctx
103
-
104
97
data := & checkPackageData {}
105
- data .pkg , data .err = imp .typeCheck (cph , m )
98
+ data .pkg , data .err = imp .typeCheck (ctx , cph , m )
106
99
return data
107
100
})
108
101
cph .handle = h
@@ -156,19 +149,19 @@ func (cph *checkPackageHandle) Cached(ctx context.Context) (source.Package, erro
156
149
return data .pkg , data .err
157
150
}
158
151
159
- func (imp * importer ) parseGoHandles (m * metadata ) ([]source.ParseGoHandle , error ) {
152
+ func (imp * importer ) parseGoHandles (ctx context. Context , m * metadata ) ([]source.ParseGoHandle , error ) {
160
153
phs := make ([]source.ParseGoHandle , 0 , len (m .files ))
161
154
for _ , uri := range m .files {
162
155
// Call the unlocked version of getFile since we are holding the view's mutex.
163
- f , err := imp .view .GetFile (imp . ctx , uri )
156
+ f , err := imp .view .GetFile (ctx , uri )
164
157
if err != nil {
165
158
return nil , err
166
159
}
167
160
gof , ok := f .(* goFile )
168
161
if ! ok {
169
162
return nil , errors .Errorf ("%s is not a Go file" , f .URI ())
170
163
}
171
- fh := gof .Handle (imp . ctx )
164
+ fh := gof .Handle (ctx )
172
165
mode := source .ParseExported
173
166
if imp .topLevelPackageID == m .id {
174
167
mode = source .ParseFull
@@ -201,14 +194,14 @@ func (imp *importer) Import(pkgPath string) (*types.Package, error) {
201
194
}
202
195
imp .parentPkg .imports [packagePath (pkgPath )] = pkg
203
196
// Add every file in this package to our cache.
204
- if err := imp .cachePackage (cph , pkg , cph .m ); err != nil {
197
+ if err := imp .cachePackage (imp . ctx , cph , pkg , cph .m ); err != nil {
205
198
return nil , err
206
199
}
207
200
return pkg .GetTypes (), nil
208
201
}
209
202
210
- func (imp * importer ) typeCheck (cph * checkPackageHandle , m * metadata ) (* pkg , error ) {
211
- ctx , done := trace .StartSpan (imp . ctx , "cache.importer.typeCheck" )
203
+ func (imp * importer ) typeCheck (ctx context. Context , cph * checkPackageHandle , m * metadata ) (* pkg , error ) {
204
+ ctx , done := trace .StartSpan (ctx , "cache.importer.typeCheck" )
212
205
defer done ()
213
206
214
207
pkg := & pkg {
@@ -234,11 +227,11 @@ func (imp *importer) typeCheck(cph *checkPackageHandle, m *metadata) (*pkg, erro
234
227
pkg .errors = append (m .errors , err )
235
228
}
236
229
// Set imports of package to correspond to cached packages.
237
- cimp := imp .child (pkg , cph )
230
+ cimp := imp .child (ctx , pkg , cph )
238
231
for _ , child := range m .children {
239
- childHandle , err := cimp .checkPackageHandle (child )
232
+ childHandle , err := cimp .checkPackageHandle (ctx , child )
240
233
if err != nil {
241
- log .Error (imp . ctx , "no check package handle" , err , telemetry .Package .Of (child .id ))
234
+ log .Error (ctx , "no check package handle" , err , telemetry .Package .Of (child .id ))
242
235
continue
243
236
}
244
237
cph .imports [child .pkgPath ] = childHandle
@@ -299,7 +292,7 @@ func (imp *importer) typeCheck(cph *checkPackageHandle, m *metadata) (*pkg, erro
299
292
return pkg , nil
300
293
}
301
294
302
- func (imp * importer ) child (pkg * pkg , cph * checkPackageHandle ) * importer {
295
+ func (imp * importer ) child (ctx context. Context , pkg * pkg , cph * checkPackageHandle ) * importer {
303
296
// Handle circular imports by copying previously seen imports.
304
297
seen := make (map [packageID ]struct {})
305
298
for k , v := range imp .seen {
@@ -308,7 +301,7 @@ func (imp *importer) child(pkg *pkg, cph *checkPackageHandle) *importer {
308
301
seen [pkg .id ] = struct {}{}
309
302
return & importer {
310
303
view : imp .view ,
311
- ctx : imp . ctx ,
304
+ ctx : ctx ,
312
305
config : imp .config ,
313
306
seen : seen ,
314
307
topLevelPackageID : imp .topLevelPackageID ,
@@ -317,25 +310,25 @@ func (imp *importer) child(pkg *pkg, cph *checkPackageHandle) *importer {
317
310
}
318
311
}
319
312
320
- func (imp * importer ) cachePackage (cph * checkPackageHandle , pkg * pkg , m * metadata ) error {
313
+ func (imp * importer ) cachePackage (ctx context. Context , cph * checkPackageHandle , pkg * pkg , m * metadata ) error {
321
314
for _ , ph := range pkg .files {
322
315
uri := ph .File ().Identity ().URI
323
- f , err := imp .view .GetFile (imp . ctx , uri )
316
+ f , err := imp .view .GetFile (ctx , uri )
324
317
if err != nil {
325
318
return errors .Errorf ("no such file %s: %v" , uri , err )
326
319
}
327
320
gof , ok := f .(* goFile )
328
321
if ! ok {
329
322
return errors .Errorf ("%s is not a Go file" , uri )
330
323
}
331
- if err := imp .cachePerFile (gof , ph , cph , m ); err != nil {
324
+ if err := imp .cachePerFile (ctx , gof , ph , cph , m ); err != nil {
332
325
return errors .Errorf ("failed to cache file %s: %v" , gof .URI (), err )
333
326
}
334
327
}
335
328
return nil
336
329
}
337
330
338
- func (imp * importer ) cachePerFile (gof * goFile , ph source.ParseGoHandle , cph source.CheckPackageHandle , m * metadata ) error {
331
+ func (imp * importer ) cachePerFile (ctx context. Context , gof * goFile , ph source.ParseGoHandle , cph source.CheckPackageHandle , m * metadata ) error {
339
332
gof .mu .Lock ()
340
333
defer gof .mu .Unlock ()
341
334
@@ -345,7 +338,7 @@ func (imp *importer) cachePerFile(gof *goFile, ph source.ParseGoHandle, cph sour
345
338
}
346
339
gof .pkgs [m .id ] = cph
347
340
348
- file , err := ph .Parse (imp . ctx )
341
+ file , err := ph .Parse (ctx )
349
342
if file == nil {
350
343
return errors .Errorf ("no AST for %s: %v" , ph .File ().Identity ().URI , err )
351
344
}
0 commit comments