d3orm/d3/parser/mod.go
2024-01-10 02:32:42 +03:00

47 lines
763 B
Go

package parser
import (
"bytes"
"strconv"
)
var (
doubleSlash = []byte("//")
moduleStr = []byte("module")
)
func ModulePath(mod []byte) string {
for len(mod) > 0 {
line := mod
mod = nil
if i := bytes.IndexByte(line, '\n'); i >= 0 {
line, mod = line[:i], line[i+1:]
}
if i := bytes.Index(line, doubleSlash); i >= 0 {
line = line[:i]
}
line = bytes.TrimSpace(line)
if !bytes.HasPrefix(line, moduleStr) {
continue
}
line = line[len(moduleStr):]
n := len(line)
line = bytes.TrimSpace(line)
if len(line) == n || len(line) == 0 {
continue
}
if line[0] == '"' || line[0] == '`' {
p, err := strconv.Unquote(string(line))
if err != nil {
return ""
}
return p
}
return string(line)
}
return ""
}