Unverified Commit 114c932a authored by Blake Mizerany's avatar Blake Mizerany Committed by GitHub
Browse files

types/model: allow _ as starter character in Name parts (#3991)

parent 7f7103de
...@@ -109,19 +109,19 @@ type Name struct { ...@@ -109,19 +109,19 @@ type Name struct {
// { model } // { model }
// "@" { digest } // "@" { digest }
// host: // host:
// pattern: alphanum { alphanum | "-" | "_" | "." | ":" }* // pattern: { alphanum | "_" } { alphanum | "-" | "_" | "." | ":" }*
// length: [1, 350] // length: [1, 350]
// namespace: // namespace:
// pattern: alphanum { alphanum | "-" | "_" }* // pattern: { alphanum | "_" } { alphanum | "-" | "_" }*
// length: [1, 80] // length: [1, 80]
// model: // model:
// pattern: alphanum { alphanum | "-" | "_" | "." }* // pattern: { alphanum | "_" } { alphanum | "-" | "_" | "." }*
// length: [1, 80] // length: [1, 80]
// tag: // tag:
// pattern: alphanum { alphanum | "-" | "_" | "." }* // pattern: { alphanum | "_" } { alphanum | "-" | "_" | "." }*
// length: [1, 80] // length: [1, 80]
// digest: // digest:
// pattern: alphanum { alphanum | "-" | ":" }* // pattern: { alphanum | "_" } { alphanum | "-" | ":" }*
// length: [1, 80] // length: [1, 80]
// //
// Most users should use [ParseName] instead, unless need to support // Most users should use [ParseName] instead, unless need to support
...@@ -264,7 +264,7 @@ func isValidPart(kind partKind, s string) bool { ...@@ -264,7 +264,7 @@ func isValidPart(kind partKind, s string) bool {
} }
for i := range s { for i := range s {
if i == 0 { if i == 0 {
if !isAlphanumeric(s[i]) { if !isAlphanumericOrUnderscore(s[i]) {
return false return false
} }
continue continue
...@@ -280,7 +280,7 @@ func isValidPart(kind partKind, s string) bool { ...@@ -280,7 +280,7 @@ func isValidPart(kind partKind, s string) bool {
return false return false
} }
default: default:
if !isAlphanumeric(s[i]) { if !isAlphanumericOrUnderscore(s[i]) {
return false return false
} }
} }
...@@ -288,8 +288,8 @@ func isValidPart(kind partKind, s string) bool { ...@@ -288,8 +288,8 @@ func isValidPart(kind partKind, s string) bool {
return true return true
} }
func isAlphanumeric(c byte) bool { func isAlphanumericOrUnderscore(c byte) bool {
return c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z' || c >= '0' && c <= '9' return c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z' || c >= '0' && c <= '9' || c == '_'
} }
func cutLast(s, sep string) (before, after string, ok bool) { func cutLast(s, sep string) (before, after string, ok bool) {
......
...@@ -103,6 +103,8 @@ func TestParseNameParts(t *testing.T) { ...@@ -103,6 +103,8 @@ func TestParseNameParts(t *testing.T) {
var testCases = map[string]bool{ // name -> valid var testCases = map[string]bool{ // name -> valid
"": false, "": false,
"_why/_the/_lucky:_stiff": true,
// minimal // minimal
"h/n/m:t@d": true, "h/n/m:t@d": true,
...@@ -167,7 +169,6 @@ func TestNameIsValid(t *testing.T) { ...@@ -167,7 +169,6 @@ func TestNameIsValid(t *testing.T) {
var numStringTests int var numStringTests int
for s, want := range testCases { for s, want := range testCases {
n := ParseNameBare(s) n := ParseNameBare(s)
t.Logf("n: %#v", n)
got := n.IsValid() got := n.IsValid()
if got != want { if got != want {
t.Errorf("parseName(%q).IsValid() = %v; want %v", s, got, want) t.Errorf("parseName(%q).IsValid() = %v; want %v", s, got, want)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment