[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: BUG: org-lint false missing arguments for macro with optional argume
From: |
Maxim Nikulin |
Subject: |
Re: BUG: org-lint false missing arguments for macro with optional arguments |
Date: |
Thu, 12 Aug 2021 23:44:19 +0700 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 |
On 30/06/2021 20:30, Michael Dauer wrote:
I've the following:
(defun ct-action-plan (&optional up recently-done)
...
(push '("action_plan" . "(eval (ct-action-plan $1 $2))")
org-export-global-macros)
Didn't you report that adding macros directly to
`org-export-global-macros' are not supported by `org-lint' at all?
On 30/06/2021 16:40, Michael Dauer wrote:
I have a lot of global macros defined in org-export-global-macros.
Wherever they are used in my org files org-lint reports them as undefined.
end of 30/06/2021 16:40 message
The arguments of the function are specified as optional. The macro just
call it with $1 and $2, which are nil if not stated like in the following:
{{{action_plan}}}
But here org-lint reports:
327 low Missing arguments in macro "action_plan"
I can not reproduce it with current master and macros defined inside an
org document
#+begin_src emacs-lisp :results silent :eval never-export
(defun tst-macro-wrapper (args)
(apply #'tst-macro args))
(defun tst-macro (&optional one two)
(format "one: %S two: %S." one two))
#+end_src
#+macro: mcropt (eval (tst-macro-wrapper _))
#+macro: mcrarg (eval (tst-macro $1 $2))
- opt ::
+ {{{mcropt}}}
+ {{{mcropt(onlyone)}}}
+ {{{mcropt(first,second)}}}
- arg ::
+ {{{mcrarg}}}
+ {{{mcrarg(onlyone)}}}
+ {{{mcrarg(first,second)}}}
`org-lint' reports no issues. mcropt relies on undocumented details of
implementation.
Is this a bug? Any ideas for a work-around to avoid confusion for my users.
Since eval expression may be arbitrary complex, it is a challenge to
parse a general form to find whether arguments are optional at
particular call site. More precise analysis of macro arguments would be
a great feature. Unsure if it is feasible.
P.S. Various static code analyzers for programming languages allows to
suppress particular warnings at specific lines by adding special comments.
P.P.S "Rest" arguments substitution in macros (e.g. $_) may mitigate an
issue with phrases including commas as an argument
https://orgmode.org/list/s7gfc6$hj1$1@ciao.gmane.io