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


Reply via email to