// 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/