GNU bug report logs -
#50136
28.0.50; A problem with rx-let expansion
Previous Next
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Your bug report
#50136: 28.0.50; A problem with rx-let expansion
which was filed against the emacs package, has been closed.
The explanation is attached below, along with your original report.
If you require more details, please reply to 50136 <at> debbugs.gnu.org.
--
50136: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=50136
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
23 aug. 2021 kl. 18.59 skrev Michael Heerdegen <michael_heerdegen <at> web.de>:
> Maybe at least one sentence about that this mechanism just performs
> trivial substitution?
I didn't do that now, because I couldn't see how it could be interpreted otherwise (and there's the manual link).
> I find the term "user-defined" distracting, because anybody (including
> library and package developers) is "affected". Apart from that, ok for
> me.
Thank you, changed.
> Didn't try the example, but it looks good.
Thanks for looking at it. Good examples are always hard to write!
> | (eval EXPR) Match the rx sexp from evaluating EXPR at compile time.
>
> can we say "expansion time" instead of "compile time"?
We can, and now do!
Closing; I think we're done here (complain if not).
[Message part 3 (message/rfc822, inline)]
Hello,
I'm referring to this paragraph in rx.el:
;; FIXME: Consider adding extensions in Lisp macro style, where
;; arguments are passed unevaluated to code that returns the rx form
;; to use.
;; [...]
;; While this would permit more powerful extensions, it's unclear just
;; how often they would be used in practice. Let's wait until there is
;; demand for it.
Ok - here is! I would find that approach much more natural than the
current one. Look:
Already the first `rx-let' pseudo macro I tried hit a problem (bug) with
the current approach:
#+begin_src emacs-lisp
(rx-let ((scatter (string)
(regex (mapconcat #'string (string-to-list string) ".*"))))
(rx (scatter "abc"))) => useless error message
#+end_src
while the following version (the only difference is the argument name)
works as expected:
#+begin_src emacs-lisp
(rx-let ((scatter (s) (regex (mapconcat #'string (string-to-list s) ".*"))))
(rx (scatter "abc"))) ==> "a.*b.*c"
#+end_src
Seems the function form #'string gets replaced and ends as #'"abc" in
the first version because the function name accidentally collides with
the argument name.
Personally I would be more happy with a thing called `rx-macrolet' than
with an extended `rx-let' to support this additional macro-like kind of
syntax.
TIA,
Michael.
This bug report was last modified 3 years and 273 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.