From 156dba1a8d6af3bb2088bfc7cec851f2afe38024 Mon Sep 17 00:00:00 2001 From: Andrey Orst Date: Wed, 20 Jan 2021 22:14:31 +0300 Subject: fix: update docs preparing to set up docstring validation --- doc/cljlib.md | 54 +++++++++++++++++------------------- doc/macros.md | 89 +++++++++++++++++++++++++---------------------------------- 2 files changed, 63 insertions(+), 80 deletions(-) (limited to 'doc') diff --git a/doc/cljlib.md b/doc/cljlib.md index 54d8294..e54bcae 100644 --- a/doc/cljlib.md +++ b/doc/cljlib.md @@ -823,6 +823,7 @@ Map [`mul`](#mul) over two tables: Basic `zipmap` implementation: ``` fennel +(import-macros {: into} :macros) (fn zipmap [keys vals] (into {} (mapv vector keys vals))) @@ -1078,17 +1079,17 @@ Ordered sets are created by passing any amount of elements desired to be in the set: ``` fennel ->> (ordered-set) -@set{} ->> (ordered-set :a :c :b) -@set{:a :c :b} +(ordered-set) +;; => @set{} +(ordered-set :a :c :b) +;; => @set{:a :c :b} ``` Duplicate items are not added: ``` fennel ->> (ordered-set :a :c :a :a :a :a :c :b) -@set{:a :c :b} +(ordered-set :a :c :a :a :a :a :c :b) +;; => @set{:a :c :b} ``` #### Check if set contains desired value: @@ -1096,34 +1097,34 @@ Sets are functions of their keys, so simply calling a set with a desired key will either return the key, or `nil`: ``` fennel ->> (local oset (ordered-set [:a :b :c] [:c :d :e] :e :f)) ->> (oset [:a :b :c]) -["a" "b" "c"] ->> (. oset :e) -"e" ->> (oset [:a :b :f]) -nil +(local oset (ordered-set [:a :b :c] [:c :d :e] :e :f)) +(oset [:a :b :c]) +;; => ["a" "b" "c"] +(. oset :e) +;; "e" +(oset [:a :b :f]) +;; => nil ``` #### Add items to existing set: To add element to the set use [`conj`](#conj) or `tset` ``` fennel ->> (local oset (ordered-set :a :b :c)) ->> (conj oset :d :e) -@set{:a :b :c :d :e} +(local oset (ordered-set :a :b :c)) +(conj oset :d :e) +;; => @set{:a :b :c :d :e} ``` ##### Remove items from the set: To add element to the set use [`disj`](#disj) or `tset` ``` fennel ->> (local oset (ordered-set :a :b :c)) ->> (disj oset :b) -@set{:a :c} ->> (tset oset :a nil) ->> oset -@set{:c} +(local oset (ordered-set :a :b :c)) +(disj oset :b) +;; => @set{:a :c} +(tset oset :a nil) +oset +;; => @set{:c} ``` #### Equality semantics @@ -1132,12 +1133,9 @@ and are compared for having the same keys without particular order and same size: ``` fennel ->> (= (ordered-set :a :b) (ordered-set :b :a)) -true ->> (= (ordered-set :a :b) (ordered-set :b :a :c)) -false ->> (= (ordered-set :a :b) (hash-set :a :b)) -true +(assert (= (ordered-set :a :b) (ordered-set :b :a))) +(assert (not= (ordered-set :a :b) (ordered-set :b :a :c))) +(assert (= (ordered-set :a :b) (hash-set :a :b))) ``` ## `hash-set` diff --git a/doc/macros.md b/doc/macros.md index e9cc517..1841b14 100644 --- a/doc/macros.md +++ b/doc/macros.md @@ -18,7 +18,6 @@ Macros for Cljlib that implement various facilities from Clojure. - [`when-let`](#when-let) - [`if-some`](#if-some) - [`when-some`](#when-some) -- [`deep-tostring`](#deep-tostring) ## `fn*` Function signature: @@ -52,7 +51,7 @@ other one or more arguments: ([] nil) ([x & xs] (print x) - (f (unpack xs)))) + (f ((or table.unpack _G.unpack) xs)))) ``` Note, that this function is recursive, and calls itself with less and @@ -126,7 +125,7 @@ namespace tables: (fn* ns.strings.join ([s1 s2] (.. s1 s2)) ([s1 s2 & strings] - (join (join s1 s2) (unpack strings)))) ;; call `join` resolves to ns.strings.join + (join (join s1 s2) ((or table.unpack _G.unpack) strings)))) ;; call `join` resolves to ns.strings.join (fn* ns.tables.join ([t1 t2] @@ -135,14 +134,8 @@ namespace tables: (each [_ v (ipairs t2)] (table.insert res v)) res)) ([t1 t2 & tables] - (join (join t1 t2) (unpack tables)))) ;; call to `join` resolves to ns.tables.join -``` + (join (join t1 t2) ((or table.unpack _G.unpack) tables)))) ;; call to `join` resolves to ns.tables.join -Note that this creates a collision and local `join` overrides `join` -from `ns.strings`, so the latter must be fully qualified -`ns.strings.join` when called outside of the function: - -``` fennel (ns.strings.join "a" "b" "c") ;; => abc (join ["a"] ["b"] ["c"] ["d" "e"]) @@ -151,6 +144,10 @@ from `ns.strings`, so the latter must be fully qualified ;; {} ``` +Note that this creates a collision and local `join` overrides `join` +from `ns.strings`, so the latter must be fully qualified +`ns.strings.join` when called outside of the function. + ## `try` Function signature: @@ -193,29 +190,30 @@ Catch all errors, ignore those and return fallback value: Catch error and do cleanup: ``` fennel ->> (let [tbl []] - (try - (table.insert tbl "a") - (table.insert tbl "b" "c") - (catch _ - (each [k _ (pairs tbl)] - (tset tbl k nil)))) - tbl) -{} +(let [tbl []] + (try + (table.insert tbl "a") + (table.insert tbl "b" "c") + (catch _ + (each [k _ (pairs tbl)] + (tset tbl k nil)))) + tbl) +;; => {} ``` Always run some side effect action: ``` fennel ->> (local res (try 10 (finally (print "side-effect!"))) -side-effect! -nil ->> rese0 ->> (local res (try (error 10) (catch 10 nil) (finally (print "side-effect!"))) -side-effect! -nil ->> res -nil +(local res (try 10 (finally (print "side-effect!")))) +;; => side-effect! +;; => nil +res +;; => 10 +(local res (try (error 10) (catch 10 nil) (finally (print "side-effect!")))) +;; => side-effect! +;; => nil +res +;; => nil ``` @@ -247,7 +245,6 @@ supported, which is `:mutable`, which allows mutating variable with ``` fennel ;; Bad, will override existing documentation for 299792458 (if any) (def {:doc "speed of light in m/s"} c 299792458) -(set c 0) ;; => error, can't mutate `c` (def :mutable address "Lua St.") ;; same as (def {:mutable true} address "Lua St.") (set address "Lisp St.") ;; can mutate `address` @@ -357,19 +354,16 @@ tables to Lua's one: (.. "{" (table.concat res ", ") "}"))) (defmethod to-lua-str :string [x] (.. "\"" x "\"")) (defmethod to-lua-str :default [x] (tostring x)) -``` - -And if we call it on some table, we'll get a valid Lua table: -``` fennel (print (to-lua-str {:a {:b 10}})) -;; prints {["a"] = {["b"] = 10}} +;; => {["a"] = {["b"] = 10}} (print (to-lua-str [:a :b :c [:d {:e :f}]])) -;; prints {[1] = "a", [2] = "b", [3] = "c", [4] = {[1] = "d", [2] = {["e"] = "f"}}} +;; => {[1] = "a", [2] = "b", [3] = "c", [4] = {[1] = "d", [2] = {["e"] = "f"}}} ``` -Which we can then reformat as we want and use in Lua if we want. +And if we call it on some table, we'll get a valid Lua table, which we +can then reformat as we want and use in Lua if we want. ## `into` Function signature: @@ -479,12 +473,12 @@ Attach metadata to a value. When metadata feature is not enabled, returns the value without additional metadata. ``` fennel ->> (local foo (with-meta (fn [...] (let [[x y z] [...]] (+ x y z))) - {:fnl/arglist ["x" "y" "z" "..."] - :fnl/docstring "sum first three values"})) ->> (doc foo) -(foo x y z ...) - sum first three values +(local foo (with-meta (fn [...] (let [[x y z] [...]] (+ x y z))) + {:fnl/arglist ["x" "y" "z" "..."] + :fnl/docstring "sum first three values"})) +;; (doc foo) +;; => (foo x y z ...) +;; => sum first three values ``` ## `meta` @@ -500,7 +494,7 @@ feature is not enabled returns `nil`. ### Example ``` fennel ->> (meta (with-meta {} {:meta "data"})) +(meta (with-meta {} {:meta "data"})) ;; => {:meta "data"} ``` @@ -567,15 +561,6 @@ Function signature: If test is non-`nil`, evaluates `body` in implicit `do`. -## `deep-tostring` -Function signature: - -``` -(deep-tostring data key?) -``` - -**Undocumented** - --- -- cgit v1.2.3