mirror of
https://github.com/janet-lang/janet
synced 2024-12-26 08:20:27 +00:00
Support adding arbitrary metadata to bindings
This commit is contained in:
parent
37d6cb469b
commit
ec2d7bf349
@ -251,6 +251,9 @@ static JanetTable *handleattr(JanetCompiler *c, int32_t argn, const Janet *argv)
|
|||||||
case JANET_STRING:
|
case JANET_STRING:
|
||||||
janet_table_put(tab, janet_ckeywordv("doc"), attr);
|
janet_table_put(tab, janet_ckeywordv("doc"), attr);
|
||||||
break;
|
break;
|
||||||
|
case JANET_STRUCT:
|
||||||
|
janet_table_merge_struct(tab, janet_unwrap_struct(attr));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return tab;
|
return tab;
|
||||||
|
@ -70,5 +70,17 @@
|
|||||||
(assert (= ~(,defn 1 2 3) [defn 1 2 3]) "bracket tuples are never macros")
|
(assert (= ~(,defn 1 2 3) [defn 1 2 3]) "bracket tuples are never macros")
|
||||||
(assert (= ~(,+ 1 2 3) [+ 1 2 3]) "bracket tuples are never function calls")
|
(assert (= ~(,+ 1 2 3) [+ 1 2 3]) "bracket tuples are never function calls")
|
||||||
|
|
||||||
|
# Metadata
|
||||||
|
|
||||||
|
(def foo-with-tags :a-tag :bar)
|
||||||
|
(assert (get (dyn 'foo-with-tags) :a-tag) "extra keywords in def are metadata tags")
|
||||||
|
|
||||||
|
(def foo-with-meta {:baz :quux} :bar)
|
||||||
|
(assert (= :quux (get (dyn 'foo-with-meta) :baz)) "extra struct in def is metadata")
|
||||||
|
|
||||||
|
(defn foo-fn-with-meta {:baz :quux} "This is a function" [x] (identity x))
|
||||||
|
(assert (= :quux (get (dyn 'foo-fn-with-meta) :baz)) "extra struct in defn is metadata")
|
||||||
|
(assert (= "(foo-fn-with-meta x)\n\nThis is a function" (get (dyn 'foo-fn-with-meta) :doc)) "extra string in defn is docstring")
|
||||||
|
|
||||||
(end-suite)
|
(end-suite)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user