From 14107872651c6e389252886a28e98193e4d4ffe0 Mon Sep 17 00:00:00 2001 From: Tommi Reiman Date: Sun, 22 Nov 2020 21:26:37 +0200 Subject: [PATCH 1/9] Allow empty tuples --- src/malli/core.cljc | 2 +- test/malli/core_test.cljc | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/malli/core.cljc b/src/malli/core.cljc index 7f091d1cc..7e2286ada 100644 --- a/src/malli/core.cljc +++ b/src/malli/core.cljc @@ -668,7 +668,7 @@ (let [children (mapv #(schema % options) children) size (count children) form (-create-form :tuple properties (map -form children))] - (-check-children! :tuple properties children {:min 1}) + (-check-children! :tuple properties children {:min 0}) ^{:type ::schema} (reify Schema diff --git a/test/malli/core_test.cljc b/test/malli/core_test.cljc index bfb0bf3aa..8b2b881a3 100644 --- a/test/malli/core_test.cljc +++ b/test/malli/core_test.cljc @@ -801,9 +801,13 @@ (testing "sequence schemas" (testing "empty schemas fail" - (doseq [element [:vector :sequential :set :tuple]] + (doseq [element [:vector :sequential :set]] (is (thrown? #?(:clj Exception, :cljs js/Error) (m/schema [element]))))) + (testing "empty tuples are ok" + (is (m/validate :tuple [])) + (is (not (m/validate :tuple nil)))) + (testing "more than 1 elements fail on collections" (doseq [element [:vector :sequential :set]] (is (thrown? #?(:clj Exception, :cljs js/Error) (m/schema [element int? int?]))))) From d97021f529d22326da42544081d8699502f99ba9 Mon Sep 17 00:00:00 2001 From: Tommi Reiman Date: Mon, 23 Nov 2020 23:45:39 +0200 Subject: [PATCH 2/9] clj-kondo and initial fn-schemas --- .gitignore | 1 + src/malli/clj_kondo.cljc | 157 +++++++++++++++++++++++++++++++++ src/malli/core.cljc | 74 +++++++++++++++- src/malli/generator.cljc | 32 ++++++- test/malli/clj_kondo_test.cljc | 37 ++++++++ 5 files changed, 299 insertions(+), 2 deletions(-) create mode 100644 src/malli/clj_kondo.cljc create mode 100644 test/malli/clj_kondo_test.cljc diff --git a/.gitignore b/.gitignore index dc308a47b..9ef7e0cce 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ cljs-test-runner-out classes /demo /target +.clj-kondo \ No newline at end of file diff --git a/src/malli/clj_kondo.cljc b/src/malli/clj_kondo.cljc new file mode 100644 index 000000000..2a0dfbab8 --- /dev/null +++ b/src/malli/clj_kondo.cljc @@ -0,0 +1,157 @@ +(ns malli.clj-kondo + (:require #?(:clj [clojure.java.io :as io]) + [malli.core :as m])) + +(declare transform) + +(defmulti accept (fn [name _schema _children _options] name) :default ::default) + +(defmethod accept ::default [_ _ _ _] :any) +(defmethod accept 'any? [_ _ _ _] :any) +(defmethod accept 'some? [_ _ _ _] :any) ;;?? +(defmethod accept 'number? [_ _ _ _] :number) +(defmethod accept 'integer? [_ _ _ _] :int) +(defmethod accept 'int? [_ _ _ _] :int) +(defmethod accept 'pos-int? [_ _ _ _] :pos-int) +(defmethod accept 'neg-int? [_ _ _ _] :neg-int) +(defmethod accept 'nat-int? [_ _ _ _] :nat-int) +(defmethod accept 'float? [_ _ _ _] :double) +(defmethod accept 'double? [_ _ _ _] :double) +(defmethod accept 'pos? [_ _ _ _] :pos-int) +(defmethod accept 'neg? [_ _ _ _] :neg-int) +(defmethod accept 'boolean? [_ _ _ _] :boolean) +(defmethod accept 'string? [_ _ _ _] :string) +(defmethod accept 'ident? [_ _ _ _] :symbol) ;;?? +(defmethod accept 'simple-ident? [_ _ _ _] :symbol) ;;?? +(defmethod accept 'qualified-ident? [_ _ _ _] :symbol) ;;?? +(defmethod accept 'keyword? [_ _ _ _] :keyword) +(defmethod accept 'simple-keyword? [_ _ _ _] :keyword) +(defmethod accept 'qualified-keyword? [_ _ _ _] :keyword) +(defmethod accept 'symbol? [_ _ _ _] :symbol) +(defmethod accept 'simple-symbol? [_ _ _ _] :symbol) +(defmethod accept 'qualified-symbol? [_ _ _ _] :symbol) +(defmethod accept 'uuid? [_ _ _ _] :any) ;;?? +(defmethod accept 'uri? [_ _ _ _] :any) ;;?? +(defmethod accept 'decimal? [_ _ _ _] :double) ;;?? +(defmethod accept 'inst? [_ _ _ _] :any) ;;?? +(defmethod accept 'seqable? [_ _ _ _] :seqable) +(defmethod accept 'indexed? [_ _ _ _] :vector) ;;?? +(defmethod accept 'map? [_ _ _ _] :map) +(defmethod accept 'vector? [_ _ _ _] :vector) +(defmethod accept 'list? [_ _ _ _] :list) +(defmethod accept 'seq? [_ _ _ _] :seq) +(defmethod accept 'char? [_ _ _ _] :char) +(defmethod accept 'set? [_ _ _ _] :set) +(defmethod accept 'nil? [_ _ _ _] :nil) +(defmethod accept 'false? [_ _ _ _] :boolean) ;;?? +(defmethod accept 'true? [_ _ _ _] :boolean) ;;?? +(defmethod accept 'zero? [_ _ _ _] :int) ;;?? +#?(:clj (defmethod accept 'rational? [_ _ _ _] :double)) ;;?? +(defmethod accept 'coll? [_ _ _ _] :coll) +(defmethod accept 'empty? [_ _ _ _] :seq) ;;?? +(defmethod accept 'associative? [_ _ _ _] :associative) +(defmethod accept 'sequential? [_ _ _ _] :sequential) +(defmethod accept 'ratio? [_ _ _ _] :int) ;;?? +(defmethod accept 'bytes? [_ _ _ _] :char-sequence) ;;?? + +(defmethod accept :> [_ _ _ _] :number) ;;?? +(defmethod accept :>= [_ _ _ _] :number) ;;?? +(defmethod accept :< [_ _ _ _] :number) ;;?? +(defmethod accept :<= [_ _ _ _] :number) ;;?? +(defmethod accept := [_ _ _ _] :any) ;;?? +(defmethod accept :not= [_ _ _ _] :any) ;;?? + +(defmethod accept :and [_ _ _ _] :any) ;;?? +(defmethod accept :or [_ _ _ _] :any) ;;?? + +(defmethod accept ::m/val [_ _ children _] (first children)) +(defmethod accept :map [_ _ children _] + (let [{req true opt false} (->> children (group-by (m/-comp not :optional second))) + opt (apply array-map (mapcat (fn [[k _ s]] [k s]) opt)) + req (apply array-map (mapcat (fn [[k _ s]] [k s]) req))] + (cond-> {:op :keys}, (seq opt) (assoc :opt opt), (seq req) (assoc :req req)))) + +(defmethod accept :multi [_ _ _ _] :any) ;;?? +(defmethod accept :map-of [_ _ _ _] :map) ;;?? +(defmethod accept :vector [_ _ _ _] :vector) +(defmethod accept :sequential [_ _ _ _] :sequential) +(defmethod accept :set [_ _ _ _] :set) +(defmethod accept :enum [_ _ _ _]) +(defmethod accept :maybe [_ _ [child] _] (if (keyword? child) (keyword "nilable" (name child)) child)) +(defmethod accept :tuple [_ _ children _] children) +(defmethod accept :re [_ _ _ _] :regex) +(defmethod accept :fn [_ _ _ _] :fn) + +(defmethod accept :string [_ _ _ _] :string) +(defmethod accept :int [_ _ _ _] :int) +(defmethod accept :double [_ _ _ _] :double) + +(defmethod accept :boolean [_ _ _ _] :boolean) +(defmethod accept :keyword [_ _ _ _] :keyword) +(defmethod accept :qualified-keyword [_ _ _ _] :keyword) +(defmethod accept :symbol [_ _ _ _] :symbol) +(defmethod accept :qualified-symbol [_ _ _ _] :symbol) +(defmethod accept :uuid [_ _ _ _] :any) ;;?? + +(defmethod accept :ref [_ _ _ _] :any) ;;?? +(defmethod accept :schema [_ schema _ options] (transform (m/deref schema) options)) +(defmethod accept ::m/schema [_ schema _ options] (transform (m/deref schema) options)) + +(defmethod accept :merge [_ schema _ options] (transform (m/deref schema) options)) +(defmethod accept :union [_ schema _ options] (transform (m/deref schema) options)) +(defmethod accept :select-keys [_ schema _ options] (transform (m/deref schema) options)) + +(defn- -walk [schema _ children options] (accept (m/type schema) schema children options)) + +(defn -transform [?schema options] (m/walk ?schema -walk options)) + +;; +;; public api +;; + +(defn transform + ([?schema] + (transform ?schema nil)) + ([?schema options] + (-transform ?schema options))) + +#?(:clj + (defn save! [config] + (let [cfg-file (io/file ".clj-kondo" "configs" "malli" "config.edn")] + (io/make-parents cfg-file) + (spit cfg-file config) + config))) + +(defn from [{:keys [schema ns name]}] + (let [ns-name (-> ns str symbol) + schema (m/schema schema)] + (assert (= :or (m/type schema))) + (reduce + (fn [acc schema] + (let [[input return] (m/children schema) + args (mapv transform (m/children input)) + ret (transform return) + arity (count args)] + (conj acc {:ns ns-name + :name name + :arity arity + :args args + :ret ret}))) [] (m/children schema)))) + +(defn collect + ([] (collect nil)) + ([ns] + (let [-collect (fn [k] (or (nil? ns) (= k (symbol (str ns)))))] + (->> (for [[k vs] (m/=>schemas) :when (-collect k) [_ v] vs v (from v)] v))))) + +(defn linter-config [xs] + (reduce + (fn [acc {:keys [ns name arity args ret]}] + (assoc-in + acc [:linters :type-mismatch :namespaces (symbol (str ns)) name :arities arity] + {:args args, :ret ret})) + {:lint-as {'malli.schema/defn 'schema.core/defn}} xs)) + +(defn emit! [] + (-> (collect) (linter-config) (save!)) + nil) diff --git a/src/malli/core.cljc b/src/malli/core.cljc index 7e2286ada..61b69303c 100644 --- a/src/malli/core.cljc +++ b/src/malli/core.cljc @@ -32,6 +32,11 @@ (defprotocol MapSchema (-entries [this] "returns sequence of `key -val-schema` MapEntries")) +(defprotocol FunctionSchema + (-arity [this]) + (-input-schema [this]) + (-output-schema [this])) + (defprotocol LensSchema (-keep [this] "returns truthy if schema contributes to value path") (-get [this key default] "returns schema at key") @@ -81,7 +86,9 @@ ([type] (-fail! type nil)) ([type data] - (throw (ex-info (str type " " (pr-str data)) {:type type, :data data})))) + (-fail! type nil data)) + ([type message data] + (throw (ex-info (str type " " (pr-str data) message) {:type type, :data data})))) (defn -check-children! [type properties children {:keys [min max] :as opts}] (if (or (and min (< (count children) min)) (and max (> (count children) max))) @@ -1016,6 +1023,42 @@ (-ref [_] id) (-deref [_] child))))))) +(defn -function-schema [] + ^{:type ::into-schema} + (reify IntoSchema + (-into-schema [_ properties children {::keys [=>validator] :as options}] + (-check-children! :=> properties children {:min 2, :max 2}) + (let [[input output :as children] (map #(schema % options) children) + form (-create-form :=> properties (map -form children))] + (when-not (= :tuple (-type input)) + (-fail! ::invalid-input-schema {:input input})) + ^{:type ::schema} + (reify + Schema + (-type [_] :=>) + (-type-properties [_]) + (-validator [this] + (if-let [validator (if =>validator (=>validator this options))] + (fn [x] (and (ifn? x) (validator x))) ifn?)) + (-explainer [_ _] (-fail! ::not-implemented)) + (-transformer [this transformer method options] + (-fail! ::not-implemented)) + (-walk [this walker path options] + (-fail! ::not-implemented)) + (-properties [_] properties) + (-options [_] options) + (-children [_] children) + (-parent [_] (-function-schema)) + (-form [_] form) + FunctionSchema + (-arity [_] (count (-children input))) + (-input-schema [_] input) + (-output-schema [_] output) + LensSchema + (-keep [_]) + (-get [_ key default] (get children key default)) + (-set [this key value] (-set-assoc-children this key value))))))) + ;; ;; public api ;; @@ -1308,6 +1351,7 @@ :re (-re-schema false) :fn (-fn-schema) :ref (-ref-schema) + :=> (-function-schema) :schema (-schema-schema nil) ::schema (-schema-schema {:raw true})}) @@ -1318,3 +1362,31 @@ (mr/registry (cond (identical? mr/type "default") (default-schemas) (identical? mr/type "custom") (mr/custom-default-registry) :else (-fail! ::invalid-registry.type {:type mr/type})))) + +;; +;; function schemas +;; + +(def ^:private -=>schemas* (atom {})) +(defn =>schemas [] @-=>schemas*) + +(defn =>schema + ([?schema] + (=>schema ?schema nil)) + ([?schema options] + (let [s (schema ?schema options)] + (condp = (type s) + :=> s + :or (let [arity->=> (group-by -arity (children s))] + (when-not (= (count (children s)) (count arity->=>)) + (-fail! ::overlapping-arities {:arities arity->=>})) s) + (-fail! :invalid-=>schema {:type (type s), :schema s}))))) + +(defmacro => [name value] + (let [name' `'~(symbol (str name))] + `(let [ns# (symbol (str *ns*))] + (swap! @#'-=>schemas* assoc-in [ns# ~name'] + {:schema (=>schema ~value) + :meta ~(meta name) + :ns ns# + :name ~name'})))) diff --git a/src/malli/generator.cljc b/src/malli/generator.cljc index f833a9f9f..ff71da3a2 100644 --- a/src/malli/generator.cljc +++ b/src/malli/generator.cljc @@ -2,12 +2,14 @@ (:require [clojure.test.check.generators :as gen] [borkdude.dynaload :as dynaload] [clojure.string :as str] + [clojure.test.check :as check] [clojure.test.check.random :as random] + [clojure.test.check.properties :as prop] [clojure.test.check.rose-tree :as rose] [clojure.spec.gen.alpha :as ga] [malli.core :as m])) -(declare generator -create) +(declare generator generate -create) (defprotocol Generator (-generator [this options] "returns generator for schema")) @@ -99,6 +101,18 @@ (string-from-regex (re-pattern (str/replace (str re) #"^\^?(.*?)(\$?)$" "$1")))) (m/-fail! :test-chuck-not-available)))) +(defn -=>gen [schema options] + (let [input-schema (m/-input-schema schema) + validate-input (m/validator input-schema) + output-schema (m/-output-schema schema) + output-generator (generator output-schema options)] + (gen/return + (fn [& args] + (let [args (vec args)] + (when-not (validate-input args) + (m/-fail! ::invalid-input {:schema input-schema, :args args})) + (generate output-generator options)))))) + ;; ;; generators ;; @@ -143,6 +157,7 @@ (defmethod -schema-generator :qualified-symbol [_ _] (gen/such-that qualified-symbol? gen/symbol-ns)) (defmethod -schema-generator :uuid [_ _] gen/uuid) +(defmethod -schema-generator :=> [schema options] (-=>gen schema options)) (defmethod -schema-generator :ref [schema options] (generator (m/deref schema) options)) (defmethod -schema-generator :schema [schema options] (generator (m/deref schema) options)) (defmethod -schema-generator ::m/schema [schema options] (generator (m/deref schema) options)) @@ -187,3 +202,18 @@ (map #(rose/root (gen/call-gen gen %1 %2)) (gen/lazy-random-states (-random seed))) (take size))))) + +;; +;; functions +;; + +(defn =>validator [schema {::keys [=>iterations] :or {=>iterations 100} :as options}] + (let [input-schema (m/-input-schema schema) + output-schema (m/-output-schema schema) + input-generator (generator input-schema options) + input-validator (m/validator input-schema) + output-validator (m/validator output-schema options) + validate (fn [f args] (and (input-validator args) (output-validator (apply f args))))] + (fn [f] (not (some->> (prop/for-all* [input-generator] #(validate f %)) + (check/quick-check =>iterations) :shrunk :smallest first))))) + diff --git a/test/malli/clj_kondo_test.cljc b/test/malli/clj_kondo_test.cljc new file mode 100644 index 000000000..694ca55fb --- /dev/null +++ b/test/malli/clj_kondo_test.cljc @@ -0,0 +1,37 @@ +(ns malli.clj-kondo-test + (:require [clojure.test :refer [deftest is]] + [malli.clj-kondo :as clj-kondo] + [malli.core :as m] + [malli.util :as mu])) + +(def Schema + (m/schema + [:map {:registry {::id string? + ::price double?}} + ::id + [::price {:optional true}] + [:name string?] + [:description [:maybe string?]] + [:tags {:optional true} [:set qualified-keyword?]] + [::y {:optional true} boolean?] + [:select-keys [:maybe [:select-keys [:map [:x int?] [:y int?]] [:x]]]] + [:nested [:merge + [:map [:id ::id]] + [:map [:price ::price]]]] + [:z [:vector [:map-of int? int?]]]] + {:registry (merge (m/default-schemas) (mu/schemas))})) + +(deftest clj-kondo-integration-test + (is (= {:op :keys, + :opt {::price :double, :tags :set, ::y :boolean}, + :req {::id :string, + :name :string, + :description :nilable/string, + :select-keys {:op :keys, :req {:x :int}}, + :nested {:op :keys, :req {:id :string, :price :double}}, + :z :vector}} + (clj-kondo/transform Schema)))) + +(deftest clj-kondo-linter-config-test + ) + From 1168767b7706d3555750c863cff77cc4eccdbcfe Mon Sep 17 00:00:00 2001 From: Tommi Reiman Date: Sat, 28 Nov 2020 12:17:45 +0200 Subject: [PATCH 3/9] add missing stuff for :=> --- src/malli/core.cljc | 11 +++++++---- src/malli/error.cljc | 1 + test/malli/core_test.cljc | 33 ++++++++++++++++++++++++++++++++ test/malli/error_test.cljc | 13 ++++++++++++- test/malli/generator_test.cljc | 6 ++++++ test/malli/json_schema_test.cljc | 1 + 6 files changed, 60 insertions(+), 5 deletions(-) diff --git a/src/malli/core.cljc b/src/malli/core.cljc index 61b69303c..8e6361c50 100644 --- a/src/malli/core.cljc +++ b/src/malli/core.cljc @@ -1040,11 +1040,14 @@ (-validator [this] (if-let [validator (if =>validator (=>validator this options))] (fn [x] (and (ifn? x) (validator x))) ifn?)) - (-explainer [_ _] (-fail! ::not-implemented)) - (-transformer [this transformer method options] - (-fail! ::not-implemented)) + (-explainer [this path] + (let [validator (-validator this)] + (fn explain [x in acc] + (if-not (validator x) (conj acc (-error path in this x)) acc)))) + (-transformer [_ _ _ _]) (-walk [this walker path options] - (-fail! ::not-implemented)) + (if (-accept walker this path options) + (-outer walker this path (-inner-indexed walker path children options) options))) (-properties [_] properties) (-options [_] options) (-children [_] children) diff --git a/src/malli/error.cljc b/src/malli/error.cljc index 24b64c254..c0971b592 100644 --- a/src/malli/error.cljc +++ b/src/malli/error.cljc @@ -59,6 +59,7 @@ #?@(:clj ['ratio? {:error/message {:en "should be a ratio"}}]) #?@(:clj ['bytes? {:error/message {:en "should be bytes"}}]) :re {:error/message {:en "should match regex"}} + :=> {:error/message {:en "invalid function"}} :enum {:error/fn {:en (fn [{:keys [schema]} _] (str "should be " (if (= 1 (count (m/children schema))) diff --git a/test/malli/core_test.cljc b/test/malli/core_test.cljc index 8b2b881a3..46a74d18c 100644 --- a/test/malli/core_test.cljc +++ b/test/malli/core_test.cljc @@ -6,6 +6,7 @@ [malli.util :as mu] [malli.registry :as mr] [clojure.walk :as walk] + [malli.generator :as mg] [clojure.test.check.generators :as gen])) (defn with-schema-forms [result] @@ -1467,3 +1468,35 @@ (m/type-properties schema))) (is (= {:value 42} (m/properties schema))))))))) + +(deftest function-schema-test + (let [f-fail (fn [x] x) + f-ok (fn [x y] (+ x y)) + => [:=> [:tuple int? int?] int?]] + + (testing "by default, all ifn? are valid" + (is (true? (m/validate => identity))) + (is (true? (m/validate => #{})))) + + (testing "using generative testing" + (is (false? (m/validate => identity {::m/=>validator mg/=>validator}))) + (is (false? (m/validate => #{} {::m/=>validator mg/=>validator}))) + (is (true? (m/validate => f-ok {::m/=>validator mg/=>validator}))) + (is (false? (m/validate => (fn [x y] (str x y)) {::m/=>validator mg/=>validator}))) + (is (false? (m/validate => (fn [x] x) {::m/=>validator mg/=>validator})))) + + (is (nil? (m/explain => (fn [x y] (+ x y)) {::m/=>validator mg/=>validator}))) + (is (results= {:schema [:=> [:tuple int? int?] int?] + :value f-fail + :errors [{:path [] + :in [] + :schema [:=> [:tuple int? int?] int?] + :value f-fail}]} + (m/explain => f-fail {::m/=>validator mg/=>validator}))) + + (is (= f-fail (m/decode => f-fail mt/string-transformer))) + + (is (true? (m/validate (over-the-wire =>) f-ok))) + + (is (= {:type :=>, :children [{:type :tuple, :children [{:type 'int?} {:type 'int?}]} {:type 'int?}]} + (mu/to-map-syntax =>))))) diff --git a/test/malli/error_test.cljc b/test/malli/error_test.cljc index 92d9198aa..087de8416 100644 --- a/test/malli/error_test.cljc +++ b/test/malli/error_test.cljc @@ -3,7 +3,8 @@ [malli.core-test] [malli.error :as me] [malli.core :as m] - [malli.util :as mu])) + [malli.util :as mu] + [malli.generator :as mg])) (deftest error-message-test (let [msg "should be an int" @@ -370,6 +371,16 @@ (m/explain "baz") (me/humanize)))))) +(deftest function-test + (is (= ["invalid function"] + (-> [:=> [:tuple int? int?] int?] + (m/explain (fn [x] x) {::m/=>validator mg/=>validator}) + (me/humanize)))) + (is (= ["invalid function"] + (-> [:=> [:tuple int? int?] int?] + (m/explain 123) + (me/humanize))))) + (deftest multi-error-test (let [schema [:multi {:dispatch :type} ["plus" [:map [:value int?]]] diff --git a/test/malli/generator_test.cljc b/test/malli/generator_test.cljc index be1fe4487..f2cf91428 100644 --- a/test/malli/generator_test.cljc +++ b/test/malli/generator_test.cljc @@ -177,3 +177,9 @@ [:x]]] :let [schema (m/schema schema {:registry registry})]] (is (every? (partial m/validate schema) (mg/sample schema {:size 1000})))))) + +(deftest function-schema-test + (let [=> (m/schema [:=> [:tuple int? int?] int?]) + input (m/-input-schema =>) + output (m/-output-schema =>)] + (is (every? #(m/validate output (apply % (mg/generate input))) (mg/sample => {:size 1000}))))) diff --git a/test/malli/json_schema_test.cljc b/test/malli/json_schema_test.cljc index d769fadd9..0ceaa1a5d 100644 --- a/test/malli/json_schema_test.cljc +++ b/test/malli/json_schema_test.cljc @@ -56,6 +56,7 @@ :items [{:type "string"} {:type "string"}] :additionalItems false}] [[:re "^[a-z]+\\.[a-z]+$"] {:type "string", :pattern "^[a-z]+\\.[a-z]+$"}] + [[:=> [:tuple int? int?] int?]] {} [[:string {:min 1, :max 4}] {:type "string", :minLength 1, :maxLength 4}] [[:int {:min 1, :max 4}] {:type "integer", :minimum 1, :maximum 4}] [[:double {:min 1, :max 4}] {:type "number", :minimum 1, :maximum 4}] From 9f44bfa7bd2e4a64328399d050f6754401c306b5 Mon Sep 17 00:00:00 2001 From: Tommi Reiman Date: Sun, 29 Nov 2020 16:47:11 +0200 Subject: [PATCH 4/9] tests & docs --- README.md | 146 +++++++++++++++++++++++++++++++ docs/img/clj-kondo.png | Bin 0 -> 202983 bytes src/malli/clj_kondo.cljc | 3 +- src/malli/generator.cljc | 12 +-- test/malli/json_schema_test.cljc | 4 +- 5 files changed, 157 insertions(+), 8 deletions(-) create mode 100644 docs/img/clj-kondo.png diff --git a/README.md b/README.md index 7d6610df4..36b63bfc3 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ Data-driven Schemas for Clojure/Script. - Immutable, Mutable, Dynamic, Lazy and Local [Schema Registries](#schema-registry) - [Schema Transformations](#schema-Transformation) to [JSON Schema](#json-schema) and [Swagger2](#swagger2) - [Multi-schemas](#multi-schemas), [Recursive Schemas](#recursive-schemas) and [Default values](#default-values) +- [Function Schemas](#function-schemas) with [clj-kondo](#clj-kondo) support - [Visualizing Schemas](#visualizing-schemas) with DOT - [Fast](#performance) @@ -1612,6 +1613,151 @@ Registries can be composed: ; => true ``` +## Function Schemas + +Functions can be described with `:=>`, taking function arguments as first child (defined as `:tuple`) and output schemas as second. + +```clj +;; plain clojure +(defn plus [x y] (+ x y)) + +;; function schema for plus +(def =>plus [:=> [:tuple int? int?] int?]) +``` + +By default, validation just checks if a valu ia `ifn?`: + +```clj +(m/validate =>plus plus) +; => true + +(m/validate =>plus str) +; => true (despite invalid) +``` + +We can use `malli.generator` for factual validation: + +```clj +(m/validate =>plus plus {::m/=>validator mg/=>validator}) +; => true + +(m/validate =>plus str {::m/=>validator mg/=>validator}) +; => false +``` + +A generated implementation: + +```clj +(def plus-gen (mg/generate =>plus)) + +(plus-gen 1 2) +; => -1 + +(plus-gen 1 "2") +; =throws=> :malli.generator/invalid-input {:schema [:tuple int? int?], :args [1 "2"]} +``` + +Multipla arities are WIP, currently defined using `:or`: + +```clj +(m/validate + [:or + [:=> [:tuple pos-int?] pos-int?] + [:=> [:tuple int? int?] int?]] + (fn math + ([x] (+ x x)) + ([x y] (+ x y))) + {::m/=>validator mg/=>validator}) +; => true +``` + +Problem with `:or` - the generates fn from just one (random) branch: + +```cl +(def f (mg/generate + [:or + [:=> [:tuple int?] pos-int?] + [:=> [:tuple int? int?] int?]])) + +(-> f meta :arity) +; => 1 + +(f 42) +; => 2 + +(f 42 42) +; =thrown=> :malli.generator/invalid-input {:schema [:tuple int?], :args [42 42]} +``` + +## Function Schema Registry + +Vars can be annotated with function schemas using `m/=>` macro, backed by a global registry: + +```clj +(defn square [x] (* x x)) + +(m/=> square [:=> [:tuple int?] pos-int?]) +``` + +Listing registered function Var schemas: + +```clj +(m/=>schemas) +;{user +; {square +; {:schema [:=> [:tuple int?] pos-int?] +; :meta nil +; :ns malli.generator-test +; :name square}}} +``` + +## Clj-kondo + +[Clj-kondo](https://github.com/borkdude/clj-kondo) is a linter for Clojure code that sparks joy. + +Given functions and function Schemas: + +```clj +(defn square [x] (* x x)) +(m/=> square [:=> [:tuple int?] nat-int?]) + +(defn plus + ([x] x) + ([x y] (+ x y))) + +(m/=> plus [:or + [:=> [:tuple int?] int?] + [:=> [:tuple int? int?] int?]]) +``` + +Generating `clj-kondo` configuration from current namespace: + +```clj +(require '[malli.clj-kondo :as mc]) + +(-> (mc/collect *ns*) (mc/linter-config)) +;{:lint-as #:malli.schema{defn schema.core/defn}, +; :linters +; {:type-mismatch +; {:namespaces +; {user {square {:arities {1 {:args [:int] +; :ret :pos-int}}} +; plus {:arities {1 {:args [:int] +; :ret :int}, +; 2 {:args [:int :int] +; :ret :int}}}}}}}} +``` + +Emitting confing into `./.clj-kondo/configs/malli/config.edn`: + +```clj +(mc/emit!) +``` + +In action: + +![malli](docs/img/clj-kondo.png) + ## Visualizing Schemas Transforming Schemas into [DOT Language](https://en.wikipedia.org/wiki/DOT_(graph_description_language)): diff --git a/docs/img/clj-kondo.png b/docs/img/clj-kondo.png new file mode 100644 index 0000000000000000000000000000000000000000..98681ae89c4686a6a4002dd984fb7bdcf63c25d3 GIT binary patch literal 202983 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 eO|y+)cT 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 c_ly6c9 ns str symbol) - schema (m/schema schema)] - (assert (= :or (m/type schema))) + schema (if (= :or (m/type schema)) schema (m/into-schema :or nil [schema] (m/options schema)))] (reduce (fn [acc schema] (let [[input return] (m/children schema) diff --git a/src/malli/generator.cljc b/src/malli/generator.cljc index ff71da3a2..a47d2e50e 100644 --- a/src/malli/generator.cljc +++ b/src/malli/generator.cljc @@ -107,11 +107,13 @@ output-schema (m/-output-schema schema) output-generator (generator output-schema options)] (gen/return - (fn [& args] - (let [args (vec args)] - (when-not (validate-input args) - (m/-fail! ::invalid-input {:schema input-schema, :args args})) - (generate output-generator options)))))) + (with-meta + (fn [& args] + (let [args (vec args)] + (when-not (validate-input args) + (m/-fail! ::invalid-input {:schema input-schema, :args args})) + (generate output-generator options))) + {:arity (-> schema m/-input-schema m/children count)})))) ;; ;; generators diff --git a/test/malli/json_schema_test.cljc b/test/malli/json_schema_test.cljc index 0ceaa1a5d..815fa8e6d 100644 --- a/test/malli/json_schema_test.cljc +++ b/test/malli/json_schema_test.cljc @@ -56,7 +56,6 @@ :items [{:type "string"} {:type "string"}] :additionalItems false}] [[:re "^[a-z]+\\.[a-z]+$"] {:type "string", :pattern "^[a-z]+\\.[a-z]+$"}] - [[:=> [:tuple int? int?] int?]] {} [[:string {:min 1, :max 4}] {:type "string", :minLength 1, :maxLength 4}] [[:int {:min 1, :max 4}] {:type "integer", :minimum 1, :maximum 4}] [[:double {:min 1, :max 4}] {:type "number", :minimum 1, :maximum 4}] @@ -222,3 +221,6 @@ [:zip int?] [:country "Country"]]]]]]}} "Order"])))) + +(deftest function-schema-test + (is (= {} (json-schema/transform [:=> [:tuple int? int?] int?])))) From ad4ab69d79e31aee3ae6305edac807b127c02439 Mon Sep 17 00:00:00 2001 From: Tommi Reiman Date: Sun, 29 Nov 2020 16:47:33 +0200 Subject: [PATCH 5/9] function arity test --- test/malli/generator_test.cljc | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/test/malli/generator_test.cljc b/test/malli/generator_test.cljc index f2cf91428..fdb63b053 100644 --- a/test/malli/generator_test.cljc +++ b/test/malli/generator_test.cljc @@ -179,7 +179,13 @@ (is (every? (partial m/validate schema) (mg/sample schema {:size 1000})))))) (deftest function-schema-test - (let [=> (m/schema [:=> [:tuple int? int?] int?]) - input (m/-input-schema =>) - output (m/-output-schema =>)] - (is (every? #(m/validate output (apply % (mg/generate input))) (mg/sample => {:size 1000}))))) + (testing "generates valid functions" + + (let [=> (m/schema [:=> [:tuple int? int?] int?]) + input (m/-input-schema =>) + output (m/-output-schema =>)] + (is (every? #(m/validate output (apply % (mg/generate input))) (mg/sample => {:size 1000}))))) + + (testing "arity meta" + (let [=> [:or [:=> [:tuple int?] int?] [:=> [:tuple int? int? int?] int?]]] + (is (every? (comp #{1 3} :arity meta) (mg/sample => {:size 1000})))))) From 4a2f23944f5692ad8331f1c10c0d72fff073abcf Mon Sep 17 00:00:00 2001 From: Tommi Reiman Date: Sun, 29 Nov 2020 16:49:28 +0200 Subject: [PATCH 6/9] fix README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 36b63bfc3..1b8c095ad 100644 --- a/README.md +++ b/README.md @@ -178,7 +178,7 @@ Using `:string` Schema: ; => false ``` -## Function schemas +## Fn schemas `:fn` allows any predicate function to be used: From 2792ffb9c94379e218ab18425ead10e7cb9522d7 Mon Sep 17 00:00:00 2001 From: Tommi Reiman Date: Sun, 29 Nov 2020 16:55:51 +0200 Subject: [PATCH 7/9] fix tests, better README --- README.md | 25 +++++++++++-------------- test/malli/clj_kondo_test.cljc | 4 ---- 2 files changed, 11 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 1b8c095ad..ceff16566 100644 --- a/README.md +++ b/README.md @@ -1615,27 +1615,25 @@ Registries can be composed: ## Function Schemas -Functions can be described with `:=>`, taking function arguments as first child (defined as `:tuple`) and output schemas as second. +Functions can be described with `:=>`, which takes function arguments (as `:tuple`) and output schemas as children. ```clj -;; plain clojure (defn plus [x y] (+ x y)) -;; function schema for plus (def =>plus [:=> [:tuple int? int?] int?]) + +(m/validate =>plus plus) +; => true ``` By default, validation just checks if a valu ia `ifn?`: ```clj -(m/validate =>plus plus) -; => true - (m/validate =>plus str) -; => true (despite invalid) +; => true :( ``` -We can use `malli.generator` for factual validation: +We can use value generation for more comprehensive testing: ```clj (m/validate =>plus plus {::m/=>validator mg/=>validator}) @@ -1645,7 +1643,7 @@ We can use `malli.generator` for factual validation: ; => false ``` -A generated implementation: +A generated function implementation: ```clj (def plus-gen (mg/generate =>plus)) @@ -1657,7 +1655,7 @@ A generated implementation: ; =throws=> :malli.generator/invalid-input {:schema [:tuple int? int?], :args [1 "2"]} ``` -Multipla arities are WIP, currently defined using `:or`: +Multiple arities are WIP, currently defined using `:or`: ```clj (m/validate @@ -1669,16 +1667,13 @@ Multipla arities are WIP, currently defined using `:or`: ([x y] (+ x y))) {::m/=>validator mg/=>validator}) ; => true -``` -Problem with `:or` - the generates fn from just one (random) branch: - -```cl (def f (mg/generate [:or [:=> [:tuple int?] pos-int?] [:=> [:tuple int? int?] int?]])) +;; fixes the arity, which is not correct (-> f meta :arity) ; => 1 @@ -1689,6 +1684,8 @@ Problem with `:or` - the generates fn from just one (random) branch: ; =thrown=> :malli.generator/invalid-input {:schema [:tuple int?], :args [42 42]} ``` +Varargs are WIP too (waiting for #180). + ## Function Schema Registry Vars can be annotated with function schemas using `m/=>` macro, backed by a global registry: diff --git a/test/malli/clj_kondo_test.cljc b/test/malli/clj_kondo_test.cljc index 694ca55fb..7a2b7d268 100644 --- a/test/malli/clj_kondo_test.cljc +++ b/test/malli/clj_kondo_test.cljc @@ -31,7 +31,3 @@ :nested {:op :keys, :req {:id :string, :price :double}}, :z :vector}} (clj-kondo/transform Schema)))) - -(deftest clj-kondo-linter-config-test - ) - From 5ca7bb3867dbdd06171b648559bfd6fa29f0d0be Mon Sep 17 00:00:00 2001 From: Tommi Reiman Date: Sun, 29 Nov 2020 17:16:00 +0200 Subject: [PATCH 8/9] fix tests for cljs * no arity errors --- src/malli/clj_kondo.cljc | 5 ++--- src/malli/generator.cljc | 2 +- test/malli/core_test.cljc | 24 ++++++++++++++---------- test/malli/error_test.cljc | 2 +- test/malli/generator_test.cljc | 25 ++++++++++++++----------- 5 files changed, 32 insertions(+), 26 deletions(-) diff --git a/src/malli/clj_kondo.cljc b/src/malli/clj_kondo.cljc index 068b05771..d9fa10e6a 100644 --- a/src/malli/clj_kondo.cljc +++ b/src/malli/clj_kondo.cljc @@ -151,6 +151,5 @@ {:args args, :ret ret})) {:lint-as {'malli.schema/defn 'schema.core/defn}} xs)) -(defn emit! [] - (-> (collect) (linter-config) (save!)) - nil) +#?(:clj + (defn emit! [] (-> (collect) (linter-config) (save!)) nil)) diff --git a/src/malli/generator.cljc b/src/malli/generator.cljc index a47d2e50e..2cb5ea078 100644 --- a/src/malli/generator.cljc +++ b/src/malli/generator.cljc @@ -113,7 +113,7 @@ (when-not (validate-input args) (m/-fail! ::invalid-input {:schema input-schema, :args args})) (generate output-generator options))) - {:arity (-> schema m/-input-schema m/children count)})))) + {:arity (-> schema m/-arity)})))) ;; ;; generators diff --git a/test/malli/core_test.cljc b/test/malli/core_test.cljc index 46a74d18c..56a5c1f49 100644 --- a/test/malli/core_test.cljc +++ b/test/malli/core_test.cljc @@ -1469,9 +1469,12 @@ (is (= {:value 42} (m/properties schema))))))))) +(defn single-arity + ([x] x) + ([_ _] (m/-fail! ::arity-error))) + (deftest function-schema-test - (let [f-fail (fn [x] x) - f-ok (fn [x y] (+ x y)) + (let [f-ok (fn [x y] (+ x y)) => [:=> [:tuple int? int?] int?]] (testing "by default, all ifn? are valid" @@ -1479,22 +1482,23 @@ (is (true? (m/validate => #{})))) (testing "using generative testing" - (is (false? (m/validate => identity {::m/=>validator mg/=>validator}))) - (is (false? (m/validate => #{} {::m/=>validator mg/=>validator}))) + (is (false? (m/validate => single-arity {::m/=>validator mg/=>validator}))) + ;; js allows invalid arity + #?(:clj (is (false? (m/validate => (fn [x] x) {::m/=>validator mg/=>validator})))) + #?(:clj (is (false? (m/validate => #{} {::m/=>validator mg/=>validator})))) (is (true? (m/validate => f-ok {::m/=>validator mg/=>validator}))) - (is (false? (m/validate => (fn [x y] (str x y)) {::m/=>validator mg/=>validator}))) - (is (false? (m/validate => (fn [x] x) {::m/=>validator mg/=>validator})))) + (is (false? (m/validate => (fn [x y] (str x y)) {::m/=>validator mg/=>validator})))) (is (nil? (m/explain => (fn [x y] (+ x y)) {::m/=>validator mg/=>validator}))) (is (results= {:schema [:=> [:tuple int? int?] int?] - :value f-fail + :value single-arity :errors [{:path [] :in [] :schema [:=> [:tuple int? int?] int?] - :value f-fail}]} - (m/explain => f-fail {::m/=>validator mg/=>validator}))) + :value single-arity}]} + (m/explain => single-arity {::m/=>validator mg/=>validator}))) - (is (= f-fail (m/decode => f-fail mt/string-transformer))) + (is (= single-arity (m/decode => single-arity mt/string-transformer))) (is (true? (m/validate (over-the-wire =>) f-ok))) diff --git a/test/malli/error_test.cljc b/test/malli/error_test.cljc index 087de8416..7188f76d6 100644 --- a/test/malli/error_test.cljc +++ b/test/malli/error_test.cljc @@ -374,7 +374,7 @@ (deftest function-test (is (= ["invalid function"] (-> [:=> [:tuple int? int?] int?] - (m/explain (fn [x] x) {::m/=>validator mg/=>validator}) + (m/explain malli.core-test/single-arity {::m/=>validator mg/=>validator}) (me/humanize)))) (is (= ["invalid function"] (-> [:=> [:tuple int? int?] int?] diff --git a/test/malli/generator_test.cljc b/test/malli/generator_test.cljc index fdb63b053..c2af82307 100644 --- a/test/malli/generator_test.cljc +++ b/test/malli/generator_test.cljc @@ -178,14 +178,17 @@ :let [schema (m/schema schema {:registry registry})]] (is (every? (partial m/validate schema) (mg/sample schema {:size 1000})))))) -(deftest function-schema-test - (testing "generates valid functions" - - (let [=> (m/schema [:=> [:tuple int? int?] int?]) - input (m/-input-schema =>) - output (m/-output-schema =>)] - (is (every? #(m/validate output (apply % (mg/generate input))) (mg/sample => {:size 1000}))))) - - (testing "arity meta" - (let [=> [:or [:=> [:tuple int?] int?] [:=> [:tuple int? int? int?] int?]]] - (is (every? (comp #{1 3} :arity meta) (mg/sample => {:size 1000})))))) +#?(:clj + (deftest function-schema-test + (testing "generates valid functions" + + (let [=> (m/schema [:=> [:tuple int? int?] int?]) + input (m/-input-schema =>) + output (m/-output-schema =>)] + (is (every? #(m/validate output (apply % (mg/generate input))) (mg/sample => {:size 1000}))))) + + (testing "arity meta" + (let [=> [:or + [:=> [:tuple int?] int?] + [:=> [:tuple int? int? int?] int?]]] + (is (every? (comp #{1 3} :arity meta) (mg/sample => {:size 1000}))))))) From ffe7aa63c3d58e831acbd78c993ea9460e455650 Mon Sep 17 00:00:00 2001 From: Tommi Reiman Date: Sun, 29 Nov 2020 17:30:45 +0200 Subject: [PATCH 9/9] document WIP --- README.md | 2 ++ src/malli/core.cljc | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ceff16566..6078923cf 100644 --- a/README.md +++ b/README.md @@ -1615,6 +1615,8 @@ Registries can be composed: ## Function Schemas +**alpha, subject to change** + Functions can be described with `:=>`, which takes function arguments (as `:tuple`) and output schemas as children. ```clj diff --git a/src/malli/core.cljc b/src/malli/core.cljc index 8e6361c50..f5ac94888 100644 --- a/src/malli/core.cljc +++ b/src/malli/core.cljc @@ -1367,7 +1367,7 @@ :else (-fail! ::invalid-registry.type {:type mr/type})))) ;; -;; function schemas +;; function schemas (alpha, subject to change) ;; (def ^:private -=>schemas* (atom {}))