|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- // Copyright 2013 The Go Authors. All rights reserved.
- //
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file or at
- // https://developers.google.com/open-source/licenses/bsd.
-
- //go:generate go run gen.go -output data.go
-
- package gosrc
-
- import (
- "path"
- "regexp"
- "strings"
- )
-
- var validHost = regexp.MustCompile(`^[-a-z0-9]+(?:\.[-a-z0-9]+)+$`)
- var validPathElement = regexp.MustCompile(`^[-A-Za-z0-9~+_][-A-Za-z0-9_.]*$`)
-
- func isValidPathElement(s string) bool {
- return validPathElement.MatchString(s)
- }
-
- // IsValidRemotePath returns true if importPath is structurally valid for "go get".
- func IsValidRemotePath(importPath string) bool {
-
- parts := strings.Split(importPath, "/")
-
- if !validTLDs[path.Ext(parts[0])] {
- return false
- }
-
- if !validHost.MatchString(parts[0]) {
- return false
- }
-
- for _, part := range parts[1:] {
- if !isValidPathElement(part) {
- return false
- }
- }
-
- return true
- }
-
- // IsGoRepoPath returns true if path is in $GOROOT/src.
- func IsGoRepoPath(path string) bool {
- return pathFlags[path]&goRepoPath != 0
- }
-
- // IsValidPath returns true if importPath is structurally valid.
- func IsValidPath(importPath string) bool {
- return pathFlags[importPath]&packagePath != 0 || IsValidRemotePath(importPath)
- }
|