
-- go.mod --
module example.com
go 1.18

-- template/template.go --
package template

import (
	"go/ast" // defines many unencapsulated structs
	"go/token"
)

func before(from, to token.Pos) ast.BadExpr { return ast.BadExpr{from, to} }
func after(from, to token.Pos) ast.BadExpr  { return ast.BadExpr{From: from, To: to} }

-- in/h1/h1.go --
package h1

import "go/ast"

func example() {
	_ = ast.BadExpr{From: 123, To: 456} // no match
	_ = ast.BadExpr{123, 456}           // match
	_ = ast.BadExpr{From: 123}          // no match
	_ = ast.BadExpr{To: 456}            // no match
}

-- out/h1/h1.go --
package h1

import "go/ast"

func example() {
	_ = ast.BadExpr{From: 123, To: 456} // no match
	_ = ast.BadExpr{From: 123, To: 456} // match
	_ = ast.BadExpr{From: 123}          // no match
	_ = ast.BadExpr{To: 456}            // no match
}
