@@ -147,11 +147,11 @@ func (p Parser) ParseFiles(filenames ...string) ([]*desc.FileDescriptor, error)
147
147
srcInfoMode = protocompile .SourceInfoExtraComments
148
148
}
149
149
rep := newReporter (p .ErrorReporter , p .WarningReporter )
150
- res , srcPosAddr := p .getResolver (filenames )
150
+ res , srcSpanAddr := p .getResolver (filenames )
151
151
152
152
if p .InferImportPaths {
153
153
// we must first compile everything to protos
154
- results , err := parseToProtosRecursive (res , filenames , reporter .NewHandler (rep ), srcPosAddr )
154
+ results , err := parseToProtosRecursive (res , filenames , reporter .NewHandler (rep ), srcSpanAddr )
155
155
if err != nil {
156
156
return nil , err
157
157
}
@@ -375,17 +375,17 @@ func parseToProtos(res protocompile.Resolver, filenames []string, rep *reporter.
375
375
return results , nil
376
376
}
377
377
378
- func parseToProtosRecursive (res protocompile.Resolver , filenames []string , rep * reporter.Handler , srcPosAddr * SourcePos ) (map [string ]parser.Result , error ) {
378
+ func parseToProtosRecursive (res protocompile.Resolver , filenames []string , rep * reporter.Handler , srcSpanAddr * ast2. SourceSpan ) (map [string ]parser.Result , error ) {
379
379
results := make (map [string ]parser.Result , len (filenames ))
380
380
for _ , filename := range filenames {
381
- if err := parseToProtoRecursive (res , filename , rep , srcPosAddr , results ); err != nil {
381
+ if err := parseToProtoRecursive (res , filename , rep , srcSpanAddr , results ); err != nil {
382
382
return results , err
383
383
}
384
384
}
385
385
return results , rep .Error ()
386
386
}
387
387
388
- func parseToProtoRecursive (res protocompile.Resolver , filename string , rep * reporter.Handler , srcPosAddr * SourcePos , results map [string ]parser.Result ) error {
388
+ func parseToProtoRecursive (res protocompile.Resolver , filename string , rep * reporter.Handler , srcSpanAddr * ast2. SourceSpan , results map [string ]parser.Result ) error {
389
389
if _ , ok := results [filename ]; ok {
390
390
// already processed this one
391
391
return nil
@@ -412,13 +412,13 @@ func parseToProtoRecursive(res protocompile.Resolver, filename string, rep *repo
412
412
continue
413
413
}
414
414
err := func () error {
415
- orig := * srcPosAddr
416
- * srcPosAddr = astRoot .NodeInfo (imp .Name ). Start ( )
415
+ orig := * srcSpanAddr
416
+ * srcSpanAddr = astRoot .NodeInfo (imp .Name )
417
417
defer func () {
418
- * srcPosAddr = orig
418
+ * srcSpanAddr = orig
419
419
}()
420
420
421
- return parseToProtoRecursive (res , imp .Name .AsString (), rep , srcPosAddr , results )
421
+ return parseToProtoRecursive (res , imp .Name .AsString (), rep , srcSpanAddr , results )
422
422
}()
423
423
if err != nil {
424
424
return err
@@ -433,27 +433,42 @@ func parseToProtoRecursive(res protocompile.Resolver, filename string, rep *repo
433
433
for i , dep := range fd .Dependency {
434
434
path := []int32 {internal .File_dependencyTag , int32 (i )}
435
435
err := func () error {
436
- orig := * srcPosAddr
436
+ orig := * srcSpanAddr
437
437
found := false
438
438
for _ , loc := range fd .GetSourceCodeInfo ().GetLocation () {
439
439
if pathsEqual (loc .Path , path ) {
440
- * srcPosAddr = SourcePos {
440
+ start : = SourcePos {
441
441
Filename : dep ,
442
442
Line : int (loc .Span [0 ]),
443
443
Col : int (loc .Span [1 ]),
444
444
}
445
+ var end SourcePos
446
+ if len (loc .Span ) > 3 {
447
+ end = SourcePos {
448
+ Filename : dep ,
449
+ Line : int (loc .Span [2 ]),
450
+ Col : int (loc .Span [3 ]),
451
+ }
452
+ } else {
453
+ end = SourcePos {
454
+ Filename : dep ,
455
+ Line : int (loc .Span [0 ]),
456
+ Col : int (loc .Span [2 ]),
457
+ }
458
+ }
459
+ * srcSpanAddr = ast2 .NewSourceSpan (start , end )
445
460
found = true
446
461
break
447
462
}
448
463
}
449
464
if ! found {
450
- * srcPosAddr = * ast . UnknownPos (dep )
465
+ * srcSpanAddr = ast2 . UnknownSpan (dep )
451
466
}
452
467
defer func () {
453
- * srcPosAddr = orig
468
+ * srcSpanAddr = orig
454
469
}()
455
470
456
- return parseToProtoRecursive (res , dep , rep , srcPosAddr , results )
471
+ return parseToProtoRecursive (res , dep , rep , srcSpanAddr , results )
457
472
}()
458
473
if err != nil {
459
474
return err
@@ -496,8 +511,8 @@ func newReporter(errRep ErrorReporter, warnRep WarningReporter) reporter.Reporte
496
511
return reporter .NewReporter (errRep , warnRep )
497
512
}
498
513
499
- func (p Parser ) getResolver (filenames []string ) (protocompile.Resolver , * SourcePos ) {
500
- var srcPos SourcePos
514
+ func (p Parser ) getResolver (filenames []string ) (protocompile.Resolver , * ast2. SourceSpan ) {
515
+ var srcSpan ast2. SourceSpan
501
516
accessor := p .Accessor
502
517
if accessor == nil {
503
518
accessor = func (name string ) (io.ReadCloser , error ) {
@@ -512,8 +527,8 @@ func (p Parser) getResolver(filenames []string) (protocompile.Resolver, *SourceP
512
527
// errors that don't include the filename that failed are no bueno
513
528
err = errorWithFilename {filename : filename , underlying : err }
514
529
}
515
- if srcPos . Filename != "" {
516
- err = reporter .Error (srcPos , err )
530
+ if srcSpan != nil {
531
+ err = reporter .Error (srcSpan , err )
517
532
}
518
533
}
519
534
return in , err
@@ -552,7 +567,7 @@ func (p Parser) getResolver(filenames []string) (protocompile.Resolver, *SourceP
552
567
}
553
568
return backupResolver .FindFileByPath (path )
554
569
}),
555
- }, & srcPos
570
+ }, & srcSpan
556
571
}
557
572
558
573
func fixupFilenames (protos map [string ]parser.Result ) (revisedProtos map [string ]parser.Result , rewrittenPaths map [string ]string ) {
0 commit comments