Skip to content

Commit

Permalink
add documentation macros
Browse files Browse the repository at this point in the history
  • Loading branch information
gilch committed Sep 7, 2017
1 parent 51fb807 commit f68e2fa
Show file tree
Hide file tree
Showing 4 changed files with 77 additions and 0 deletions.
1 change: 1 addition & 0 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ Changes from 0.13.0
* new `comment` macro
* support EDN `#_` syntax to discard the next term
* `return` has been implemented as a special form
* new `doc` macro and `#doc` tag macro

[ Bug Fixes ]
* Numeric literals are no longer parsed as symbols when followed by a dot
Expand Down
35 changes: 35 additions & 0 deletions docs/language/api.rst
Original file line number Diff line number Diff line change
Expand Up @@ -480,6 +480,41 @@ Some example usage:
``do`` can accept any number of arguments, from 1 to n.


doc / #doc
----------

Documentation macro and tag macro.
Gets help for macros or tag macros, respectively.

.. code-block:: clj
=> (doc doc)
Help on function (doc) in module hy.core.macros:
(doc)(symbol)
macro documentation
Gets help for a macro function available in this module.
Use ``require`` to make other macros available.
Use ``#doc foo`` instead for help with tag macro ``#foo``.
Use ``(help foo)`` instead for help with runtime objects.
=> (doc comment)
Help on function (comment) in module hy.core.macros:
(comment)(*body)
Ignores body and always expands to None
=> #doc doc
Help on function #doc in module hy.core.macros:
#doc(symbol)
tag macro documentation
Gets help for a tag macro function available in this module.
def / setv
----------

Expand Down
39 changes: 39 additions & 0 deletions hy/core/macros.hy
Original file line number Diff line number Diff line change
Expand Up @@ -227,10 +227,49 @@


(deftag @ [expr]
"with-decorator tag macro"
(setv decorators (cut expr None -1)
fndef (get expr -1))
`(with-decorator ~@decorators ~fndef))

(defmacro comment [&rest body]
"Ignores body and always expands to None"
None)

(defmacro doc [symbol]
"macro documentation
Gets help for a macro function available in this module.
Use ``require`` to make other macros available.
Use ``#doc foo`` instead for help with tag macro ``#foo``.
Use ``(help foo)`` instead for help with runtime objects."
`(try
(help (. (__import__ "hy")
macros
_hy_macros
[__name__]
['~symbol]))
(except [KeyError]
(help (. (__import__ "hy")
macros
_hy_macros
[None]
['~symbol])))))

(deftag doc [symbol]
"tag macro documentation
Gets help for a tag macro function available in this module."
`(try
(help (. (__import__ "hy")
macros
_hy_tag
[__name__]
['~symbol]))
(except [KeyError]
(help (. (__import__ "hy")
macros
_hy_tag
[None]
['~symbol])))))
2 changes: 2 additions & 0 deletions hy/macros.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ def macro(name):
"""
def _(fn):
fn.__name__ = "({})".format(name)
try:
argspec = getargspec(fn)
fn._hy_macro_pass_compiler = argspec.keywords is not None
Expand Down Expand Up @@ -63,6 +64,7 @@ def tag(name):
"""
def _(fn):
fn.__name__ = '#' + name
module_name = fn.__module__
if module_name.startswith("hy.core"):
module_name = None
Expand Down

0 comments on commit f68e2fa

Please sign in to comment.