diff options
Diffstat (limited to 'deepenv.scm')
-rw-r--r-- | deepenv.scm | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/deepenv.scm b/deepenv.scm index 0f31827..98c9400 100644 --- a/deepenv.scm +++ b/deepenv.scm @@ -36,19 +36,38 @@ (list->char-set (list #\") char-set:whitespace)))) (cons key value))) +(define (line-empty? line) + (string=? "" (string-trim-both line))) + +(define (line-comment? line) + (let ((clean-line (string-trim-both line))) + (and (> (string-length clean-line) 0) + (eq? (string-ref clean-line 0) #\#)))) + +(define (line-eof? line) + (eq? line #!eof)) + +(define (line-ignore? line) + (or (line-empty? line) + (line-comment? line))) + (define (read-env-line port) "Read an env-definition line from PORT and return as a cons cell" (let ((line (read-line port))) - (if (eq? line #!eof) - #!eof - (split-env-line line)))) + (cond + ((line-eof? line) #!eof) + ((line-ignore? line) '()) + (else (split-env-line line))))) (define (load-dir-.env dir) "Load a .env file present in `.dir` and return its environment definitions as a alist" (let ((.env-file (conc dir "/.env"))) (if (file-exists? .env-file) - (with-input-from-file .env-file - (lambda () (read-list (current-input-port) read-env-line))) + (filter + (lambda (item) + (not (null? item))) + (with-input-from-file .env-file + (lambda () (read-list (current-input-port) read-env-line)))) '()))) (define (path-parts path) |