[#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]
|
||||
(let [opts (loop [options options
|
||||
opts-map {}]
|
||||
(if-let [opt (first options)]
|
||||
(if options
|
||||
(let [opt (first options)]
|
||||
(case opt
|
||||
("--version") {:version true}
|
||||
("--help" "-h" "-?") {:help? true}
|
||||
("--verbose")(recur (rest options)
|
||||
("--verbose")(recur (next options)
|
||||
(assoc opts-map
|
||||
:verbose? true))
|
||||
("--stream") (recur (rest options)
|
||||
("--stream") (recur (next options)
|
||||
(assoc opts-map
|
||||
:stream? true))
|
||||
("--time") (recur (rest options)
|
||||
("--time") (recur (next options)
|
||||
(assoc opts-map
|
||||
:time? true))
|
||||
("-i") (recur (rest options)
|
||||
("-i") (recur (next options)
|
||||
(assoc opts-map
|
||||
:shell-in true))
|
||||
("-I") (recur (rest options)
|
||||
("-I") (recur (next options)
|
||||
(assoc opts-map
|
||||
:edn-in true))
|
||||
("-o") (recur (rest options)
|
||||
("-o") (recur (next options)
|
||||
(assoc opts-map
|
||||
:shell-out true))
|
||||
("-O") (recur (rest options)
|
||||
("-O") (recur (next options)
|
||||
(assoc opts-map
|
||||
:edn-out true))
|
||||
("-io") (recur (rest options)
|
||||
("-io") (recur (next options)
|
||||
(assoc opts-map
|
||||
:shell-in true
|
||||
:shell-out true))
|
||||
("-IO") (recur (rest options)
|
||||
("-IO") (recur (next options)
|
||||
(assoc opts-map
|
||||
:edn-in true
|
||||
:edn-out true))
|
||||
("-f" "--file")
|
||||
(let [options (rest options)]
|
||||
(recur (rest options)
|
||||
(let [options (next options)]
|
||||
(recur (next options)
|
||||
(assoc opts-map
|
||||
:file (first options))))
|
||||
("--repl")
|
||||
(let [options (rest options)]
|
||||
(recur (rest options)
|
||||
(let [options (next options)]
|
||||
(recur (next options)
|
||||
(assoc opts-map
|
||||
:repl true)))
|
||||
("--socket-repl")
|
||||
(let [options (rest options)]
|
||||
(recur (rest options)
|
||||
(let [options (next options)]
|
||||
(recur (next options)
|
||||
(assoc opts-map
|
||||
:socket-repl (first options))))
|
||||
("--eval", "-e")
|
||||
(let [options (rest options)]
|
||||
(recur (rest options)
|
||||
(let [options (next options)]
|
||||
(recur (next options)
|
||||
(assoc opts-map :expression (first options))))
|
||||
("--classpath", "-cp")
|
||||
(let [options (rest options)]
|
||||
(recur (rest options)
|
||||
(let [options (next options)]
|
||||
(recur (next options)
|
||||
(assoc opts-map :classpath (first options))))
|
||||
("--main", "-m")
|
||||
(let [options (rest options)]
|
||||
(recur (rest options)
|
||||
(let [options (next options)]
|
||||
(recur (next options)
|
||||
(assoc opts-map :main (first options))))
|
||||
(if (some opts-map [:file :socket-repl :expression :main])
|
||||
(assoc opts-map
|
||||
|
|
@ -101,10 +102,10 @@
|
|||
(.exists (io/file opt)))
|
||||
(assoc opts-map
|
||||
:file opt
|
||||
:command-line-args (rest options))
|
||||
:command-line-args (next options))
|
||||
(assoc opts-map
|
||||
:expression opt
|
||||
:command-line-args (rest options)))))
|
||||
:command-line-args (next options))))))
|
||||
opts-map))]
|
||||
opts))
|
||||
|
||||
|
|
|
|||
|
|
@ -21,15 +21,15 @@
|
|||
|
||||
(testing "distinguish automatically between expression or file name"
|
||||
(is (= {:expression "(println 123)"
|
||||
:command-line-args []}
|
||||
:command-line-args nil}
|
||||
(main/parse-opts ["(println 123)"])))
|
||||
|
||||
(is (= {:file "src/babashka/main.clj"
|
||||
:command-line-args []}
|
||||
:command-line-args nil}
|
||||
(main/parse-opts ["src/babashka/main.clj"])))
|
||||
|
||||
(is (= {:expression "does-not-exist"
|
||||
:command-line-args []}
|
||||
:command-line-args nil}
|
||||
(main/parse-opts ["does-not-exist"])))))
|
||||
|
||||
(deftest main-test
|
||||
|
|
@ -318,10 +318,14 @@
|
|||
(defn foo [] (println \"foo!\"))
|
||||
(with-out-str
|
||||
(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
|
||||
|
||||
(comment
|
||||
(dotimes [_ 10] (wait-for-port-test))
|
||||
))
|
||||
)
|
||||
|
|
|
|||
Loading…
Reference in a new issue