emacs-orgmode
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]