comparison lisp/progmodes/flymake.el @ 68049:6f8be651fd6a

(flymake-get-cleanup-function): Default to flymake-simple-cleanup. (flymake-allowed-file-name-masks): Use this new default. All the functions are now called in the right buffer rather than passing the buffer as argument. (flymake-process-sentinel): Switch to buffer before calling cleanup. (flymake-parse-err-lines): Remove redundant buffer arg. (flymake-get-program-dir): Comment out unused function. (flymake-start-syntax-check, flymake-start-syntax-check-process): Remove redundant buffer argument. (flymake-get-real-file-name, flymake-simple-java-cleanup) (flymake-simple-cleanup, flymake-master-cleanup): Remove buffer arg.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Thu, 05 Jan 2006 18:50:48 +0000
parents 1a9ccbce1b6e
children 78318387b7b6
comparison
equal deleted inserted replaced
68048:c5788f95d2a2 68049:6f8be651fd6a
243 (defvar flymake-output-residual nil) 243 (defvar flymake-output-residual nil)
244 244
245 (make-variable-buffer-local 'flymake-output-residual) 245 (make-variable-buffer-local 'flymake-output-residual)
246 246
247 (defcustom flymake-allowed-file-name-masks 247 (defcustom flymake-allowed-file-name-masks
248 '(("\\.c\\'" flymake-simple-make-init flymake-simple-cleanup) 248 '(("\\.c\\'" flymake-simple-make-init)
249 ("\\.cpp\\'" flymake-simple-make-init flymake-simple-cleanup) 249 ("\\.cpp\\'" flymake-simple-make-init)
250 ("\\.xml\\'" flymake-xml-init flymake-simple-cleanup) 250 ("\\.xml\\'" flymake-xml-init)
251 ("\\.html?\\'" flymake-xml-init flymake-simple-cleanup) 251 ("\\.html?\\'" flymake-xml-init)
252 ("\\.cs\\'" flymake-simple-make-init flymake-simple-cleanup) 252 ("\\.cs\\'" flymake-simple-make-init)
253 ("\\.pl\\'" flymake-perl-init flymake-simple-cleanup) 253 ("\\.pl\\'" flymake-perl-init)
254 ("\\.h\\'" flymake-master-make-header-init flymake-master-cleanup) 254 ("\\.h\\'" flymake-master-make-header-init flymake-master-cleanup)
255 ("\\.java\\'" flymake-simple-make-java-init flymake-simple-java-cleanup) 255 ("\\.java\\'" flymake-simple-make-java-init flymake-simple-java-cleanup)
256 ("[0-9]+\\.tex\\'" flymake-master-tex-init flymake-master-cleanup) 256 ("[0-9]+\\.tex\\'" flymake-master-tex-init flymake-master-cleanup)
257 ("\\.tex\\'" flymake-simple-tex-init flymake-simple-cleanup) 257 ("\\.tex\\'" flymake-simple-tex-init)
258 ("\\.idl\\'" flymake-simple-make-init flymake-simple-cleanup) 258 ("\\.idl\\'" flymake-simple-make-init)
259 ;; ("\\.cpp\\'" 1) 259 ;; ("\\.cpp\\'" 1)
260 ;; ("\\.java\\'" 3) 260 ;; ("\\.java\\'" 3)
261 ;; ("\\.h\\'" 2 ("\\.cpp\\'" "\\.c\\'") 261 ;; ("\\.h\\'" 2 ("\\.cpp\\'" "\\.c\\'")
262 ;; ("[ \t]*#[ \t]*include[ \t]*\"\\([\w0-9/\\_\.]*[/\\]*\\)\\(%s\\)\"" 1 2)) 262 ;; ("[ \t]*#[ \t]*include[ \t]*\"\\([\w0-9/\\_\.]*[/\\]*\\)\\(%s\\)\"" 1 2))
263 ;; ("\\.idl\\'" 1) 263 ;; ("\\.idl\\'" 1)
295 ;;(funcall init-f (current-buffer)) 295 ;;(funcall init-f (current-buffer))
296 init-f)) 296 init-f))
297 297
298 (defun flymake-get-cleanup-function (file-name) 298 (defun flymake-get-cleanup-function (file-name)
299 "Return cleanup function to be used for the file." 299 "Return cleanup function to be used for the file."
300 (nth 1 (flymake-get-file-name-mode-and-masks file-name))) 300 (or (nth 1 (flymake-get-file-name-mode-and-masks file-name))
301 'flymake-simple-cleanup))
301 302
302 (defun flymake-get-real-file-name-function (file-name) 303 (defun flymake-get-real-file-name-function (file-name)
303 (or (nth 2 (flymake-get-file-name-mode-and-masks file-name)) 304 (or (nth 2 (flymake-get-file-name-mode-and-masks file-name))
304 'flymake-get-real-file-name)) 305 'flymake-get-real-file-name))
305 306
619 (with-current-buffer source-buffer 620 (with-current-buffer source-buffer
620 (flymake-parse-output-and-residual output))))) 621 (flymake-parse-output-and-residual output)))))
621 622
622 (defun flymake-process-sentinel (process event) 623 (defun flymake-process-sentinel (process event)
623 "Sentinel for syntax check buffers." 624 "Sentinel for syntax check buffers."
624 (if (memq (process-status process) '(signal exit)) 625 (when (memq (process-status process) '(signal exit))
625 (let*((exit-status (process-exit-status process)) 626 (let* ((exit-status (process-exit-status process))
626 (command (process-command process)) 627 (command (process-command process))
627 (source-buffer (process-buffer process)) 628 (source-buffer (process-buffer process))
628 (cleanup-f (flymake-get-cleanup-function (buffer-file-name source-buffer)))) 629 (cleanup-f (flymake-get-cleanup-function (buffer-file-name source-buffer))))
629 630
630 (flymake-log 2 "process %d exited with code %d" 631 (flymake-log 2 "process %d exited with code %d"
631 (process-id process) exit-status) 632 (process-id process) exit-status)
632 (condition-case err 633 (condition-case err
633 (progn 634 (progn
634 (flymake-log 3 "cleaning up using %s" cleanup-f) 635 (flymake-log 3 "cleaning up using %s" cleanup-f)
635 (funcall cleanup-f source-buffer) 636 (when (buffer-live-p source-buffer)
636 637 (with-current-buffer source-buffer
637 (delete-process process) 638 (funcall cleanup-f)))
638 (setq flymake-processes (delq process flymake-processes)) 639
639 640 (delete-process process)
640 (when source-buffer 641 (setq flymake-processes (delq process flymake-processes))
641 (with-current-buffer source-buffer 642
642 643 (when (buffer-live-p source-buffer)
643 (flymake-parse-residual) 644 (with-current-buffer source-buffer
644 (flymake-post-syntax-check exit-status command) 645
645 (setq flymake-is-running nil)))) 646 (flymake-parse-residual)
646 (error 647 (flymake-post-syntax-check exit-status command)
647 (let ((err-str (format "Error in process sentinel for buffer %s: %s" 648 (setq flymake-is-running nil))))
648 source-buffer (error-message-string err)))) 649 (error
649 (flymake-log 0 err-str) 650 (let ((err-str (format "Error in process sentinel for buffer %s: %s"
650 (with-current-buffer source-buffer 651 source-buffer (error-message-string err))))
651 (setq flymake-is-running nil)))))))) 652 (flymake-log 0 err-str)
653 (with-current-buffer source-buffer
654 (setq flymake-is-running nil))))))))
652 655
653 (defun flymake-post-syntax-check (exit-status command) 656 (defun flymake-post-syntax-check (exit-status command)
654 (setq flymake-err-info flymake-new-err-info) 657 (setq flymake-err-info flymake-new-err-info)
655 (setq flymake-new-err-info nil) 658 (setq flymake-new-err-info nil)
656 (setq flymake-err-info 659 (setq flymake-err-info
892 (get-real-file-name-f (flymake-get-real-file-name-function source-file-name))) 895 (get-real-file-name-f (flymake-get-real-file-name-function source-file-name)))
893 896
894 (while (< idx count) 897 (while (< idx count)
895 (setq line-err-info (flymake-parse-line (nth idx lines))) 898 (setq line-err-info (flymake-parse-line (nth idx lines)))
896 (when line-err-info 899 (when line-err-info
897 (setq real-file-name (funcall get-real-file-name-f (current-buffer) (flymake-ler-get-file line-err-info))) 900 (setq real-file-name (funcall get-real-file-name-f
901 (flymake-ler-get-file line-err-info)))
898 (setq line-err-info (flymake-ler-set-full-file line-err-info real-file-name)) 902 (setq line-err-info (flymake-ler-set-full-file line-err-info real-file-name))
899 903
900 (if (flymake-same-files real-file-name source-file-name) 904 (if (flymake-same-files real-file-name source-file-name)
901 (setq line-err-info (flymake-ler-set-file line-err-info nil)) 905 (setq line-err-info (flymake-ler-set-file line-err-info nil))
902 (setq line-err-info (flymake-ler-set-file line-err-info (file-name-nondirectory real-file-name)))) 906 (setq line-err-info (flymake-ler-set-file line-err-info (file-name-nondirectory real-file-name))))
1126 1130
1127 ;; (defun flymake-restore-formatting () 1131 ;; (defun flymake-restore-formatting ()
1128 ;; "Remove any formatting made by flymake." 1132 ;; "Remove any formatting made by flymake."
1129 ;; ) 1133 ;; )
1130 1134
1131 (defun flymake-get-program-dir (buffer) 1135 ;; (defun flymake-get-program-dir (buffer)
1132 "Get dir to start program in." 1136 ;; "Get dir to start program in."
1133 (unless (bufferp buffer) 1137 ;; (unless (bufferp buffer)
1134 (error "Invalid buffer")) 1138 ;; (error "Invalid buffer"))
1135 (with-current-buffer buffer 1139 ;; (with-current-buffer buffer
1136 default-directory)) 1140 ;; default-directory))
1137 1141
1138 (defun flymake-safe-delete-file (file-name) 1142 (defun flymake-safe-delete-file (file-name)
1139 (when (and file-name (file-exists-p file-name)) 1143 (when (and file-name (file-exists-p file-name))
1140 (delete-file file-name) 1144 (delete-file file-name)
1141 (flymake-log 1 "deleted file %s" file-name))) 1145 (flymake-log 1 "deleted file %s" file-name)))
1174 (args (nth 1 cmd-and-args)) 1178 (args (nth 1 cmd-and-args))
1175 (dir (nth 2 cmd-and-args))) 1179 (dir (nth 2 cmd-and-args)))
1176 (if (not cmd-and-args) 1180 (if (not cmd-and-args)
1177 (progn 1181 (progn
1178 (flymake-log 0 "init function %s for %s failed, cleaning up" init-f source-file-name) 1182 (flymake-log 0 "init function %s for %s failed, cleaning up" init-f source-file-name)
1179 (funcall cleanup-f (current-buffer))) 1183 (funcall cleanup-f))
1180 (progn 1184 (progn
1181 (setq flymake-last-change-time nil) 1185 (setq flymake-last-change-time nil)
1182 (flymake-start-syntax-check-process cmd args dir))))))) 1186 (flymake-start-syntax-check-process cmd args dir)))))))
1183 1187
1184 (defun flymake-start-syntax-check-process (cmd args dir) 1188 (defun flymake-start-syntax-check-process (cmd args dir)
1207 (let* ((err-str (format "Failed to launch syntax check process '%s' with args %s: %s" 1211 (let* ((err-str (format "Failed to launch syntax check process '%s' with args %s: %s"
1208 cmd args (error-message-string err))) 1212 cmd args (error-message-string err)))
1209 (source-file-name buffer-file-name) 1213 (source-file-name buffer-file-name)
1210 (cleanup-f (flymake-get-cleanup-function source-file-name))) 1214 (cleanup-f (flymake-get-cleanup-function source-file-name)))
1211 (flymake-log 0 err-str) 1215 (flymake-log 0 err-str)
1212 (funcall cleanup-f (current-buffer)) 1216 (funcall cleanup-f)
1213 (flymake-report-fatal-status "PROCERR" err-str)))))) 1217 (flymake-report-fatal-status "PROCERR" err-str))))))
1214 1218
1215 (defun flymake-kill-process (proc) 1219 (defun flymake-kill-process (proc)
1216 "Kill process PROC." 1220 "Kill process PROC."
1217 (kill-process proc) 1221 (kill-process proc)
1574 1578
1575 (flymake-save-buffer-in-file temp-source-file-name) 1579 (flymake-save-buffer-in-file temp-source-file-name)
1576 (setq flymake-temp-source-file-name temp-source-file-name) 1580 (setq flymake-temp-source-file-name temp-source-file-name)
1577 temp-source-file-name)) 1581 temp-source-file-name))
1578 1582
1579 (defun flymake-simple-cleanup (buffer) 1583 (defun flymake-simple-cleanup ()
1580 "Do cleanup after `flymake-init-create-temp-buffer-copy'. 1584 "Do cleanup after `flymake-init-create-temp-buffer-copy'.
1581 Delete temp file." 1585 Delete temp file."
1582 (let* ((temp-source-file-name (with-current-buffer buffer 1586 (flymake-safe-delete-file flymake-temp-source-file-name)
1583 flymake-temp-source-file-name))) 1587 (setq flymake-last-change-time nil))
1584 (flymake-safe-delete-file temp-source-file-name) 1588
1585 (with-current-buffer buffer 1589 (defun flymake-get-real-file-name (file-name-from-err-msg)
1586 (setq flymake-last-change-time nil))))
1587
1588 (defun flymake-get-real-file-name (buffer file-name-from-err-msg)
1589 "Translate file name from error message to \"real\" file name. 1590 "Translate file name from error message to \"real\" file name.
1590 Return full-name. Names are real, not patched." 1591 Return full-name. Names are real, not patched."
1591 (let* ((real-name nil) 1592 (let* ((real-name nil)
1592 (source-file-name (buffer-file-name buffer)) 1593 (source-file-name buffer-file-name)
1593 (master-file-name 1594 (master-file-name flymake-master-file-name)
1594 (with-current-buffer buffer flymake-master-file-name)) 1595 (temp-source-file-name flymake-temp-source-file-name)
1595 (temp-source-file-name 1596 (temp-master-file-name flymake-temp-master-file-name)
1596 (with-current-buffer buffer flymake-temp-source-file-name))
1597 (temp-master-file-name
1598 (with-current-buffer buffer flymake-temp-master-file-name))
1599 (base-dirs 1597 (base-dirs
1600 (list (with-current-buffer buffer flymake-base-dir) 1598 (list flymake-base-dir
1601 (file-name-directory source-file-name) 1599 (file-name-directory source-file-name)
1602 (if master-file-name (file-name-directory master-file-name)))) 1600 (if master-file-name (file-name-directory master-file-name))))
1603 (files (list (list source-file-name source-file-name) 1601 (files (list (list source-file-name source-file-name)
1604 (list temp-source-file-name source-file-name) 1602 (list temp-source-file-name source-file-name)
1605 (list master-file-name master-file-name) 1603 (list master-file-name master-file-name)
1606 (list temp-master-file-name master-file-name)))) 1604 (list temp-master-file-name master-file-name))))
1607 1605
1608 (when (equal 0 (length file-name-from-err-msg)) 1606 (when (equal 0 (length file-name-from-err-msg))
1609 (setq file-name-from-err-msg source-file-name)) 1607 (setq file-name-from-err-msg source-file-name))
1610 1608
1611 (setq real-name (flymake-get-full-patched-file-name file-name-from-err-msg base-dirs files)) 1609 (setq real-name (flymake-get-full-patched-file-name file-name-from-err-msg base-dirs files))
1664 "NOMK" (format "No buildfile (%s) found for %s" 1662 "NOMK" (format "No buildfile (%s) found for %s"
1665 buildfile-name source-file-name))))) 1663 buildfile-name source-file-name)))))
1666 1664
1667 (defun flymake-init-create-temp-source-and-master-buffer-copy (get-incl-dirs-f create-temp-f master-file-masks include-regexp-list) 1665 (defun flymake-init-create-temp-source-and-master-buffer-copy (get-incl-dirs-f create-temp-f master-file-masks include-regexp-list)
1668 "Find master file (or buffer), create it's copy along with a copy of the source file." 1666 "Find master file (or buffer), create it's copy along with a copy of the source file."
1669 (let* ((source-file-name buffer-file-name buffer) 1667 (let* ((source-file-name buffer-file-name)
1670 (temp-source-file-name (flymake-init-create-temp-buffer-copy create-temp-f)) 1668 (temp-source-file-name (flymake-init-create-temp-buffer-copy create-temp-f))
1671 (master-and-temp-master (flymake-create-master-file 1669 (master-and-temp-master (flymake-create-master-file
1672 source-file-name temp-source-file-name 1670 source-file-name temp-source-file-name
1673 get-incl-dirs-f create-temp-f 1671 get-incl-dirs-f create-temp-f
1674 master-file-masks include-regexp-list))) 1672 master-file-masks include-regexp-list)))
1679 (flymake-report-status "!" "") ; NOMASTER 1677 (flymake-report-status "!" "") ; NOMASTER
1680 nil) 1678 nil)
1681 (setq flymake-master-file-name (nth 0 master-and-temp-master)) 1679 (setq flymake-master-file-name (nth 0 master-and-temp-master))
1682 (setq flymake-temp-master-file-name (nth 1 master-and-temp-master))))) 1680 (setq flymake-temp-master-file-name (nth 1 master-and-temp-master)))))
1683 1681
1684 (defun flymake-master-cleanup (buffer) 1682 (defun flymake-master-cleanup ()
1685 (flymake-simple-cleanup buffer) 1683 (flymake-simple-cleanup)
1686 (flymake-safe-delete-file (with-current-buffer buffer flymake-temp-master-file-name))) 1684 (flymake-safe-delete-file flymake-temp-master-file-name))
1687 1685
1688 ;;;; make-specific init-cleanup routines 1686 ;;;; make-specific init-cleanup routines
1689 (defun flymake-get-syntax-check-program-args (source-file-name base-dir use-relative-base-dir use-relative-source get-cmd-line-f) 1687 (defun flymake-get-syntax-check-program-args (source-file-name base-dir use-relative-base-dir use-relative-source get-cmd-line-f)
1690 "Create a command line for syntax check using GET-CMD-LINE-F." 1688 "Create a command line for syntax check using GET-CMD-LINE-F."
1691 (let* ((my-base-dir base-dir) 1689 (let* ((my-base-dir base-dir)
1758 (flymake-simple-make-init-impl 'flymake-create-temp-with-folder-structure nil nil "Makefile" 'flymake-get-make-cmdline)) 1756 (flymake-simple-make-init-impl 'flymake-create-temp-with-folder-structure nil nil "Makefile" 'flymake-get-make-cmdline))
1759 1757
1760 (defun flymake-simple-ant-java-init () 1758 (defun flymake-simple-ant-java-init ()
1761 (flymake-simple-make-init-impl 'flymake-create-temp-with-folder-structure nil nil "build.xml" 'flymake-get-ant-cmdline)) 1759 (flymake-simple-make-init-impl 'flymake-create-temp-with-folder-structure nil nil "build.xml" 'flymake-get-ant-cmdline))
1762 1760
1763 (defun flymake-simple-java-cleanup (buffer) 1761 (defun flymake-simple-java-cleanup ()
1764 "Cleanup after `flymake-simple-make-java-init' -- delete temp file and dirs." 1762 "Cleanup after `flymake-simple-make-java-init' -- delete temp file and dirs."
1765 (let* ((temp-source-file-name (with-current-buffer buffer 1763 (flymake-safe-delete-file flymake-temp-source-file-name)
1766 flymake-temp-source-file-name))) 1764 (when flymake-temp-source-file-name
1767 (flymake-safe-delete-file temp-source-file-name) 1765 (flymake-delete-temp-directory
1768 (when temp-source-file-name 1766 (file-name-directory flymake-temp-source-file-name))))
1769 (flymake-delete-temp-directory (file-name-directory temp-source-file-name)))))
1770 1767
1771 ;;;; perl-specific init-cleanup routines 1768 ;;;; perl-specific init-cleanup routines
1772 (defun flymake-perl-init () 1769 (defun flymake-perl-init ()
1773 (let* ((temp-file (flymake-init-create-temp-buffer-copy 1770 (let* ((temp-file (flymake-init-create-temp-buffer-copy
1774 'flymake-create-temp-inplace)) 1771 'flymake-create-temp-inplace))