Skip to content

Commit

Permalink
refactor: move regexp.MustCompile to globals
Browse files Browse the repository at this point in the history
  • Loading branch information
luisdavim committed May 21, 2022
1 parent b7ad35e commit 19f4231
Showing 1 changed file with 14 additions and 11 deletions.
25 changes: 14 additions & 11 deletions gotenv.go
Expand Up @@ -143,9 +143,15 @@ func StrictParse(r io.Reader) (Env, error) {
return env, nil
}

var (
lineRgx = regexp.MustCompile(linePattern)
quotesRgx = regexp.MustCompile(`\A(['"])(.*)(['"])\z`)
unescapeRgx = regexp.MustCompile(`\\([^$])`)
varRgx = regexp.MustCompile(variablePattern)
)

func parseLine(s string, env Env) error {
rl := regexp.MustCompile(linePattern)
rm := rl.FindStringSubmatch(s)
rm := lineRgx.FindStringSubmatch(s)

if len(rm) == 0 {
return checkFormat(s, env)
Expand All @@ -164,24 +170,21 @@ func parseLine(s string, env Env) error {
val = strings.Trim(val, " ")

// remove quotes '' or ""
rq := regexp.MustCompile(`\A(['"])(.*)(['"])\z`)
val = rq.ReplaceAllString(val, "$2")
val = quotesRgx.ReplaceAllString(val, "$2")

if hdq {
val = strings.ReplaceAll(val, `\n`, "\n")
val = strings.ReplaceAll(val, `\r`, "\r")

// Unescape all characters except $ so variables can be escaped properly
re := regexp.MustCompile(`\\([^$])`)
val = re.ReplaceAllString(val, "$1")
val = unescapeRgx.ReplaceAllString(val, "$1")
}

rv := regexp.MustCompile(variablePattern)
fv := func(s string) string {
return varReplacement(s, hsq, env)
}

val = rv.ReplaceAllStringFunc(val, fv)
val = varRgx.ReplaceAllStringFunc(val, fv)
val = parseVal(val, env, hdq)

env[key] = val
Expand All @@ -202,6 +205,8 @@ func parseExport(st string, env Env) error {
return nil
}

var varNameRgx = regexp.MustCompile(`(\$)(\{?([A-Z0-9_]+)\}?)`)

func varReplacement(s string, hsq bool, env Env) string {
if strings.HasPrefix(s, "\\") {
return strings.TrimPrefix(s, "\\")
Expand All @@ -211,9 +216,7 @@ func varReplacement(s string, hsq bool, env Env) string {
return s
}

sn := `(\$)(\{?([A-Z0-9_]+)\}?)`
rn := regexp.MustCompile(sn)
mn := rn.FindStringSubmatch(s)
mn := varNameRgx.FindStringSubmatch(s)

if len(mn) == 0 {
return s
Expand Down

0 comments on commit 19f4231

Please sign in to comment.