blob: 328a8d79249fc4996abaa2723df4c9a36e6174ab [file] [log] [blame]
// Test for name linting.
// Package pkg_with_underscores ...
package pkg_with_underscores // MATCH /underscore.*package name/
import (
"io"
"net"
net_http "net/http" // renamed deliberately
"net/url"
)
import "C"
var var_name int // MATCH /underscore.*var.*var_name/
type t_wow struct { // MATCH /underscore.*type.*t_wow/
x_damn int // MATCH /underscore.*field.*x_damn/
Url *url.URL // MATCH /struct field.*Url.*URL/
}
const fooId = "blah" // MATCH /fooId.*fooID/
func f_it() { // MATCH /underscore.*func.*f_it/
more_underscore := 4 // MATCH /underscore.*var.*more_underscore/
_ = more_underscore
var err error
if isEof := (err == io.EOF); isEof { // MATCH /var.*isEof.*isEOF/
more_underscore = 7 // should be okay
}
x := net_http.Request{} // should be okay
_ = x
var ips []net.IP
for _, theIp := range ips { // MATCH /range var.*theIp.*theIP/
_ = theIp
}
switch myJson := g(); { // MATCH /var.*myJson.*myJSON/
default:
_ = myJson
}
var y net_http.ResponseWriter // an interface
switch tApi := y.(type) { // MATCH /var.*tApi.*tAPI/
default:
_ = tApi
}
var c chan int
select {
case qId := <-c: // MATCH /var.*qId.*qID/
_ = qId
}
}
// Common styles in other languages that don't belong in Go.
const (
CPP_CONST = 1 // MATCH /ALL_CAPS.*CamelCase/
kLeadingKay = 2 // MATCH /k.*leadingKay/
HTML = 3 // okay; no underscore
X509B = 4 // ditto
V1_10_5 = 5 // okay; fewer than two uppercase letters
)
var kVarsAreSometimesUsedAsConstants = 0 // MATCH /k.*varsAreSometimesUsedAsConstants/
var (
kVarsAreSometimesUsedAsConstants2 = 0 // MATCH /k.*varsAreSometimesUsedAsConstants2/
)
var kThisIsNotOkay = struct { // MATCH /k.*thisIsNotOkay/
kThisIsOkay bool
}{}
func kThisIsOkay() { // this is okay because this is a function name
var kThisIsAlsoOkay = 1 // this is okay because this is a non-top-level variable
_ = kThisIsAlsoOkay
const kThisIsNotOkay = 2 // MATCH /k.*thisIsNotOkay/
}
var anotherFunctionScope = func() {
var kThisIsOkay = 1 // this is okay because this is a non-top-level variable
_ = kThisIsOkay
const kThisIsNotOkay = 2 // MATCH /k.*thisIsNotOkay/}
}
func f(bad_name int) {} // MATCH /underscore.*func parameter.*bad_name/
func g() (no_way int) { return 0 } // MATCH /underscore.*func result.*no_way/
func (t *t_wow) f(more_under string) {} // MATCH /underscore.*method parameter.*more_under/
func (t *t_wow) g() (still_more string) { return "" } // MATCH /underscore.*method result.*still_more/
type i interface {
CheckHtml() string // okay; interface method names are often constrained by the concrete types' method names
F(foo_bar int) // MATCH /foo_bar.*fooBar/
}
// All okay; underscore between digits
const case1_1 = 1
type case2_1 struct {
case2_2 int
}
func case3_1(case3_2 int) (case3_3 string) {
case3_4 := 4
_ = case3_4
return ""
}
type t struct{}
func (t) LastInsertId() (int64, error) { return 0, nil } // okay because it matches a known style violation
//export exported_to_c
func exported_to_c() {} // okay: https://github.com/golang/lint/issues/144
//export exported_to_c_with_arg
func exported_to_c_with_arg(but_use_go_param_names int) // MATCH /underscore.*func parameter.*but_use_go_param_names/
// This is an exported C function with a leading doc comment.
//
//export exported_to_c_with_comment
func exported_to_c_with_comment() {} // okay: https://github.com/golang/lint/issues/144
//export maybe_exported_to_CPlusPlusWithCamelCase
func maybe_exported_to_CPlusPlusWithCamelCase() {} // okay: https://github.com/golang/lint/issues/144
// WhyAreYouUsingCapitalLetters_InACFunctionName is a Go-exported function that
// is also exported to C as a name with underscores.
//
// Don't do that. If you want to use a C-style name for a C export, make it
// lower-case and leave it out of the Go-exported API.
//
//export WhyAreYouUsingCapitalLetters_InACFunctionName
func WhyAreYouUsingCapitalLetters_InACFunctionName() {} // MATCH /underscore.*func.*Why.*CFunctionName/