Skip to content

Commit

Permalink
Ensure parse-fn-params parses the whole input
Browse files Browse the repository at this point in the history
  • Loading branch information
Kodiologist committed Sep 21, 2024
1 parent 64c98f1 commit 5a9431a
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 5 deletions.
7 changes: 6 additions & 1 deletion NEWS.rst
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
.. default-role:: code

Unreleased
0.7.0 (released 2024-09-22; uses Hy ≥ 1)
======================================================

New Features
------------------------------
* New macros `meth` and `ameth`.

Bug Fixes
------------------------------
* `match-fn-params` now raises an error for syntactically invalid
parameter lists.

0.6.0 (released 2024-05-20; uses Hy 0.29.*)
======================================================

Expand Down
6 changes: 3 additions & 3 deletions hyrule/macrotools.hy
Original file line number Diff line number Diff line change
Expand Up @@ -129,16 +129,16 @@
"A subroutine for `defmacro-kwargs` and `match-params`."
(import
funcparserlib.parser [maybe many]
hy.model-patterns [SYM FORM sym brackets pexpr])
hy.model-patterns [SYM FORM sym brackets pexpr whole])

(setv msym (>> SYM hy.mangle))
(defn pvalue [root wanted]
(>> (pexpr (+ (sym root) wanted)) (fn [x] (get x 0))))
(setv [ps p-rest p-kwargs] (.parse
(+
(whole [
(many (| msym (brackets msym FORM)))
(maybe (pvalue "unpack-iterable" msym))
(maybe (pvalue "unpack-mapping" msym)))
(maybe (pvalue "unpack-mapping" msym))])
params))
(setv ps (dfor
p ps
Expand Down
7 changes: 6 additions & 1 deletion tests/test_macrotools.hy
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,12 @@
(with [(pytest.raises TypeError :match "^unpacking is not allowed in `args`$")]
(f '[1 2 3 #* [1 2]]))
(with [(pytest.raises TypeError :match "^unpacking is not allowed in `args`$")]
(f '[1 2 3 #** {"qq" 1 "xx" 2}])))
(f '[1 2 3 #** {"qq" 1 "xx" 2}]))

; A syntactically invalid parameter list
(with [(pytest.raises hy.I.funcparserlib/parser.NoParseError)]
(match-fn-params [1] '[a 3]))
(assert (= (match-fn-params [1] '[a]) (dict :a 1))))


(defn test-slash-import []
Expand Down

0 comments on commit 5a9431a

Please sign in to comment.