unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
From: Stefan Monnier <monnier@iro.umontreal.ca>
To: help-gnu-emacs@gnu.org
Subject: Re: wrong type error in local variables
Date: Thu, 02 Jul 2020 13:42:41 -0400	[thread overview]
Message-ID: <jwvfta9vmst.fsf-monnier+emacs@gnu.org> (raw)
In-Reply-To: 878sg1ri0f.fsf@ebih.ebihd

>> `find-file` should not be called from Elisp.
>> Use `find-file-noselect` instead.
> Oups, if so I have 15 changes to make.
> Why doesn't the byte compiler say this?

Because noone has added the annotation for it yet (tho there are
various comments in the code that say so).

FWIW, I just tried adding it (see patch below), and I see that we have
many cases in Emacs's own Lisp code where we call `find-file`
from Elisp.  I suspect that many of them would benefit from being
changed, but the need to go and update all those cases might be a
reason why it hasn't been done yet :-(


        Stefan


diff --git a/lisp/files.el b/lisp/files.el
index 742fd78df1d..a29d02bf591 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -1688,6 +1688,7 @@ find-file
 
 To visit a file without any kind of conversion and without
 automatically choosing a major mode, use \\[find-file-literally]."
+  (declare (interactive-only find-file-noselect))
   (interactive
    (find-file-read-args "Find file: "
                         (confirm-nonexistent-file-or-buffer)))
@@ -1761,15 +1762,16 @@ find-file-other-frame
       (switch-to-buffer-other-frame value))))
 
 (defun find-file-existing (filename)
-   "Edit the existing file FILENAME.
+  "Edit the existing file FILENAME.
 Like \\[find-file], but allow only a file that exists, and do not allow
 file names with wildcards."
-   (interactive (nbutlast (find-file-read-args "Find existing file: " t)))
-   (if (and (not (called-interactively-p 'interactive))
-	    (not (file-exists-p filename)))
-       (error "%s does not exist" filename)
-     (find-file filename)
-     (current-buffer)))
+  (interactive (nbutlast (find-file-read-args "Find existing file: " t)))
+  (if (not (or (called-interactively-p 'interactive)
+               (file-exists-p filename)))
+      (error "%s does not exist" filename)
+    (with-suppressed-warnings ((interactive-only find-file))
+      (find-file filename))
+    (current-buffer)))
 
 (defun find-file--read-only (fun filename wildcards)
   (unless (or (and wildcards find-file-wildcards




  parent reply	other threads:[~2020-07-02 17:42 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-02 14:46 wrong type error in local variables Douglas Lewan
2020-07-02 15:06 ` Joost Kremers
2020-07-02 15:59   ` Douglas Lewan
2020-07-02 15:56 ` Stefan Monnier
2020-07-02 16:36   ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-07-02 17:09     ` Douglas Lewan
2020-07-02 17:45       ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-07-02 17:42     ` Stefan Monnier [this message]
2020-07-03  1:19       ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-07-03  1:40         ` Douglas Lewan
2020-07-03  2:00           ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-07-03  2:24             ` Douglas Lewan
2020-07-03  3:45           ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-07-03  5:13             ` Douglas Lewan
2020-07-03  6:05               ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-07-02 17:04   ` Douglas Lewan
2020-07-02 17:15   ` Douglas Lewan
  -- strict thread matches above, loose matches on Subject: below --
2020-07-03  8:33 Anders Munch
2020-07-03 10:36 ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-07-03 14:07 ` Douglas Lewan

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.gnu.org/software/emacs/

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

  git send-email \
    --in-reply-to=jwvfta9vmst.fsf-monnier+emacs@gnu.org \
    --to=monnier@iro.umontreal.ca \
    --cc=help-gnu-emacs@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.
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).