[#194] *command-line-args* should be nil instead of empty list when no args are provided
This commit is contained in:
parent
5ad851d2ed
commit
edecf87b67
2 changed files with 81 additions and 76 deletions
|
|
@ -34,65 +34,66 @@
|
||||||
(defn parse-opts [options]
|
(defn parse-opts [options]
|
||||||
(let [opts (loop [options options
|
(let [opts (loop [options options
|
||||||
opts-map {}]
|
opts-map {}]
|
||||||
(if-let [opt (first options)]
|
(if options
|
||||||
|
(let [opt (first options)]
|
||||||
(case opt
|
(case opt
|
||||||
("--version") {:version true}
|
("--version") {:version true}
|
||||||
("--help" "-h" "-?") {:help? true}
|
("--help" "-h" "-?") {:help? true}
|
||||||
("--verbose")(recur (rest options)
|
("--verbose")(recur (next options)
|
||||||
(assoc opts-map
|
(assoc opts-map
|
||||||
:verbose? true))
|
:verbose? true))
|
||||||
("--stream") (recur (rest options)
|
("--stream") (recur (next options)
|
||||||
(assoc opts-map
|
(assoc opts-map
|
||||||
:stream? true))
|
:stream? true))
|
||||||
("--time") (recur (rest options)
|
("--time") (recur (next options)
|
||||||
(assoc opts-map
|
(assoc opts-map
|
||||||
:time? true))
|
:time? true))
|
||||||
("-i") (recur (rest options)
|
("-i") (recur (next options)
|
||||||
(assoc opts-map
|
(assoc opts-map
|
||||||
:shell-in true))
|
:shell-in true))
|
||||||
("-I") (recur (rest options)
|
("-I") (recur (next options)
|
||||||
(assoc opts-map
|
(assoc opts-map
|
||||||
:edn-in true))
|
:edn-in true))
|
||||||
("-o") (recur (rest options)
|
("-o") (recur (next options)
|
||||||
(assoc opts-map
|
(assoc opts-map
|
||||||
:shell-out true))
|
:shell-out true))
|
||||||
("-O") (recur (rest options)
|
("-O") (recur (next options)
|
||||||
(assoc opts-map
|
(assoc opts-map
|
||||||
:edn-out true))
|
:edn-out true))
|
||||||
("-io") (recur (rest options)
|
("-io") (recur (next options)
|
||||||
(assoc opts-map
|
(assoc opts-map
|
||||||
:shell-in true
|
:shell-in true
|
||||||
:shell-out true))
|
:shell-out true))
|
||||||
("-IO") (recur (rest options)
|
("-IO") (recur (next options)
|
||||||
(assoc opts-map
|
(assoc opts-map
|
||||||
:edn-in true
|
:edn-in true
|
||||||
:edn-out true))
|
:edn-out true))
|
||||||
("-f" "--file")
|
("-f" "--file")
|
||||||
(let [options (rest options)]
|
(let [options (next options)]
|
||||||
(recur (rest options)
|
(recur (next options)
|
||||||
(assoc opts-map
|
(assoc opts-map
|
||||||
:file (first options))))
|
:file (first options))))
|
||||||
("--repl")
|
("--repl")
|
||||||
(let [options (rest options)]
|
(let [options (next options)]
|
||||||
(recur (rest options)
|
(recur (next options)
|
||||||
(assoc opts-map
|
(assoc opts-map
|
||||||
:repl true)))
|
:repl true)))
|
||||||
("--socket-repl")
|
("--socket-repl")
|
||||||
(let [options (rest options)]
|
(let [options (next options)]
|
||||||
(recur (rest options)
|
(recur (next options)
|
||||||
(assoc opts-map
|
(assoc opts-map
|
||||||
:socket-repl (first options))))
|
:socket-repl (first options))))
|
||||||
("--eval", "-e")
|
("--eval", "-e")
|
||||||
(let [options (rest options)]
|
(let [options (next options)]
|
||||||
(recur (rest options)
|
(recur (next options)
|
||||||
(assoc opts-map :expression (first options))))
|
(assoc opts-map :expression (first options))))
|
||||||
("--classpath", "-cp")
|
("--classpath", "-cp")
|
||||||
(let [options (rest options)]
|
(let [options (next options)]
|
||||||
(recur (rest options)
|
(recur (next options)
|
||||||
(assoc opts-map :classpath (first options))))
|
(assoc opts-map :classpath (first options))))
|
||||||
("--main", "-m")
|
("--main", "-m")
|
||||||
(let [options (rest options)]
|
(let [options (next options)]
|
||||||
(recur (rest options)
|
(recur (next options)
|
||||||
(assoc opts-map :main (first options))))
|
(assoc opts-map :main (first options))))
|
||||||
(if (some opts-map [:file :socket-repl :expression :main])
|
(if (some opts-map [:file :socket-repl :expression :main])
|
||||||
(assoc opts-map
|
(assoc opts-map
|
||||||
|
|
@ -101,10 +102,10 @@
|
||||||
(.exists (io/file opt)))
|
(.exists (io/file opt)))
|
||||||
(assoc opts-map
|
(assoc opts-map
|
||||||
:file opt
|
:file opt
|
||||||
:command-line-args (rest options))
|
:command-line-args (next options))
|
||||||
(assoc opts-map
|
(assoc opts-map
|
||||||
:expression opt
|
:expression opt
|
||||||
:command-line-args (rest options)))))
|
:command-line-args (next options))))))
|
||||||
opts-map))]
|
opts-map))]
|
||||||
opts))
|
opts))
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,15 +21,15 @@
|
||||||
|
|
||||||
(testing "distinguish automatically between expression or file name"
|
(testing "distinguish automatically between expression or file name"
|
||||||
(is (= {:expression "(println 123)"
|
(is (= {:expression "(println 123)"
|
||||||
:command-line-args []}
|
:command-line-args nil}
|
||||||
(main/parse-opts ["(println 123)"])))
|
(main/parse-opts ["(println 123)"])))
|
||||||
|
|
||||||
(is (= {:file "src/babashka/main.clj"
|
(is (= {:file "src/babashka/main.clj"
|
||||||
:command-line-args []}
|
:command-line-args nil}
|
||||||
(main/parse-opts ["src/babashka/main.clj"])))
|
(main/parse-opts ["src/babashka/main.clj"])))
|
||||||
|
|
||||||
(is (= {:expression "does-not-exist"
|
(is (= {:expression "does-not-exist"
|
||||||
:command-line-args []}
|
:command-line-args nil}
|
||||||
(main/parse-opts ["does-not-exist"])))))
|
(main/parse-opts ["does-not-exist"])))))
|
||||||
|
|
||||||
(deftest main-test
|
(deftest main-test
|
||||||
|
|
@ -318,10 +318,14 @@
|
||||||
(defn foo [] (println \"foo!\"))
|
(defn foo [] (println \"foo!\"))
|
||||||
(with-out-str
|
(with-out-str
|
||||||
(with-in-str \"(foo)\"
|
(with-in-str \"(foo)\"
|
||||||
(clojure.main/repl :init (fn []) :prompt (fn [] (print \"> \")))))")))
|
(clojure.main/repl :init (fn []) :prompt (fn [] (print \"> \")))))"))))
|
||||||
|
|
||||||
|
(deftest command-line-args-test
|
||||||
|
(is (true? (bb nil "(nil? *command-line-args*)")))
|
||||||
|
(is (= ["1" "2" "3"] (bb nil "*command-line-args*" "1" "2" "3"))))
|
||||||
|
|
||||||
;;;; Scratch
|
;;;; Scratch
|
||||||
|
|
||||||
(comment
|
(comment
|
||||||
(dotimes [_ 10] (wait-for-port-test))
|
(dotimes [_ 10] (wait-for-port-test))
|
||||||
))
|
)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue