GNU bug report logs - #62864
30.0.50; Interactive forms that fail to provide required arguments

Previous Next

Package: emacs;

Reported by: Eshel Yaron <me <at> eshelyaron.com>

Date: Sat, 15 Apr 2023 16:36:01 UTC

Severity: normal

Found in version 30.0.50

To reply to this bug, email your comments to 62864 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#62864; Package emacs. (Sat, 15 Apr 2023 16:36:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Eshel Yaron <me <at> eshelyaron.com>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Sat, 15 Apr 2023 16:36:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Eshel Yaron <me <at> eshelyaron.com>
To: bug-gnu-emacs <at> gnu.org
Subject: 30.0.50; Interactive forms that fail to provide required arguments
Date: Sat, 15 Apr 2023 19:34:58 +0300
Hi,

I've noticed that dictionary.el defines some functions with an
`interactive' form that doesn't provide their required arguments.

For example, `dictionary-new-search' must be called with at least one
argument, but when called interactively it gets called with no
arguments.  The other two such cases in dictionary.el are
`dictionary-definition' and `dictionary-switch-tooltip-mode'.

IIUC, these "commands" are never actually called interactively, and it
should be safe to simply drop the `interactive' form so they don't show
up in `M-x dictionary- TAB'.

A quick scan of the lisp/ directory of emacs.git reveals a similar issue
with the following function definitions:

calc/calc-misc.el: calc-info-goto-node
calc/calc-prog.el: calc-edit-macro-finish-edit
emacs-lisp/backtrace.el: backtrace-expand-ellipsis
emulation/edt-mapper.el: edt-map-key
gnus/gnus-kill.el: gnus-kill-file-apply-string
international/isearch-x.el: isearch-exit-recursive-edit
net/dictionary.el: dictionary-new-search
net/dictionary.el: dictionary-definition
net/dictionary.el: dictionary-switch-tooltip-mode
net/eudcb-bbdb.el: eudc-bbdb-set-server
net/eudcb-ldap.el: eudc-ldap-get-field-list
net/eudcb-mab.el: eudc-mab-set-server
net/eudcb-macos-contacts.el: eudc-macos-contacts-set-server
net/newst-backend.el: newsticker-save-item
net/newst-plainview.el: newsticker-set-auto-narrow-to-feed
net/newst-plainview.el: newsticker-set-auto-narrow-to-item
net/newst-reader.el: newsticker-browse-url-item
net/ntlm.el: ntlm-build-auth-request
net/socks.el: socks-open-connection
obsolete/eudcb-ph.el: eudc-ph-get-field-list
obsolete/html2text.el: html2text-remove-tags
obsolete/iswitchb.el: iswitchb-window-buffer-p
obsolete/landmark.el: landmark-print-distance-int
obsolete/landmark.el: landmark-print-moves
obsolete/tpu-mapper.el: tpu-map-key
org/org-colview.el: org-columns-compute
org/org-ctags.el: org-ctags-visit-buffer-or-file
org/org-keys.el: org-speed-move-safe
org/org-plot.el: org-plot/gnuplot-to-grid-data
org/org-src.el: org-src-associate-babel-session
org/org.el: org-agenda-prepare-buffers
org/org.el: org--math-always-on
progmodes/dcl-mode.el: dcl-indent-to
progmodes/ebrowse.el: ebrowse-redraw-marks
progmodes/ebrowse.el: ebrowse-view-file-other-frame
progmodes/gud.el: gud-basic-call
progmodes/idlwave.el: idlwave-display-user-catalog-widget
progmodes/opascal.el: opascal-debug-tokenize-region
progmodes/prolog.el: prolog-goto-predicate-info
progmodes/verilog-mode.el: verilog-backward-case-item
progmodes/verilog-mode.el: verilog-just-one-space
progmodes/verilog-mode.el: verilog-indent-declaration
progmodes/vhdl-mode.el: vhdl-template-array
progmodes/vhdl-mode.el: vhdl-template-if-then-use
progmodes/vhdl-mode.el: vhdl-template-record
progmodes/vhdl-mode.el: vhdl-doc-variable
textmodes/reftex-index.el: reftex-index-analyze-entry
calculator.el: calculator-saved-move
dframe.el: dframe-get-focus
filesets.el: filesets-convert-patterns
speedbar.el: speedbar-toggle-etags
treesit.el: treesit--explorer-jump
woman.el: woman-reset-emulation

Here's the code I used to perform the scan, note it assumes emacs.git is
at ~/checkouts/emacs:

(defun required-argument-p (arg)
  (not (member arg '(&optional &rest))))

(defun find-bad-interactive-declarations ()
  (interactive)
  (dolist (file (directory-files-recursively "~/checkouts/emacs/lisp"
                                             (rx ".el" eos)))
    (with-current-buffer (find-file-noselect file t t)
      (goto-char (point-min))
      (ignore-errors
        (while-let ((sexp (condition-case _
                              (read (current-buffer))
                            (end-of-file nil))))
          (pcase sexp
            (`(defun ,fun ,`(,(pred required-argument-p) . ,_)
                .
                ,(or `(,_ (interactive) . ,_)
                     `((interactive) . ,_)))
             (message "%s: %s"
                      (file-relative-name file "~/checkouts/emacs/lisp")
                      fun))))))))

Best,
Eshel



In GNU Emacs 30.0.50 (build 6, x86_64-apple-darwin22.4.0, NS
 appkit-2299.50 Version 13.3.1 (Build 22E261)) of 2023-04-15 built on
 esmac
Repository revision: 234be3d670cf04503a81f74617239f62364457ae
Repository branch: master
Windowing system distributor 'Apple', version 10.3.2299
System Description:  macOS 13.3.1

Configured using:
 'configure CFLAGS=-O3 --with-native-compilation --with-json
 --with-tree-sitter'

Configured features:
ACL DBUS GIF GLIB GMP GNUTLS JPEG JSON LCMS2 LIBXML2 MODULES NATIVE_COMP
NOTIFY KQUEUE NS PDUMPER PNG RSVG SQLITE3 THREADS TIFF
TOOLKIT_SCROLL_BARS TREE_SITTER WEBP XIM ZLIB

Important settings:
  value of $LC_CTYPE: UTF-8
  locale-coding-system: utf-8-unix

Major mode: Lisp Interaction

Minor modes in effect:
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  line-number-mode: t
  indent-tabs-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
None found.

Features:
(shadow sort mail-extr emacsbug message mailcap yank-media puny dired
dired-loaddefs rfc822 mml mml-sec password-cache epa derived epg rfc6068
epg-config gnus-util text-property-search time-date mm-decode mm-bodies
mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader cl-loaddefs
comp comp-cstr warnings icons subr-x rx cl-seq cl-macs gv cl-extra
help-mode bytecomp byte-compile cl-lib sendmail rfc2047 rfc2045
ietf-drums mm-util mail-prsvr mail-utils rmc iso-transl tooltip cconv
eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type
elisp-mode mwheel term/ns-win ns-win ucs-normalize mule-util
term/common-win tool-bar dnd fontset image regexp-opt fringe
tabulated-list replace newcomment text-mode lisp-mode prog-mode register
page tab-bar menu-bar rfn-eshadow isearch easymenu timer select
scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors
frame minibuffer nadvice seq simple cl-generic indonesian philippine
cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao
korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech
european ethiopic indian cyrillic chinese composite emoji-zwj charscript
charprop case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure
cl-preloaded button loaddefs theme-loaddefs faces cus-face macroexp
files window text-properties overlay sha1 md5 base64 format env
code-pages mule custom widget keymap hashtable-print-readable backquote
threads dbusbind kqueue cocoa ns lcms2 multi-tty make-network-process
native-compile emacs)

Memory information:
((conses 16 77774 10775)
 (symbols 48 7102 0)
 (strings 32 19402 1802)
 (string-bytes 1 593314)
 (vectors 16 15917)
 (vector-slots 8 280865 12269)
 (floats 8 27 24)
 (intervals 56 223 0)
 (buffers 984 11))




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#62864; Package emacs. (Sat, 06 May 2023 08:32:02 GMT) Full text and rfc822 format available.

Message #8 received at 62864 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Eshel Yaron <me <at> eshelyaron.com>
Cc: 62864 <at> debbugs.gnu.org
Subject: Re: bug#62864: 30.0.50;
 Interactive forms that fail to provide required arguments
Date: Sat, 06 May 2023 11:32:12 +0300
> Date: Sat, 15 Apr 2023 19:34:58 +0300
> From:  Eshel Yaron via "Bug reports for GNU Emacs,
>  the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org>
> 
> I've noticed that dictionary.el defines some functions with an
> `interactive' form that doesn't provide their required arguments.
> 
> For example, `dictionary-new-search' must be called with at least one
> argument, but when called interactively it gets called with no
> arguments.  The other two such cases in dictionary.el are
> `dictionary-definition' and `dictionary-switch-tooltip-mode'.
> 
> IIUC, these "commands" are never actually called interactively, and it
> should be safe to simply drop the `interactive' form so they don't show
> up in `M-x dictionary- TAB'.
> 
> A quick scan of the lisp/ directory of emacs.git reveals a similar issue
> with the following function definitions:

Thanks, I've now fixed many of those on the master branch.  Notable
exceptions are Org files and those in the lisp/obsolete subdirectory.




This bug report was last modified 349 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.