From 14e8a70d2a310e8d7722d2b45644877aa05f6389 Mon Sep 17 00:00:00 2001 From: Jan Seeger Date: Thu, 21 May 2026 15:45:57 +0200 Subject: [PATCH] Added possibility to provide custom columns to opts->table. Fixes #147. --- src/babashka/cli.cljc | 4 ++-- test/babashka/cli_test.cljc | 22 +++++++++++++++++++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/babashka/cli.cljc b/src/babashka/cli.cljc index a6d2471..0a36b5b 100644 --- a/src/babashka/cli.cljc +++ b/src/babashka/cli.cljc @@ -597,8 +597,8 @@ ;; " r3c3 l3"] ) -(defn opts->table [{:keys [spec order]}] - (let [columns (set (mapcat (fn [[_ s]] (keys s)) spec))] +(defn opts->table [{:keys [spec order columns]}] + (let [columns (set (or columns (mapcat (fn [[_ s]] (keys s)) spec)))] (mapv (fn [[long-opt {:keys [alias default default-desc ref desc]}]] (keep identity [(when (:alias columns) diff --git a/test/babashka/cli_test.cljc b/test/babashka/cli_test.cljc index 9cca8d3..56dceb1 100644 --- a/test/babashka/cli_test.cljc +++ b/test/babashka/cli_test.cljc @@ -503,7 +503,27 @@ :desc "Thingy"} :bar {:alias :b, :default "sure", :ref "" :desc "Barbarbar" :default-desc "Mos def"}}})) - :indent 2}))))) + :indent 2})))) + (testing "custom columns exclusion" + (is (= '[("--foo" "" "yupyupyupyup" "Thingy") ("--bar" "" "Mos def" "Barbarbar")] + (cli/opts->table + {:spec {:foo {:alias :f, :default "yupyupyupyup", :ref "" + :desc "Thingy"} + :bar {:alias :b, :default "sure", :ref "" + :desc "Barbarbar" :default-desc "Mos def"}} + ;; No alias column. + :columns [:default :ref :desc]})))) + (testing "custom columns forced inclusion" + (is (= '[("--foo" "" "yupyupyupyup" "Thingy") ("--bar" "" "Mos def" "Barbarbar")] + (cli/opts->table + {:spec {:foo {:alias :f, :default "yupyupyupyup" + :desc "Thingy"} + :bar {:alias :b, :default "sure" + :desc "Barbarbar" :default-desc "Mos def"}} + ;; Include ref column, although not present in spec. + :columns [:default :ref :desc]}))))) + + (deftest format-table-test (let [contains-row-matching (fn [re table]