emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 17c3610c561 3/8: Consider read-symbol-shorthands in check-declare


From: João Távora
Subject: master 17c3610c561 3/8: Consider read-symbol-shorthands in check-declare.el (bug#67523)
Date: Sat, 3 Feb 2024 09:44:07 -0500 (EST)

branch: master
commit 17c3610c56155dd5b1efd5b7e8d6a58112f43a59
Author: João Távora <joaotavora@gmail.com>
Commit: João Távora <joaotavora@gmail.com>

    Consider read-symbol-shorthands in check-declare.el (bug#67523)
    
    * lisp/emacs-lisp/check-declare.el (check-declare-verify):
    Consider read-symbol-shorthands.
---
 lisp/emacs-lisp/check-declare.el | 101 ++++++++++++++++++++-------------------
 1 file changed, 53 insertions(+), 48 deletions(-)

diff --git a/lisp/emacs-lisp/check-declare.el b/lisp/emacs-lisp/check-declare.el
index 8e40b227b65..b4a7b4b33e6 100644
--- a/lisp/emacs-lisp/check-declare.el
+++ b/lisp/emacs-lisp/check-declare.el
@@ -145,64 +145,69 @@ is a string giving details of the error."
     (if (file-regular-p fnfile)
         (with-temp-buffer
           (insert-file-contents fnfile)
+          (unless cflag
+            ;; If in Elisp, ensure syntax and shorthands available
+            (set-syntax-table emacs-lisp-mode-syntax-table)
+            (let (enable-local-variables) (hack-local-variables)))
           ;; defsubst's don't _have_ to be known at compile time.
-          (setq re (format (if cflag
-                               "^[ \t]*\\(DEFUN\\)[ \t]*([ \t]*\"%s\""
-                             "^[ \t]*(\\(fset[ \t]+'\\|\
+          (setq re (if cflag
+                       (format "^[ \t]*\\(DEFUN\\)[ \t]*([ \t]*\"%s\""
+                               (regexp-opt (mapcar 'cadr fnlist) t))
+                     "^[ \t]*(\\(fset[ \t]+'\\|\
 cl-def\\(?:generic\\|method\\|un\\)\\|\
 def\\(?:un\\|subst\\|foo\\|method\\|class\\|\
 ine-\\(?:derived\\|generic\\|\\(?:global\\(?:ized\\)?-\\)?minor\\)-mode\\|\
 \\(?:ine-obsolete-function-\\)?alias[ \t]+'\\|\
 ine-overloadable-function\\)\\)\
-[ \t]*%s\\([ \t;]+\\|$\\)")
-                           (regexp-opt (mapcar 'cadr fnlist) t)))
+[ \t]*\\(\\(?:\\sw\\|\\s_\\)+\\)\\([ \t;]+\\|$\\)"))
           (while (re-search-forward re nil t)
             (skip-chars-forward " \t\n")
-            (setq fn (match-string 2)
-                  type (match-string 1)
-                  ;; (min . max) for a fixed number of arguments, or
-                  ;; arglists with optional elements.
-                  ;; (min) for arglists with &rest.
-                  ;; sig = 'err means we could not find an arglist.
-                  sig (cond (cflag
-                             (or
-                              (when (search-forward "," nil t 3)
-                                (skip-chars-forward " \t\n")
-                                ;; Assuming minargs and maxargs on same line.
-                                (when (looking-at "\\([0-9]+\\)[ \t]*,[ \t]*\
+            (setq fn (symbol-name (car (read-from-string (match-string 2)))))
+            (when (member fn (mapcar 'cadr fnlist))
+              (setq type (match-string 1)
+                    ;; (min . max) for a fixed number of arguments, or
+                    ;; arglists with optional elements.
+                    ;; (min) for arglists with &rest.
+                    ;; sig = 'err means we could not find an arglist.
+                    sig (cond (cflag
+                               (or
+                                (when (search-forward "," nil t 3)
+                                  (skip-chars-forward " \t\n")
+                                  ;; Assuming minargs and maxargs on same line.
+                                  (when (looking-at "\\([0-9]+\\)[ \t]*,[ \t]*\
 \\([0-9]+\\|MANY\\|UNEVALLED\\)")
-                                  (setq minargs (string-to-number
-                                                 (match-string 1))
-                                        maxargs (match-string 2))
-                                  (cons minargs (unless (string-match "[^0-9]"
-                                                                      maxargs)
-                                                 (string-to-number
-                                                  maxargs)))))
-                              'err))
-                            ((string-match
-                              "\\`define-\\(derived\\|generic\\)-mode\\'"
-                              type)
-                             '(0 . 0))
-                            ((string-match
-                              
"\\`define\\(-global\\(ized\\)?\\)?-minor-mode\\'"
-                              type)
-                             '(0 . 1))
-                            ;; Prompt to update.
-                            ((string-match
-                              "\\`define-obsolete-function-alias\\>"
-                              type)
-                             'obsolete)
-                            ;; Can't easily check arguments in these cases.
-                            ((string-match "\\`\\(def\\(alias\\|class\\)\\|\
+                                    (setq minargs (string-to-number
+                                                   (match-string 1))
+                                          maxargs (match-string 2))
+                                    (cons minargs (unless (string-match 
"[^0-9]"
+                                                                        
maxargs)
+                                                    (string-to-number
+                                                     maxargs)))))
+                                'err))
+                              ((string-match
+                                "\\`define-\\(derived\\|generic\\)-mode\\'"
+                                type)
+                               '(0 . 0))
+                              ((string-match
+                                
"\\`define\\(-global\\(ized\\)?\\)?-minor-mode\\'"
+                                type)
+                               '(0 . 1))
+                              ;; Prompt to update.
+                              ((string-match
+                                "\\`define-obsolete-function-alias\\>"
+                                type)
+                               'obsolete)
+                              ;; Can't easily check arguments in these cases.
+                              ((string-match "\\`\\(def\\(alias\\|class\\)\\|\
 fset\\|\\(?:cl-\\)?defmethod\\)\\>" type)
-                             t)
-                            ((looking-at "\\((\\|nil\\)")
-                             (byte-compile-arglist-signature
-                              (read (current-buffer))))
-                            (t
-                             'err))
-                  ;; alist of functions and arglist signatures.
-                  siglist (cons (cons fn sig) siglist)))))
+                               t)
+                              ((looking-at "\\((\\|nil\\)")
+                               (byte-compile-arglist-signature
+                                (read (current-buffer))))
+                              (t
+                               'err))
+                    ;; alist of functions and arglist signatures.
+                    siglist (cons (cons fn sig) siglist))))))
     (dolist (e fnlist)
       (setq arglist (nth 2 e)
             type



reply via email to

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