diff --git a/src/babashka/main.clj b/src/babashka/main.clj index 26af3609..338b02b1 100644 --- a/src/babashka/main.clj +++ b/src/babashka/main.clj @@ -427,12 +427,6 @@ When no eval opts or subcommand is provided, the implicit subcommand is repl.") (assoc opts-map :run fst :command-line-args (next args)))) opts-map))) -(defn parse-global-opts [options] - (when-let [f (first options)] - (case f - ("--classpath" "-cp") [(nnext options) (second options)] - [options nil]))) - (defn parse-args [args opts-map] (loop [options args opts-map opts-map] @@ -567,12 +561,22 @@ When no eval opts or subcommand is provided, the implicit subcommand is repl.") :command-line-args (next options))))))) opts-map))) +(defn parse-global-opts [options] + (loop [options (seq options) + opts-map {}] + (if options + (case (first options) + ("--classpath" "-cp") (recur (nnext options) (assoc opts-map :classpath (second options))) + ("--verbose") (recur (next options) (assoc opts-map :verbose? true)) + [options opts-map]) + [options opts-map]))) + (defn parse-opts ([options] (parse-opts options nil)) ([options opts-map] - (let [[options classpath] (parse-global-opts options) - opts-map (if classpath (assoc opts-map :classpath classpath) - opts-map) + (let [[options opts-map] (if opts-map + [options opts-map] + (parse-global-opts options)) opt (first options) tasks (into #{} (map str) (keys (:tasks @common/bb-edn)))] (if-not opt opts-map @@ -580,16 +584,16 @@ When no eval opts or subcommand is provided, the implicit subcommand is repl.") (cond (fs/regular-file? opt) (if (str/ends-with? opt ".jar") - {:classpath classpath - :jar opt - :command-line-args (next options)} - {:classpath classpath - :file opt - :command-line-args (next options)}) + (assoc opts-map + :jar opt + :command-line-args (next options)) + (assoc opts-map + :file opt + :command-line-args (next options))) (contains? tasks opt) - {:run opt - :classpath classpath - :command-line-args (rest options)} + (assoc opts-map + :run opt + :command-line-args (next options)) (command? opt) (recur (cons (str "--" opt) (next options)) opts-map) :else diff --git a/test/babashka/main_test.clj b/test/babashka/main_test.clj index 64bde1cc..6d750ca9 100644 --- a/test/babashka/main_test.clj +++ b/test/babashka/main_test.clj @@ -35,6 +35,12 @@ (is (= {:classpath "src" :uberjar "foo.jar"} (main/parse-opts ["--classpath" "src" "uberjar" "foo.jar"]))) + (is (= {:classpath "src" + :uberjar "foo.jar" + :verbose? true} + (main/parse-opts ["--verbose" "--classpath" "src" "uberjar" "foo.jar"]))) + (is (= "src" (:classpath (main/parse-opts ["--classpath" "src"])))) + (is (:verbose? (main/parse-opts ["--verbose"]))) (is (= 123 (bb nil "(println 123)"))) (is (= 123 (bb nil "-e" "(println 123)"))) (is (= 123 (bb nil "--eval" "(println 123)"))) @@ -47,7 +53,7 @@ (let [v (bb nil "--describe")] (is (:babashka/version v)) (is (:feature/xml v))) - (is (= "src" (:classpath (main/parse-opts ["--classpath" "src"]))))) + ) (deftest version-test (is (= [1 0 0] (main/parse-version "1.0.0-SNAPSHOT")))