Implement the of macro
This commit is contained in:
parent
1865feb7d6
commit
e1ab140a6e
@ -139,6 +139,20 @@ the second form, the second result is inserted into the third form, and so on."
|
|||||||
ret)
|
ret)
|
||||||
|
|
||||||
|
|
||||||
|
(defmacro of [base &rest args]
|
||||||
|
"Shorthand for indexing for type annotations.
|
||||||
|
|
||||||
|
If only one arguments are given, this expands to just that argument. If two arguments are
|
||||||
|
given, it expands to indexing the first argument via the second. Otherwise, the first argument
|
||||||
|
is indexed using a tuple of the rest.
|
||||||
|
|
||||||
|
E.g. `(of List int)` -> `List[int]`, `(of Dict str str)` -> `Dict[str, str]`."
|
||||||
|
(if
|
||||||
|
(empty? args) base
|
||||||
|
(= (len args) 1) `(get ~base ~@args)
|
||||||
|
`(get ~base (, ~@args))))
|
||||||
|
|
||||||
|
|
||||||
(defmacro if-not [test not-branch &optional yes-branch]
|
(defmacro if-not [test not-branch &optional yes-branch]
|
||||||
"Like `if`, but execute the first branch when the test fails"
|
"Like `if`, but execute the first branch when the test fails"
|
||||||
`(if* (not ~test) ~not-branch ~yes-branch))
|
`(if* (not ~test) ~not-branch ~yes-branch))
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
;; conftest.py skips this file when running on Python <3.6.
|
;; conftest.py skips this file when running on Python <3.6.
|
||||||
|
|
||||||
(import [asyncio [get-event-loop sleep]])
|
(import [asyncio [get-event-loop sleep]])
|
||||||
(import [typing [get-type-hints]])
|
(import [typing [get-type-hints List Dict]])
|
||||||
|
|
||||||
|
|
||||||
(defn run-coroutine [coro]
|
(defn run-coroutine [coro]
|
||||||
@ -48,6 +48,11 @@
|
|||||||
(assert (= (get annotations "x") int))
|
(assert (= (get annotations "x") int))
|
||||||
(assert (= (get annotations "z") bool)))
|
(assert (= (get annotations "z") bool)))
|
||||||
|
|
||||||
|
(defn test-of []
|
||||||
|
(assert (= (of str) str))
|
||||||
|
(assert (= (of List int) (get List int)))
|
||||||
|
(assert (= (of Dict str str) (get Dict (, str str)))))
|
||||||
|
|
||||||
(defn test-pep-487 []
|
(defn test-pep-487 []
|
||||||
(defclass QuestBase []
|
(defclass QuestBase []
|
||||||
(defn --init-subclass-- [cls swallow &kwargs kwargs]
|
(defn --init-subclass-- [cls swallow &kwargs kwargs]
|
||||||
|
Loading…
Reference in New Issue
Block a user