Mercurial > emacs
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)) |