Skip to content

Commit f47cb78

Browse files
committed
go/analysis/passes/buildtag: update check for //go:build
Part of //go:build change (#41184). See https://golang.org/design/draft-gobuild Report misplaced and malformed //go:build lines, like we've always done for // +build lines. Report when the // +build lines do not say the same thing as the //go:build line. (Running gofmt will always bring them back in sync.) For Go 1.17 vet. Change-Id: Ifd22c6e8edcfeedc37851ba514712c5c057ad4b8 Reviewed-on: https://go-review.googlesource.com/c/tools/+/293834 Trust: Russ Cox <[email protected]> Run-TryBot: Russ Cox <[email protected]> Reviewed-by: Jay Conrod <[email protected]>
1 parent 06713c2 commit f47cb78

File tree

12 files changed

+538
-76
lines changed

12 files changed

+538
-76
lines changed

go/analysis/analysistest/analysistest.go

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -354,13 +354,13 @@ func check(t Testing, gopath string, pass *analysis.Pass, diagnostics []analysis
354354
// Any comment starting with "want" is treated
355355
// as an expectation, even without following whitespace.
356356
if rest := strings.TrimPrefix(text, "want"); rest != text {
357-
expects, err := parseExpectations(rest)
357+
lineDelta, expects, err := parseExpectations(rest)
358358
if err != nil {
359359
t.Errorf("%s:%d: in 'want' comment: %s", filename, linenum, err)
360360
return
361361
}
362362
if expects != nil {
363-
want[key{filename, linenum}] = expects
363+
want[key{filename, linenum + lineDelta}] = expects
364364
}
365365
}
366366
}
@@ -526,13 +526,13 @@ func (ex expectation) String() string {
526526
// parseExpectations parses the content of a "// want ..." comment
527527
// and returns the expectations, a mixture of diagnostics ("rx") and
528528
// facts (name:"rx").
529-
func parseExpectations(text string) ([]expectation, error) {
529+
func parseExpectations(text string) (lineDelta int, expects []expectation, err error) {
530530
var scanErr string
531531
sc := new(scanner.Scanner).Init(strings.NewReader(text))
532532
sc.Error = func(s *scanner.Scanner, msg string) {
533533
scanErr = msg // e.g. bad string escape
534534
}
535-
sc.Mode = scanner.ScanIdents | scanner.ScanStrings | scanner.ScanRawStrings
535+
sc.Mode = scanner.ScanIdents | scanner.ScanStrings | scanner.ScanRawStrings | scanner.ScanInts
536536

537537
scanRegexp := func(tok rune) (*regexp.Regexp, error) {
538538
if tok != scanner.String && tok != scanner.RawString {
@@ -543,39 +543,44 @@ func parseExpectations(text string) ([]expectation, error) {
543543
return regexp.Compile(pattern)
544544
}
545545

546-
var expects []expectation
547546
for {
548547
tok := sc.Scan()
549548
switch tok {
549+
case '+':
550+
tok = sc.Scan()
551+
if tok != scanner.Int {
552+
return 0, nil, fmt.Errorf("got +%s, want +Int", scanner.TokenString(tok))
553+
}
554+
lineDelta, _ = strconv.Atoi(sc.TokenText())
550555
case scanner.String, scanner.RawString:
551556
rx, err := scanRegexp(tok)
552557
if err != nil {
553-
return nil, err
558+
return 0, nil, err
554559
}
555560
expects = append(expects, expectation{"diagnostic", "", rx})
556561

557562
case scanner.Ident:
558563
name := sc.TokenText()
559564
tok = sc.Scan()
560565
if tok != ':' {
561-
return nil, fmt.Errorf("got %s after %s, want ':'",
566+
return 0, nil, fmt.Errorf("got %s after %s, want ':'",
562567
scanner.TokenString(tok), name)
563568
}
564569
tok = sc.Scan()
565570
rx, err := scanRegexp(tok)
566571
if err != nil {
567-
return nil, err
572+
return 0, nil, err
568573
}
569574
expects = append(expects, expectation{"fact", name, rx})
570575

571576
case scanner.EOF:
572577
if scanErr != "" {
573-
return nil, fmt.Errorf("%s", scanErr)
578+
return 0, nil, fmt.Errorf("%s", scanErr)
574579
}
575-
return expects, nil
580+
return lineDelta, expects, nil
576581

577582
default:
578-
return nil, fmt.Errorf("unexpected %s", scanner.TokenString(tok))
583+
return 0, nil, fmt.Errorf("unexpected %s", scanner.TokenString(tok))
579584
}
580585
}
581586
}

0 commit comments

Comments
 (0)