Fork me on GitHub
#planck
<
2016-11-21
>
bherrmann03:11:14

Humm... how would i use clojure/tools.cli with planck? I want to use parse-opts to do command line option processing

bherrmann03:11:51

cljs.user=> (ns cljs.user (:require [clojure.tools.cli :refer [parse-opts]])) #error {:message No such namespace: cljs.tools.cli, could not locate cljs/tools/cli.cljs, cljs/tools/cli.cljc, or Closure namespace "cljs.tools.cli", :data {:tag :cljs/analysis-error}}

mfikes03:11:50

@bherrmann Do you have that JAR on Planck’s classpath? I have never tried it before. Let me see...

bherrmann03:11:15

no I was hoping it was a part of core

bherrmann03:11:27

$ planck -c tools.cli-0.3.5.jar

bherrmann03:11:47

cljs.user=> (ns cljs.user (:require [clojure.tools.cli :refer [parse-opts]])) nil

bherrmann03:11:55

seems like it is working.

bherrmann03:11:18

manually downloading a jar file - feels like a stoneage activity.

bherrmann03:11:28

I'm used to maven / npm

mfikes03:11:22

It worked for me 🙂

planck -c /Users/mfikes/.m2/repository/org/clojure/tools.cli/0.3.5/tools.cli-0.3.5.jar -m my.program -vvvp8080 foo --help --invalid-opt
{:errors ["Unknown option: \"--invalid-opt\""], :arguments ["foo"], :summary "  -p, --port PORT  80  Port number\n  -v                   Verbosity level\n  -h, --help", :options {:port 8080, :verbosity 3, :help true}}

mfikes03:11:49

$ cat my/program.cljs
(ns my.program
  (:require [clojure.tools.cli :refer [parse-opts]]))

(def cli-options
  ;; An option with a required argument
  [["-p" "--port PORT" "Port number"
    :default 80
    :parse-fn #(js/parseInt %)
    :validate [#(< 0 % 0x10000) "Must be a number between 0 and 65536"]]
   ;; A non-idempotent option
   ["-v" nil "Verbosity level"
    :id :verbosity
    :default 0
    :assoc-fn (fn [m k _] (update-in m [k] inc))]
   ;; A boolean option defaulting to nil
   ["-h" "--help"]])

(defn -main [& args]
  (prn (parse-opts args cli-options)))

mfikes03:11:44

You can get Leiningen or Boot to download the dependency for you. See http://planck-repl.org/dependencies.html

mfikes03:11:10

I used Leiningen with

(defproject foo "0.1.0-SNAPSHOT"
  :dependencies [[org.clojure/tools.cli “0.3.5”]])

bherrmann03:11:10

great thanks