emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Maxim Nikulin <manikulin@gmail.com>
To: emacs-orgmode@gnu.org
Subject: Re: BUG: org-lint false missing arguments for macro with optional arguments
Date: Thu, 12 Aug 2021 23:44:19 +0700	[thread overview]
Message-ID: <sf3j5q$bou$1@ciao.gmane.io> (raw)
In-Reply-To: <CAP7OBxK7k_5e9f2bnrEfz2P5XJgd8wSF6LAEMaN9urkteSRNcw@mail.gmail.com>

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



      parent reply	other threads:[~2021-08-12 16:45 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-30 13:30 BUG: org-lint false missing arguments for macro with optional arguments Michael Dauer
2021-08-12  8:32 ` Ihor Radchenko
2021-08-12 16:44 ` Maxim Nikulin [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='sf3j5q$bou$1@ciao.gmane.io' \
    --to=manikulin@gmail.com \
    --cc=emacs-orgmode@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).