Skip to content

Commit

Permalink
gopls/internal/test: add test for NPE in control flow highlighting
Browse files Browse the repository at this point in the history
Add a test for the fix in golang/go#65952: a nil pointer exception when
highlighting a return value in a function returning no results.

Also, merge tests related to control flow highlighting, since it is
convenient to be able to run them together, and since there is
nontrivial overhead to tiny tests.

Updates golang/go#65952

Change-Id: Ibf8c7c6f0f4feed6dc7a283736bc038600a0bf04
Reviewed-on: https://go-review.googlesource.com/c/tools/+/567256
Reviewed-by: Alan Donovan <adonovan@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Auto-Submit: Robert Findley <rfindley@google.com>
  • Loading branch information
findleyr authored and gopherbot committed Feb 27, 2024
1 parent 77c2a67 commit fc70354
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 37 deletions.
71 changes: 71 additions & 0 deletions gopls/internal/test/marker/testdata/highlight/controlflow.txt
@@ -0,0 +1,71 @@
This test verifies document highlighting for control flow.

-- go.mod --
module mod.com

go 1.18

-- p.go --
package p

-- issue60589.go --
package p

// This test verifies that control flow lighlighting correctly
// accounts for multi-name result parameters.
// In golang/go#60589, it did not.

func _() (foo int, bar, baz string) { //@ loc(func, "func"), loc(foo, "foo"), loc(fooint, "foo int"), loc(int, "int"), loc(bar, "bar"), loc(beforebaz, " baz"), loc(baz, "baz"), loc(barbazstring, "bar, baz string"), loc(beforestring, re`() string`), loc(string, "string")
return 0, "1", "2" //@ loc(return, `return 0, "1", "2"`), loc(l0, "0"), loc(l1, `"1"`), loc(l2, `"2"`)
}

// Assertions, expressed here to avoid clutter above.
// Note that when the cursor is over the field type, there is some
// (likely harmless) redundancy.

//@ highlight(func, func, return)
//@ highlight(foo, foo, l0)
//@ highlight(int, fooint, int, l0)
//@ highlight(bar, bar, l1)
//@ highlight(beforebaz)
//@ highlight(baz, baz, l2)
//@ highlight(beforestring, baz, l2)
//@ highlight(string, barbazstring, string, l1, l2)
//@ highlight(l0, foo, l0)
//@ highlight(l1, bar, l1)
//@ highlight(l2, baz, l2)

// Check that duplicate result names do not cause
// inaccurate highlighting.

func _() (x, x int32) { //@ loc(x1, re`\((x)`), loc(x2, re`(x) int`), diag(x1, re"redeclared"), diag(x2, re"redeclared")
return 1, 2 //@ loc(one, "1"), loc(two, "2")
}

//@ highlight(one, one, x1)
//@ highlight(two, two, x2)
//@ highlight(x1, x1, one)
//@ highlight(x2, x2, two)

-- issue65516.go --
package p

// This test checks that gopls doesn't crash while highlighting
// functions with no body (golang/go#65516).

func Foo() (int, string) //@highlight("int", "int"), highlight("func", "func")

-- issue65952.go --
package p

// This test checks that gopls doesn't crash while highlighting
// return values in functions with no results.

func _() {
return 0 //@highlight("0", "0"), diag("0", re"too many return")
}

func _() () {
// TODO(golang/go#65966): fix the triplicate diagnostics here.
return 0 //@highlight("0", "0"), diag("0", re"too many return"), diag("0", re"too many return"), diag("0", re"too many return")
}
30 changes: 0 additions & 30 deletions gopls/internal/test/marker/testdata/highlight/issue60589.txt

This file was deleted.

7 changes: 0 additions & 7 deletions gopls/internal/test/marker/testdata/highlight/issue65516.txt

This file was deleted.

0 comments on commit fc70354

Please sign in to comment.