diff --git a/godotenv.go b/godotenv.go index 1716fee..beaa146 100644 --- a/godotenv.go +++ b/godotenv.go @@ -252,7 +252,13 @@ func parseLine(line string, envMap map[string]string) (key string, value string, } // Parse the key - re := regexp.MustCompile(`^\s*(?:export\s+)?(.*?)\s*$`) + key = splitString[0] + if strings.HasPrefix(key, "export") { + key = strings.TrimPrefix(key, "export") + } + key = strings.TrimSpace(key) + + re := regexp.MustCompile(`^\s*(?:export\s+)?(.*?)\s*$`) key = re.ReplaceAllString(splitString[0], "$1") // Parse the value @@ -324,7 +330,7 @@ func expandVariables(v string, m map[string]string) string { } func isIgnoredLine(line string) bool { - trimmedLine := strings.Trim(line, " \n\t") + trimmedLine := strings.TrimSpace(line) return len(trimmedLine) == 0 || strings.HasPrefix(trimmedLine, "#") } diff --git a/godotenv_test.go b/godotenv_test.go index 1290f65..d1f73cb 100644 --- a/godotenv_test.go +++ b/godotenv_test.go @@ -362,6 +362,11 @@ func TestParsing(t *testing.T) { parseAndCompare(t, `KEY="`, "KEY", "\"") parseAndCompare(t, `KEY="value`, "KEY", "\"value") + // leading whitespace should be ignored + parseAndCompare(t, " KEY =value", "KEY", "value") + parseAndCompare(t, " KEY=value", "KEY", "value") + parseAndCompare(t, "\tKEY=value", "KEY", "value") + // it 'throws an error if line format is incorrect' do // expect{env('lol$wut')}.to raise_error(Dotenv::FormatError) badlyFormattedLine := "lol$wut" @@ -378,6 +383,10 @@ func TestLinesToIgnore(t *testing.T) { t.Error("Line with nothing but line break wasn't ignored") } + if !isIgnoredLine("\r\n") { + t.Error("Line with nothing but windows-style line break wasn't ignored") + } + if !isIgnoredLine("\t\t ") { t.Error("Line full of whitespace wasn't ignored") }