Skip to content

:multiple does not work with :default #153

@ieugen

Description

@ieugen

Problem

I tried to use a multiple with default value and I get an error.

Also the error message is not very helpful: No value supplied for key: cli_matic.utils$assoc_new_multivalue@a520a55

Repro

(def demographics-cli-matic-config
  {:command "demographics"   
   :subcommands [{:command "run"
                  :opts [{:as      "The demograpics type."
                          ;; :default ["ethnicity" "otherp"]
                          :option  "type"
                          :multiple true
                          :type    :string}]
                  :runs println}]})

{:clojure.main/message
 "Execution error (IllegalArgumentException) at clojure.tools.cli/compile-spec (cli.cljc:259).\nNo value supplied for key: cli_matic.utils$assoc_new_multivalue@a520a55\n",
 :clojure.main/triage
 {:clojure.error/class java.lang.IllegalArgumentException,
  :clojure.error/line 259,
  :clojure.error/cause
  "No value supplied for key: cli_matic.utils$assoc_new_multivalue@a520a55",
  :clojure.error/symbol clojure.tools.cli/compile-spec,
  :clojure.error/source "cli.cljc",
  :clojure.error/phase :execution},
 :clojure.main/trace
 {:via
  [{:type java.lang.IllegalArgumentException,
    :message
    "No value supplied for key: cli_matic.utils$assoc_new_multivalue@a520a55",
    :at
    [clojure.lang.PersistentHashMap
     create
     "PersistentHashMap.java"
     77]}],
  :trace
  [[clojure.lang.PersistentHashMap create "PersistentHashMap.java" 77]
   [clojure.core$hash_map invokeStatic "core.clj" 389]
   [clojure.core$hash_map doInvoke "core.clj" 381]
   [clojure.lang.RestFn applyTo "RestFn.java" 137]
   [clojure.core$apply invokeStatic "core.clj" 667]
   [clojure.core$apply invoke "core.clj" 662]
   [clojure.tools.cli$compile_spec invokeStatic "cli.cljc" 259]
   [clojure.tools.cli$compile_spec invoke "cli.cljc" 257]
   [clojure.tools.cli$compile_option_specs$fn__17275
    invoke
    "cli.cljc"
    345]
   [clojure.core$map$fn__5935 invoke "core.clj" 2770]
   [clojure.lang.LazySeq sval "LazySeq.java" 42]
   [clojure.lang.LazySeq seq "LazySeq.java" 51]
   [clojure.lang.RT seq "RT.java" 535]
   [clojure.core$seq__5467 invokeStatic "core.clj" 139]
   [clojure.core$every_QMARK_ invokeStatic "core.clj" 2696]
   [clojure.core$every_QMARK_ invoke "core.clj" 2689]
   [clojure.tools.cli$compile_option_specs invokeStatic "cli.cljc" 335]
   [clojure.tools.cli$compile_option_specs invoke "cli.cljc" 291]
   [clojure.tools.cli$parse_opts invokeStatic "cli.cljc" 753]
   [clojure.tools.cli$parse_opts doInvoke "cli.cljc" 564]
   [clojure.lang.RestFn invoke "RestFn.java" 464]
   [cli_matic.core$parse_cmds_with_defaults
    invokeStatic
    "core.cljc"
    145]
   [cli_matic.core$parse_cmds_with_defaults invoke "core.cljc" 110]
   [cli_matic.core$parse_cmds_with_positions
    invokeStatic
    "core.cljc"
    169]
   [cli_matic.core$parse_cmds_with_positions invoke "core.cljc" 155]
   [cli_matic.core$parse_command_line invokeStatic "core.cljc" 320]
   [cli_matic.core$parse_command_line invoke "core.cljc" 266]
   [cli_matic.core$run_cmd_STAR_ invokeStatic "core.cljc" 575]
   [cli_matic.core$run_cmd_STAR_ invoke "core.cljc" 560]
   [cli_matic.core$run_cmd invokeStatic "core.cljc" 601]
   [cli_matic.core$run_cmd invoke "core.cljc" 591]
   [dre.app_tasks.main$_main invokeStatic "main.clj" 59]
   [dre.app_tasks.main$_main doInvoke "main.clj" 56]
   [clojure.lang.RestFn applyTo "RestFn.java" 137]
   [clojure.lang.Var applyTo "Var.java" 705]
   [clojure.core$apply invokeStatic "core.clj" 667]
   [clojure.main$main_opt invokeStatic "main.clj" 514]
   [clojure.main$main_opt invoke "main.clj" 510]
   [clojure.main$main invokeStatic "main.clj" 664]
   [clojure.main$main doInvoke "main.clj" 616]
   [clojure.lang.RestFn applyTo "RestFn.java" 137]
   [clojure.lang.Var applyTo "Var.java" 705]
   [clojure.main main "main.java" 40]],
  :cause
  "No value supplied for key: cli_matic.utils$assoc_new_multivalue@a520a55"}}

Execution error (IllegalArgumentException) at clojure.tools.cli/compile-spec (cli.cljc:259).
No value supplied for key: cli_matic.utils$assoc_new_multivalue@a520a55

Expected vs actual behavior

demographics run --type aa --type bb
{:type [aa bb], :_arguments []}

Version / Platform

java -version
openjdk version "11.0.12" 2021-07-20
OpenJDK Runtime Environment 18.9 (build 11.0.12+7)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.12+7, mixed mode)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions