diff options
| author | Richard M. Stallman | 2005-04-30 20:13:39 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 2005-04-30 20:13:39 +0000 |
| commit | 53ec26edede151a986ca4d828efb58c9ecc4edd6 (patch) | |
| tree | 41a5e2ec3d3248739c69dbd32bb552773ffd40c7 | |
| parent | f6c9b68362f40a48c21176cf49de74be14f11988 (diff) | |
| download | emacs-53ec26edede151a986ca4d828efb58c9ecc4edd6.tar.gz emacs-53ec26edede151a986ca4d828efb58c9ecc4edd6.zip | |
(flymake-split-string)
(flymake-split-string, flymake-log, flymake-pid-to-names)
(flymake-reg-names, flymake-get-source-buffer-name)
(flymake-unreg-names, flymake-add-line-err-info)
(flymake-add-err-info): Clarify docstrings.
(flymake-popup-menu, flymake-make-emacs-menu)
(flymake-make-xemacs-menu): Add docstrings.
(flymake-get-buffer-*, flymake-set-buffer-*): Functions deleted.
Set variables directly throughout.
| -rw-r--r-- | lisp/progmodes/flymake.el | 278 |
1 files changed, 108 insertions, 170 deletions
diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el index 73d77affdc4..a2fa660bff0 100644 --- a/lisp/progmodes/flymake.el +++ b/lisp/progmodes/flymake.el | |||
| @@ -62,7 +62,8 @@ | |||
| 62 | (replace-in-string str regexp rep))) | 62 | (replace-in-string str regexp rep))) |
| 63 | 63 | ||
| 64 | (defun flymake-split-string (str pattern) | 64 | (defun flymake-split-string (str pattern) |
| 65 | "Split, then remove first and/or last in case it's empty." | 65 | "Split STR into a list of substrings bounded by PATTERN. |
| 66 | Zero-length substrings at the beginning and end of the list are omitted." | ||
| 66 | (let* ((splitted (split-string str pattern))) | 67 | (let* ((splitted (split-string str pattern))) |
| 67 | (if (and (> (length splitted) 0) (= 0 (length (elt splitted 0)))) | 68 | (if (and (> (length splitted) 0) (= 0 (length (elt splitted 0)))) |
| 68 | (setq splitted (cdr splitted))) | 69 | (setq splitted (cdr splitted))) |
| @@ -86,7 +87,12 @@ | |||
| 86 | (lambda (&optional arg) (save-excursion (end-of-line arg) (point))))) | 87 | (lambda (&optional arg) (save-excursion (end-of-line arg) (point))))) |
| 87 | 88 | ||
| 88 | (defun flymake-popup-menu (pos menu-data) | 89 | (defun flymake-popup-menu (pos menu-data) |
| 89 | (if (and (fboundp 'popup-menu) (fboundp 'make-event)) | 90 | "Pop up the flymake menu at position POS, using the data MENU-DATA. |
| 91 | POS is a list of the form ((X Y) WINDOW), where X and Y are | ||
| 92 | pixels positions from the top left corner of WINDOW's frame. | ||
| 93 | MENU-DATA is a list of error and warning messages returned by | ||
| 94 | `flymake-make-err-menu-data'." | ||
| 95 | (if (featurep 'xemacs) | ||
| 90 | (let* ((x-pos (nth 0 (nth 0 pos))) | 96 | (let* ((x-pos (nth 0 (nth 0 pos))) |
| 91 | (y-pos (nth 1 (nth 0 pos))) | 97 | (y-pos (nth 1 (nth 0 pos))) |
| 92 | (fake-event-props '(button 1 x 1 y 1))) | 98 | (fake-event-props '(button 1 x 1 y 1))) |
| @@ -96,6 +102,10 @@ | |||
| 96 | (x-popup-menu pos (flymake-make-emacs-menu menu-data)))) | 102 | (x-popup-menu pos (flymake-make-emacs-menu menu-data)))) |
| 97 | 103 | ||
| 98 | (defun flymake-make-emacs-menu (menu-data) | 104 | (defun flymake-make-emacs-menu (menu-data) |
| 105 | "Return a menu specifier using MENU-DATA. | ||
| 106 | MENU-DATA is a list of error and warning messages returned by | ||
| 107 | `flymake-make-err-menu-data'. | ||
| 108 | See `x-popup-menu' for the menu specifier format." | ||
| 99 | (let* ((menu-title (nth 0 menu-data)) | 109 | (let* ((menu-title (nth 0 menu-data)) |
| 100 | (menu-items (nth 1 menu-data)) | 110 | (menu-items (nth 1 menu-data)) |
| 101 | (menu-commands nil)) | 111 | (menu-commands nil)) |
| @@ -109,6 +119,7 @@ | |||
| 109 | (defun flymake-nop ()) | 119 | (defun flymake-nop ()) |
| 110 | 120 | ||
| 111 | (defun flymake-make-xemacs-menu (menu-data) | 121 | (defun flymake-make-xemacs-menu (menu-data) |
| 122 | "Return a menu specifier using MENU-DATA." | ||
| 112 | (let* ((menu-title (nth 0 menu-data)) | 123 | (let* ((menu-title (nth 0 menu-data)) |
| 113 | (menu-items (nth 1 menu-data)) | 124 | (menu-items (nth 1 menu-data)) |
| 114 | (menu-commands nil)) | 125 | (menu-commands nil)) |
| @@ -152,7 +163,11 @@ | |||
| 152 | :type 'integer) | 163 | :type 'integer) |
| 153 | 164 | ||
| 154 | (defun flymake-log (level text &rest args) | 165 | (defun flymake-log (level text &rest args) |
| 155 | "Log a message with optional arguments." | 166 | "Log a message at level LEVEL. |
| 167 | If LEVEL is higher than `flymake-log-level', the message is | ||
| 168 | ignored. Otherwise, it is printed using `message'. | ||
| 169 | TEXT is a format control string, and the remaining arguments ARGS | ||
| 170 | are the string substitutions (see `format')." | ||
| 156 | (if (<= level flymake-log-level) | 171 | (if (<= level flymake-log-level) |
| 157 | (let* ((msg (apply 'format text args))) | 172 | (let* ((msg (apply 'format text args))) |
| 158 | (message msg) | 173 | (message msg) |
| @@ -176,69 +191,37 @@ | |||
| 176 | tmp)) | 191 | tmp)) |
| 177 | 192 | ||
| 178 | (defvar flymake-pid-to-names (flymake-makehash) | 193 | (defvar flymake-pid-to-names (flymake-makehash) |
| 179 | "pid -> source buffer name, output file name mapping.") | 194 | "Hash table mapping PIDs to source buffer names and output files.") |
| 180 | 195 | ||
| 181 | (defun flymake-reg-names (pid source-buffer-name) | 196 | (defun flymake-reg-names (pid source-buffer-name) |
| 182 | "Save into in PID map." | 197 | "Associate PID with SOURCE-BUFFER-NAME in `flymake-pid-to-names'." |
| 183 | (unless (stringp source-buffer-name) | 198 | (unless (stringp source-buffer-name) |
| 184 | (error "Invalid buffer name")) | 199 | (error "Invalid buffer name")) |
| 185 | (puthash pid (list source-buffer-name) flymake-pid-to-names)) | 200 | (puthash pid (list source-buffer-name) flymake-pid-to-names)) |
| 186 | 201 | ||
| 187 | (defun flymake-get-source-buffer-name (pid) | 202 | (defun flymake-get-source-buffer-name (pid) |
| 188 | "Return buffer name stored in PID map." | 203 | "Return buffer name associated with PID in `flymake-pid-to-names'." |
| 189 | (nth 0 (gethash pid flymake-pid-to-names))) | 204 | (nth 0 (gethash pid flymake-pid-to-names))) |
| 190 | 205 | ||
| 191 | (defun flymake-unreg-names (pid) | 206 | (defun flymake-unreg-names (pid) |
| 192 | "Delete PID->buffer name mapping." | 207 | "Remove the entry associated with PID from `flymake-pid-to-names'." |
| 193 | (remhash pid flymake-pid-to-names)) | 208 | (remhash pid flymake-pid-to-names)) |
| 194 | 209 | ||
| 195 | (defun flymake-get-buffer-var (buffer var-name) | ||
| 196 | "Switch to BUFFER if necessary and return local variable VAR-NAME." | ||
| 197 | (unless (bufferp buffer) | ||
| 198 | (error "Invalid buffer")) | ||
| 199 | |||
| 200 | (if (eq buffer (current-buffer)) | ||
| 201 | (symbol-value var-name) | ||
| 202 | (with-current-buffer buffer | ||
| 203 | (symbol-value var-name)))) | ||
| 204 | |||
| 205 | (defun flymake-set-buffer-var (buffer var-name var-value) | ||
| 206 | "Switch to BUFFER if necessary and set local variable VAR-NAME to VAR-VALUE." | ||
| 207 | (unless (bufferp buffer) | ||
| 208 | (error "Invalid buffer")) | ||
| 209 | |||
| 210 | (if (eq buffer (current-buffer)) | ||
| 211 | (set var-name var-value) | ||
| 212 | (with-current-buffer buffer | ||
| 213 | (set var-name var-value)))) | ||
| 214 | |||
| 215 | (defvar flymake-buffer-data (flymake-makehash) | 210 | (defvar flymake-buffer-data (flymake-makehash) |
| 216 | "Data specific to syntax check tool, in name-value pairs.") | 211 | "Data specific to syntax check tool, in name-value pairs.") |
| 217 | 212 | ||
| 218 | (make-variable-buffer-local 'flymake-buffer-data) | 213 | (make-variable-buffer-local 'flymake-buffer-data) |
| 219 | 214 | ||
| 220 | (defun flymake-get-buffer-data (buffer) | ||
| 221 | (flymake-get-buffer-var buffer 'flymake-buffer-data)) | ||
| 222 | |||
| 223 | (defun flymake-set-buffer-data (buffer data) | ||
| 224 | (flymake-set-buffer-var buffer 'flymake-buffer-data data)) | ||
| 225 | |||
| 226 | (defun flymake-get-buffer-value (buffer name) | 215 | (defun flymake-get-buffer-value (buffer name) |
| 227 | (gethash name (flymake-get-buffer-data buffer))) | 216 | (gethash name (with-current-buffer buffer flymake-buffer-data))) |
| 228 | 217 | ||
| 229 | (defun flymake-set-buffer-value (buffer name value) | 218 | (defun flymake-set-buffer-value (buffer name value) |
| 230 | (puthash name value (flymake-get-buffer-data buffer))) | 219 | (puthash name value (with-current-buffer buffer flymake-buffer-data))) |
| 231 | 220 | ||
| 232 | (defvar flymake-output-residual nil) | 221 | (defvar flymake-output-residual nil) |
| 233 | 222 | ||
| 234 | (make-variable-buffer-local 'flymake-output-residual) | 223 | (make-variable-buffer-local 'flymake-output-residual) |
| 235 | 224 | ||
| 236 | (defun flymake-get-buffer-output-residual (buffer) | ||
| 237 | (flymake-get-buffer-var buffer 'flymake-output-residual)) | ||
| 238 | |||
| 239 | (defun flymake-set-buffer-output-residual (buffer residual) | ||
| 240 | (flymake-set-buffer-var buffer 'flymake-output-residual residual)) | ||
| 241 | |||
| 242 | (defcustom flymake-allowed-file-name-masks | 225 | (defcustom flymake-allowed-file-name-masks |
| 243 | '((".+\\.c$" flymake-simple-make-init flymake-simple-cleanup flymake-get-real-file-name) | 226 | '((".+\\.c$" flymake-simple-make-init flymake-simple-cleanup flymake-get-real-file-name) |
| 244 | (".+\\.cpp$" flymake-simple-make-init flymake-simple-cleanup flymake-get-real-file-name) | 227 | (".+\\.cpp$" flymake-simple-make-init flymake-simple-cleanup flymake-get-real-file-name) |
| @@ -642,35 +625,38 @@ It's flymake process filter." | |||
| 642 | 625 | ||
| 643 | (flymake-parse-residual source-buffer) | 626 | (flymake-parse-residual source-buffer) |
| 644 | (flymake-post-syntax-check source-buffer exit-status command) | 627 | (flymake-post-syntax-check source-buffer exit-status command) |
| 645 | (flymake-set-buffer-is-running source-buffer nil)))) | 628 | (setq flymake-is-running nil)))) |
| 646 | (error | 629 | (error |
| 647 | (let ((err-str (format "Error in process sentinel for buffer %s: %s" | 630 | (let ((err-str (format "Error in process sentinel for buffer %s: %s" |
| 648 | source-buffer (error-message-string err)))) | 631 | source-buffer (error-message-string err)))) |
| 649 | (flymake-log 0 err-str) | 632 | (flymake-log 0 err-str) |
| 650 | (flymake-set-buffer-is-running source-buffer nil))))))) | 633 | (with-current-buffer source-buffer |
| 634 | (setq flymake-is-running nil)))))))) | ||
| 651 | 635 | ||
| 652 | (defun flymake-post-syntax-check (source-buffer exit-status command) | 636 | (defun flymake-post-syntax-check (source-buffer exit-status command) |
| 653 | (flymake-set-buffer-err-info source-buffer (flymake-get-buffer-new-err-info source-buffer)) | 637 | (with-current-buffer source-buffer |
| 654 | (flymake-set-buffer-new-err-info source-buffer nil) | 638 | (setq flymake-err-info flymake-new-err-info) |
| 655 | 639 | (setq flymake-new-err-info nil) | |
| 656 | (flymake-set-buffer-err-info source-buffer (flymake-fix-line-numbers | 640 | (setq flymake-err-info |
| 657 | (flymake-get-buffer-err-info source-buffer) | 641 | (flymake-fix-line-numbers |
| 658 | 1 | 642 | flymake-err-info 1 (flymake-count-lines source-buffer)))) |
| 659 | (flymake-count-lines source-buffer))) | ||
| 660 | (flymake-delete-own-overlays source-buffer) | 643 | (flymake-delete-own-overlays source-buffer) |
| 661 | (flymake-highlight-err-lines source-buffer (flymake-get-buffer-err-info source-buffer)) | 644 | (flymake-highlight-err-lines |
| 662 | 645 | source-buffer (with-current-buffer source-buffer flymake-err-info)) | |
| 663 | (let ((err-count (flymake-get-err-count (flymake-get-buffer-err-info source-buffer) "e")) | 646 | (let (err-count warn-count) |
| 664 | (warn-count (flymake-get-err-count (flymake-get-buffer-err-info source-buffer) "w"))) | 647 | (with-current-buffer source-buffer |
| 665 | 648 | (setq err-count (flymake-get-err-count flymake-err-info "e")) | |
| 666 | (flymake-log 2 "%s: %d error(s), %d warning(s) in %.2f second(s)" | 649 | (setq warn-count (flymake-get-err-count flymake-err-info "w")) |
| 650 | (flymake-log 2 "%s: %d error(s), %d warning(s) in %.2f second(s)" | ||
| 667 | (buffer-name source-buffer) err-count warn-count | 651 | (buffer-name source-buffer) err-count warn-count |
| 668 | (- (flymake-float-time) (flymake-get-buffer-check-start-time source-buffer))) | 652 | (- (flymake-float-time) flymake-check-start-time)) |
| 669 | (flymake-set-buffer-check-start-time source-buffer nil) | 653 | (setq flymake-check-start-time nil)) |
| 654 | |||
| 670 | (if (and (equal 0 err-count) (equal 0 warn-count)) | 655 | (if (and (equal 0 err-count) (equal 0 warn-count)) |
| 671 | (if (equal 0 exit-status) | 656 | (if (equal 0 exit-status) |
| 672 | (flymake-report-status source-buffer "" "") ; PASSED | 657 | (flymake-report-status source-buffer "" "") ; PASSED |
| 673 | (if (not (flymake-get-buffer-check-was-interrupted source-buffer)) | 658 | (if (not (with-current-buffer source-buffer |
| 659 | flymake-check-was-interrupted)) | ||
| 674 | (flymake-report-fatal-status (current-buffer) "CFGERR" | 660 | (flymake-report-fatal-status (current-buffer) "CFGERR" |
| 675 | (format "Configuration error has occured while running %s" command)) | 661 | (format "Configuration error has occured while running %s" command)) |
| 676 | (flymake-report-status source-buffer nil ""))) ; "STOPPED" | 662 | (flymake-report-status source-buffer nil ""))) ; "STOPPED" |
| @@ -679,38 +665,34 @@ It's flymake process filter." | |||
| 679 | (defun flymake-parse-output-and-residual (source-buffer output) | 665 | (defun flymake-parse-output-and-residual (source-buffer output) |
| 680 | "Split OUTPUT into lines, merge in residual if necessary." | 666 | "Split OUTPUT into lines, merge in residual if necessary." |
| 681 | (with-current-buffer source-buffer | 667 | (with-current-buffer source-buffer |
| 682 | (let* ((buffer-residual (flymake-get-buffer-output-residual source-buffer)) | 668 | (let* ((buffer-residual flymake-output-residual) |
| 683 | (total-output (if buffer-residual (concat buffer-residual output) output)) | 669 | (total-output (if buffer-residual (concat buffer-residual output) output)) |
| 684 | (lines-and-residual (flymake-split-output total-output)) | 670 | (lines-and-residual (flymake-split-output total-output)) |
| 685 | (lines (nth 0 lines-and-residual)) | 671 | (lines (nth 0 lines-and-residual)) |
| 686 | (new-residual (nth 1 lines-and-residual))) | 672 | (new-residual (nth 1 lines-and-residual))) |
| 687 | 673 | (with-current-buffer source-buffer | |
| 688 | (flymake-set-buffer-output-residual source-buffer new-residual) | 674 | (setq flymake-output-residual new-residual) |
| 689 | (flymake-set-buffer-new-err-info source-buffer (flymake-parse-err-lines | 675 | (setq flymake-new-err-info |
| 690 | (flymake-get-buffer-new-err-info source-buffer) | 676 | (flymake-parse-err-lines |
| 691 | source-buffer lines))))) | 677 | flymake-new-err-info |
| 678 | source-buffer lines)))))) | ||
| 692 | 679 | ||
| 693 | (defun flymake-parse-residual (source-buffer) | 680 | (defun flymake-parse-residual (source-buffer) |
| 694 | "Parse residual if it's non empty." | 681 | "Parse residual if it's non empty." |
| 695 | (with-current-buffer source-buffer | 682 | (with-current-buffer source-buffer |
| 696 | (when (flymake-get-buffer-output-residual source-buffer) | 683 | (when flymake-output-residual |
| 697 | (flymake-set-buffer-new-err-info source-buffer (flymake-parse-err-lines | 684 | (setq flymake-new-err-info |
| 698 | (flymake-get-buffer-new-err-info source-buffer) | 685 | (flymake-parse-err-lines |
| 699 | source-buffer | 686 | flymake-new-err-info |
| 700 | (list (flymake-get-buffer-output-residual source-buffer)))) | 687 | source-buffer |
| 701 | (flymake-set-buffer-output-residual source-buffer nil)))) | 688 | (list flymake-output-residual))) |
| 689 | (setq flymake-output-residual nil)))) | ||
| 702 | 690 | ||
| 703 | (defvar flymake-err-info nil | 691 | (defvar flymake-err-info nil |
| 704 | "Sorted list of line numbers and lists of err info in the form (file, err-text).") | 692 | "Sorted list of line numbers and lists of err info in the form (file, err-text).") |
| 705 | 693 | ||
| 706 | (make-variable-buffer-local 'flymake-err-info) | 694 | (make-variable-buffer-local 'flymake-err-info) |
| 707 | 695 | ||
| 708 | (defun flymake-get-buffer-err-info (buffer) | ||
| 709 | (flymake-get-buffer-var buffer 'flymake-err-info)) | ||
| 710 | |||
| 711 | (defun flymake-set-buffer-err-info (buffer err-info) | ||
| 712 | (flymake-set-buffer-var buffer 'flymake-err-info err-info)) | ||
| 713 | |||
| 714 | (defun flymake-er-make-er (line-no line-err-info-list) | 696 | (defun flymake-er-make-er (line-no line-err-info-list) |
| 715 | (list line-no line-err-info-list)) | 697 | (list line-no line-err-info-list)) |
| 716 | 698 | ||
| @@ -725,12 +707,6 @@ It's flymake process filter." | |||
| 725 | 707 | ||
| 726 | (make-variable-buffer-local 'flymake-new-err-info) | 708 | (make-variable-buffer-local 'flymake-new-err-info) |
| 727 | 709 | ||
| 728 | (defun flymake-get-buffer-new-err-info (buffer) | ||
| 729 | (flymake-get-buffer-var buffer 'flymake-new-err-info)) | ||
| 730 | |||
| 731 | (defun flymake-set-buffer-new-err-info (buffer new-err-info) | ||
| 732 | (flymake-set-buffer-var buffer 'flymake-new-err-info new-err-info)) | ||
| 733 | |||
| 734 | ;; getters/setters for line-err-info: (file, line, type, text). | 710 | ;; getters/setters for line-err-info: (file, line, type, text). |
| 735 | (defun flymake-ler-make-ler (file line type text &optional full-file) | 711 | (defun flymake-ler-make-ler (file line type text &optional full-file) |
| 736 | (list file line type text full-file)) | 712 | (list file line type text full-file)) |
| @@ -1067,7 +1043,11 @@ Return its components if so, nil if no." | |||
| 1067 | (and (not (flymake-ler-get-file line-one)) (not (flymake-ler-get-file line-two))))))) | 1043 | (and (not (flymake-ler-get-file line-one)) (not (flymake-ler-get-file line-two))))))) |
| 1068 | 1044 | ||
| 1069 | (defun flymake-add-line-err-info (line-err-info-list line-err-info) | 1045 | (defun flymake-add-line-err-info (line-err-info-list line-err-info) |
| 1070 | "Insert new err info favoring sorting: err-type e/w, filename nil/non-nil." | 1046 | "Update LINE-ERR-INFO-LIST with the error LINE-ERR-INFO. |
| 1047 | For the format of LINE-ERR-INFO, see `flymake-ler-make-ler'. | ||
| 1048 | The new element is inserted in the proper position, according to | ||
| 1049 | the predicate `flymake-line-err-info-is-less-or-equal'. | ||
| 1050 | The updated value of LINE-ERR-INFO-LIST is returned." | ||
| 1071 | (if (not line-err-info-list) | 1051 | (if (not line-err-info-list) |
| 1072 | (list line-err-info) | 1052 | (list line-err-info) |
| 1073 | (let* ((count (length line-err-info-list)) | 1053 | (let* ((count (length line-err-info-list)) |
| @@ -1079,7 +1059,10 @@ Return its components if so, nil if no." | |||
| 1079 | line-err-info-list))) | 1059 | line-err-info-list))) |
| 1080 | 1060 | ||
| 1081 | (defun flymake-add-err-info (err-info-list line-err-info) | 1061 | (defun flymake-add-err-info (err-info-list line-err-info) |
| 1082 | "Add error info (file line type text) to err info list preserving sort order." | 1062 | "Update ERR-INFO-LIST with the error LINE-ERR-INFO, preserving sort order. |
| 1063 | Returns the updated value of ERR-INFO-LIST. | ||
| 1064 | For the format of ERR-INFO-LIST, see `flymake-err-info'. | ||
| 1065 | For the format of LINE-ERR-INFO, see `flymake-ler-make-ler'." | ||
| 1083 | (let* ((line-no (if (flymake-ler-get-file line-err-info) 1 (flymake-ler-get-line line-err-info))) | 1066 | (let* ((line-no (if (flymake-ler-get-file line-err-info) 1 (flymake-ler-get-line line-err-info))) |
| 1084 | (info-and-pos (flymake-find-err-info err-info-list line-no)) | 1067 | (info-and-pos (flymake-find-err-info err-info-list line-no)) |
| 1085 | (exists (car info-and-pos)) | 1068 | (exists (car info-and-pos)) |
| @@ -1202,16 +1185,16 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if | |||
| 1202 | (unless (bufferp buffer) | 1185 | (unless (bufferp buffer) |
| 1203 | (error "Expected a buffer")) | 1186 | (error "Expected a buffer")) |
| 1204 | (with-current-buffer buffer | 1187 | (with-current-buffer buffer |
| 1205 | (flymake-log 3 "flymake is running: %s" (flymake-get-buffer-is-running buffer)) | 1188 | (flymake-log 3 "flymake is running: %s" flymake-is-running) |
| 1206 | (when (and (not (flymake-get-buffer-is-running buffer)) | 1189 | (when (and (not flymake-is-running) |
| 1207 | (flymake-can-syntax-check-file (buffer-file-name buffer))) | 1190 | (flymake-can-syntax-check-file (buffer-file-name buffer))) |
| 1208 | (when (or (not flymake-compilation-prevents-syntax-check) | 1191 | (when (or (not flymake-compilation-prevents-syntax-check) |
| 1209 | (not (flymake-compilation-is-running))) ;+ (flymake-rep-ort-status buffer "COMP") | 1192 | (not (flymake-compilation-is-running))) ;+ (flymake-rep-ort-status buffer "COMP") |
| 1210 | (flymake-clear-buildfile-cache) | 1193 | (flymake-clear-buildfile-cache) |
| 1211 | (flymake-clear-project-include-dirs-cache) | 1194 | (flymake-clear-project-include-dirs-cache) |
| 1212 | 1195 | ||
| 1213 | (flymake-set-buffer-check-was-interrupted buffer nil) | 1196 | (setq flymake-check-was-interrupted nil) |
| 1214 | (flymake-set-buffer-data buffer (flymake-makehash 'equal)) | 1197 | (setq flymake-buffer-data (flymake-makehash 'equal)) |
| 1215 | 1198 | ||
| 1216 | (let* ((source-file-name (buffer-file-name buffer)) | 1199 | (let* ((source-file-name (buffer-file-name buffer)) |
| 1217 | (init-f (flymake-get-init-function source-file-name)) | 1200 | (init-f (flymake-get-init-function source-file-name)) |
| @@ -1225,7 +1208,7 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if | |||
| 1225 | (flymake-log 0 "init function %s for %s failed, cleaning up" init-f source-file-name) | 1208 | (flymake-log 0 "init function %s for %s failed, cleaning up" init-f source-file-name) |
| 1226 | (funcall cleanup-f buffer)) | 1209 | (funcall cleanup-f buffer)) |
| 1227 | (progn | 1210 | (progn |
| 1228 | (flymake-set-buffer-last-change-time buffer nil) | 1211 | (setq flymake-last-change-time nil) |
| 1229 | (flymake-start-syntax-check-process buffer cmd args dir)))))))) | 1212 | (flymake-start-syntax-check-process buffer cmd args dir)))))))) |
| 1230 | 1213 | ||
| 1231 | (defun flymake-start-syntax-check-process (buffer cmd args dir) | 1214 | (defun flymake-start-syntax-check-process (buffer cmd args dir) |
| @@ -1242,9 +1225,10 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if | |||
| 1242 | 1225 | ||
| 1243 | (flymake-reg-names (process-id process) (buffer-name buffer)) | 1226 | (flymake-reg-names (process-id process) (buffer-name buffer)) |
| 1244 | 1227 | ||
| 1245 | (flymake-set-buffer-is-running buffer t) | 1228 | (with-current-buffer buffer |
| 1246 | (flymake-set-buffer-last-change-time buffer nil) | 1229 | (setq flymake-is-running t) |
| 1247 | (flymake-set-buffer-check-start-time buffer (flymake-float-time)) | 1230 | (setq flymake-last-change-time nil) |
| 1231 | (setq flymake-check-start-time (flymake-float-time))) | ||
| 1248 | 1232 | ||
| 1249 | (flymake-report-status buffer nil "*") | 1233 | (flymake-report-status buffer nil "*") |
| 1250 | (flymake-log 2 "started process %d, command=%s, dir=%s" | 1234 | (flymake-log 2 "started process %d, command=%s, dir=%s" |
| @@ -1264,7 +1248,8 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if | |||
| 1264 | (signal-process pid 9) | 1248 | (signal-process pid 9) |
| 1265 | (let* ((buffer-name (flymake-get-source-buffer-name pid))) | 1249 | (let* ((buffer-name (flymake-get-source-buffer-name pid))) |
| 1266 | (when (and buffer-name (get-buffer buffer-name)) | 1250 | (when (and buffer-name (get-buffer buffer-name)) |
| 1267 | (flymake-set-buffer-check-was-interrupted (get-buffer buffer-name) t))) | 1251 | (with-current-buffer (get-buffer buffer-name) |
| 1252 | (setq flymake-check-was-interrupted t)))) | ||
| 1268 | (flymake-log 1 "killed process %d" pid)) | 1253 | (flymake-log 1 "killed process %d" pid)) |
| 1269 | 1254 | ||
| 1270 | (defun flymake-stop-all-syntax-checks () | 1255 | (defun flymake-stop-all-syntax-checks () |
| @@ -1288,56 +1273,26 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if | |||
| 1288 | 1273 | ||
| 1289 | (make-variable-buffer-local 'flymake-is-running) | 1274 | (make-variable-buffer-local 'flymake-is-running) |
| 1290 | 1275 | ||
| 1291 | (defun flymake-get-buffer-is-running (buffer) | ||
| 1292 | (flymake-get-buffer-var buffer 'flymake-is-running)) | ||
| 1293 | |||
| 1294 | (defun flymake-set-buffer-is-running (buffer is-running) | ||
| 1295 | (flymake-set-buffer-var buffer 'flymake-is-running is-running)) | ||
| 1296 | |||
| 1297 | (defvar flymake-timer nil | 1276 | (defvar flymake-timer nil |
| 1298 | "Timer for starting syntax check.") | 1277 | "Timer for starting syntax check.") |
| 1299 | 1278 | ||
| 1300 | (make-variable-buffer-local 'flymake-timer) | 1279 | (make-variable-buffer-local 'flymake-timer) |
| 1301 | 1280 | ||
| 1302 | (defun flymake-get-buffer-timer (buffer) | ||
| 1303 | (flymake-get-buffer-var buffer 'flymake-timer)) | ||
| 1304 | |||
| 1305 | (defun flymake-set-buffer-timer (buffer timer) | ||
| 1306 | (flymake-set-buffer-var buffer 'flymake-timer timer)) | ||
| 1307 | |||
| 1308 | (defvar flymake-last-change-time nil | 1281 | (defvar flymake-last-change-time nil |
| 1309 | "Time of last buffer change.") | 1282 | "Time of last buffer change.") |
| 1310 | 1283 | ||
| 1311 | (make-variable-buffer-local 'flymake-last-change-time) | 1284 | (make-variable-buffer-local 'flymake-last-change-time) |
| 1312 | 1285 | ||
| 1313 | (defun flymake-get-buffer-last-change-time (buffer) | ||
| 1314 | (flymake-get-buffer-var buffer 'flymake-last-change-time)) | ||
| 1315 | |||
| 1316 | (defun flymake-set-buffer-last-change-time (buffer change-time) | ||
| 1317 | (flymake-set-buffer-var buffer 'flymake-last-change-time change-time)) | ||
| 1318 | |||
| 1319 | (defvar flymake-check-start-time nil | 1286 | (defvar flymake-check-start-time nil |
| 1320 | "Time at which syntax check was started.") | 1287 | "Time at which syntax check was started.") |
| 1321 | 1288 | ||
| 1322 | (make-variable-buffer-local 'flymake-check-start-time) | 1289 | (make-variable-buffer-local 'flymake-check-start-time) |
| 1323 | 1290 | ||
| 1324 | (defun flymake-get-buffer-check-start-time (buffer) | ||
| 1325 | (flymake-get-buffer-var buffer 'flymake-check-start-time)) | ||
| 1326 | |||
| 1327 | (defun flymake-set-buffer-check-start-time (buffer check-start-time) | ||
| 1328 | (flymake-set-buffer-var buffer 'flymake-check-start-time check-start-time)) | ||
| 1329 | |||
| 1330 | (defvar flymake-check-was-interrupted nil | 1291 | (defvar flymake-check-was-interrupted nil |
| 1331 | "Non-nil if syntax check was killed by `flymake-compile'.") | 1292 | "Non-nil if syntax check was killed by `flymake-compile'.") |
| 1332 | 1293 | ||
| 1333 | (make-variable-buffer-local 'flymake-check-was-interrupted) | 1294 | (make-variable-buffer-local 'flymake-check-was-interrupted) |
| 1334 | 1295 | ||
| 1335 | (defun flymake-get-buffer-check-was-interrupted (buffer) | ||
| 1336 | (flymake-get-buffer-var buffer 'flymake-check-was-interrupted)) | ||
| 1337 | |||
| 1338 | (defun flymake-set-buffer-check-was-interrupted (buffer interrupted) | ||
| 1339 | (flymake-set-buffer-var buffer 'flymake-check-was-interrupted interrupted)) | ||
| 1340 | |||
| 1341 | (defcustom flymake-no-changes-timeout 0.5 | 1296 | (defcustom flymake-no-changes-timeout 0.5 |
| 1342 | "Time to wait after last change before starting compilation." | 1297 | "Time to wait after last change before starting compilation." |
| 1343 | :group 'flymake | 1298 | :group 'flymake |
| @@ -1345,12 +1300,13 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if | |||
| 1345 | 1300 | ||
| 1346 | (defun flymake-on-timer-event (buffer) | 1301 | (defun flymake-on-timer-event (buffer) |
| 1347 | "Start a syntax check for buffer BUFFER if necessary." | 1302 | "Start a syntax check for buffer BUFFER if necessary." |
| 1348 | ;;+(flymake-log 3 "timer: running=%s, time=%s, cur-time=%s" (flymake-get-buffer-is-running buffer) (flymake-get-buffer-last-change-time buffer) (flymake-float-time)) | 1303 | (when (bufferp buffer) |
| 1349 | (when (and (bufferp buffer) (not (flymake-get-buffer-is-running buffer))) | ||
| 1350 | (with-current-buffer buffer | 1304 | (with-current-buffer buffer |
| 1351 | (when (and (flymake-get-buffer-last-change-time buffer) | 1305 | (when (and (not flymake-is-running) |
| 1352 | (> (flymake-float-time) (+ flymake-no-changes-timeout (flymake-get-buffer-last-change-time buffer)))) | 1306 | flymake-last-change-time |
| 1353 | (flymake-set-buffer-last-change-time buffer nil) | 1307 | (> (flymake-float-time) (+ flymake-no-changes-timeout flymake-last-change-time))) |
| 1308 | |||
| 1309 | (setq flymake-last-change-time nil) | ||
| 1354 | (flymake-log 3 "starting syntax check as more than 1 second passed since last change") | 1310 | (flymake-log 3 "starting syntax check as more than 1 second passed since last change") |
| 1355 | (flymake-start-syntax-check buffer))))) | 1311 | (flymake-start-syntax-check buffer))))) |
| 1356 | 1312 | ||
| @@ -1391,7 +1347,7 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if | |||
| 1391 | "Display a menu with errors/warnings for current line if it has errors and/or warnings." | 1347 | "Display a menu with errors/warnings for current line if it has errors and/or warnings." |
| 1392 | (interactive) | 1348 | (interactive) |
| 1393 | (let* ((line-no (flymake-current-line-no)) | 1349 | (let* ((line-no (flymake-current-line-no)) |
| 1394 | (line-err-info-list (nth 0 (flymake-find-err-info (flymake-get-buffer-err-info (current-buffer)) line-no))) | 1350 | (line-err-info-list (nth 0 (flymake-find-err-info flymake-err-info line-no))) |
| 1395 | (menu-data (flymake-make-err-menu-data line-no line-err-info-list)) | 1351 | (menu-data (flymake-make-err-menu-data line-no line-err-info-list)) |
| 1396 | (choice nil) | 1352 | (choice nil) |
| 1397 | (mouse-pos (flymake-get-point-pixel-pos)) | 1353 | (mouse-pos (flymake-get-point-pixel-pos)) |
| @@ -1442,46 +1398,27 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if | |||
| 1442 | 1398 | ||
| 1443 | (make-variable-buffer-local 'flymake-mode-line) | 1399 | (make-variable-buffer-local 'flymake-mode-line) |
| 1444 | 1400 | ||
| 1445 | (defun flymake-get-buffer-mode-line (buffer) | ||
| 1446 | (flymake-get-buffer-var buffer 'flymake-mode-line)) | ||
| 1447 | |||
| 1448 | (defun flymake-set-buffer-mode-line (buffer mode-line-string) | ||
| 1449 | (flymake-set-buffer-var buffer 'flymake-mode-line mode-line-string)) | ||
| 1450 | |||
| 1451 | (defvar flymake-mode-line-e-w nil) | 1401 | (defvar flymake-mode-line-e-w nil) |
| 1452 | 1402 | ||
| 1453 | (make-variable-buffer-local 'flymake-mode-line-e-w) | 1403 | (make-variable-buffer-local 'flymake-mode-line-e-w) |
| 1454 | 1404 | ||
| 1455 | (defun flymake-get-buffer-mode-line-e-w (buffer) | ||
| 1456 | (flymake-get-buffer-var buffer 'flymake-mode-line-e-w)) | ||
| 1457 | |||
| 1458 | (defun flymake-set-buffer-mode-line-e-w (buffer e-w) | ||
| 1459 | (flymake-set-buffer-var buffer 'flymake-mode-line-e-w e-w)) | ||
| 1460 | |||
| 1461 | (defvar flymake-mode-line-status nil) | 1405 | (defvar flymake-mode-line-status nil) |
| 1462 | 1406 | ||
| 1463 | (make-variable-buffer-local 'flymake-mode-line-status) | 1407 | (make-variable-buffer-local 'flymake-mode-line-status) |
| 1464 | 1408 | ||
| 1465 | (defun flymake-get-buffer-mode-line-status (buffer) | ||
| 1466 | (flymake-get-buffer-var buffer 'flymake-mode-line-status)) | ||
| 1467 | |||
| 1468 | (defun flymake-set-buffer-mode-line-status (buffer status) | ||
| 1469 | (flymake-set-buffer-var buffer 'flymake-mode-line-status status)) | ||
| 1470 | |||
| 1471 | (defun flymake-report-status (buffer e-w &optional status) | 1409 | (defun flymake-report-status (buffer e-w &optional status) |
| 1472 | "Show status in mode line." | 1410 | "Show status in mode line." |
| 1473 | (when (bufferp buffer) | 1411 | (when (bufferp buffer) |
| 1474 | (with-current-buffer buffer | 1412 | (with-current-buffer buffer |
| 1475 | (when e-w | 1413 | (when e-w |
| 1476 | (flymake-set-buffer-mode-line-e-w buffer e-w) | 1414 | (setq flymake-mode-line-e-w e-w)) |
| 1477 | ) | ||
| 1478 | (when status | 1415 | (when status |
| 1479 | (flymake-set-buffer-mode-line-status buffer status)) | 1416 | (setq flymake-mode-line-status status)) |
| 1480 | (let* ((mode-line " Flymake")) | 1417 | (let* ((mode-line " Flymake")) |
| 1481 | (when (> (length (flymake-get-buffer-mode-line-e-w buffer)) 0) | 1418 | (when (> (length flymake-mode-line-e-w) 0) |
| 1482 | (setq mode-line (concat mode-line ":" (flymake-get-buffer-mode-line-e-w buffer)))) | 1419 | (setq mode-line (concat mode-line ":" flymake-mode-line-e-w))) |
| 1483 | (setq mode-line (concat mode-line (flymake-get-buffer-mode-line-status buffer))) | 1420 | (setq mode-line (concat mode-line flymake-mode-line-status)) |
| 1484 | (flymake-set-buffer-mode-line buffer mode-line) | 1421 | (setq flymake-mode-line mode-line) |
| 1485 | (force-mode-line-update))))) | 1422 | (force-mode-line-update))))) |
| 1486 | 1423 | ||
| 1487 | (defun flymake-display-warning (warning) | 1424 | (defun flymake-display-warning (warning) |
| @@ -1532,7 +1469,8 @@ With arg, turn Flymake mode on if and only if arg is positive." | |||
| 1532 | 1469 | ||
| 1533 | (flymake-report-status (current-buffer) "" "") | 1470 | (flymake-report-status (current-buffer) "" "") |
| 1534 | 1471 | ||
| 1535 | (flymake-set-buffer-timer (current-buffer) (run-at-time nil 1 'flymake-on-timer-event (current-buffer))) | 1472 | (setq flymake-timer |
| 1473 | (run-at-time nil 1 'flymake-on-timer-event (current-buffer))) | ||
| 1536 | 1474 | ||
| 1537 | (setq flymake-mode t) | 1475 | (setq flymake-mode t) |
| 1538 | (flymake-log 1 "flymake mode turned ON for buffer %s" (buffer-name (current-buffer))) | 1476 | (flymake-log 1 "flymake mode turned ON for buffer %s" (buffer-name (current-buffer))) |
| @@ -1550,12 +1488,11 @@ With arg, turn Flymake mode on if and only if arg is positive." | |||
| 1550 | 1488 | ||
| 1551 | (flymake-delete-own-overlays (current-buffer)) | 1489 | (flymake-delete-own-overlays (current-buffer)) |
| 1552 | 1490 | ||
| 1553 | (when (flymake-get-buffer-timer (current-buffer)) | 1491 | (when flymake-timer |
| 1554 | (cancel-timer (flymake-get-buffer-timer (current-buffer))) | 1492 | (cancel-timer flymake-timer) |
| 1555 | (flymake-set-buffer-timer (current-buffer) nil)) | 1493 | (setq flymake-timer nil)) |
| 1556 | |||
| 1557 | (flymake-set-buffer-is-running (current-buffer) nil) | ||
| 1558 | 1494 | ||
| 1495 | (setq flymake-is-running nil) | ||
| 1559 | (setq flymake-mode nil) | 1496 | (setq flymake-mode nil) |
| 1560 | (flymake-log 1 "flymake mode turned OFF for buffer %s" (buffer-name (current-buffer))))) | 1497 | (flymake-log 1 "flymake mode turned OFF for buffer %s" (buffer-name (current-buffer))))) |
| 1561 | 1498 | ||
| @@ -1571,7 +1508,7 @@ With arg, turn Flymake mode on if and only if arg is positive." | |||
| 1571 | (when (and flymake-start-syntax-check-on-newline (equal new-text "\n")) | 1508 | (when (and flymake-start-syntax-check-on-newline (equal new-text "\n")) |
| 1572 | (flymake-log 3 "starting syntax check as new-line has been seen") | 1509 | (flymake-log 3 "starting syntax check as new-line has been seen") |
| 1573 | (flymake-start-syntax-check-for-current-buffer)) | 1510 | (flymake-start-syntax-check-for-current-buffer)) |
| 1574 | (flymake-set-buffer-last-change-time (current-buffer) (flymake-float-time)))) | 1511 | (setq flymake-last-change-time (flymake-float-time)))) |
| 1575 | 1512 | ||
| 1576 | (defun flymake-after-save-hook () | 1513 | (defun flymake-after-save-hook () |
| 1577 | (if (local-variable-p 'flymake-mode (current-buffer)) ; (???) other way to determine whether flymake is active in buffer being saved? | 1514 | (if (local-variable-p 'flymake-mode (current-buffer)) ; (???) other way to determine whether flymake is active in buffer being saved? |
| @@ -1580,9 +1517,9 @@ With arg, turn Flymake mode on if and only if arg is positive." | |||
| 1580 | (flymake-start-syntax-check-for-current-buffer)))) ; no more mode 3. cannot start check if mode 3 (to temp copies) is active - (???) | 1517 | (flymake-start-syntax-check-for-current-buffer)))) ; no more mode 3. cannot start check if mode 3 (to temp copies) is active - (???) |
| 1581 | 1518 | ||
| 1582 | (defun flymake-kill-buffer-hook () | 1519 | (defun flymake-kill-buffer-hook () |
| 1583 | (when (flymake-get-buffer-timer (current-buffer)) | 1520 | (when flymake-timer |
| 1584 | (cancel-timer (flymake-get-buffer-timer (current-buffer))) | 1521 | (cancel-timer flymake-timer) |
| 1585 | (flymake-set-buffer-timer (current-buffer) nil))) | 1522 | (setq flymake-timer nil))) |
| 1586 | 1523 | ||
| 1587 | (defun flymake-find-file-hook () | 1524 | (defun flymake-find-file-hook () |
| 1588 | ;;+(when flymake-start-syntax-check-on-find-file | 1525 | ;;+(when flymake-start-syntax-check-on-find-file |
| @@ -1636,9 +1573,9 @@ With arg, turn Flymake mode on if and only if arg is positive." | |||
| 1636 | (defun flymake-goto-next-error () | 1573 | (defun flymake-goto-next-error () |
| 1637 | "Go to next error in err ring." | 1574 | "Go to next error in err ring." |
| 1638 | (interactive) | 1575 | (interactive) |
| 1639 | (let ((line-no (flymake-get-next-err-line-no (flymake-get-buffer-err-info (current-buffer)) (flymake-current-line-no)))) | 1576 | (let ((line-no (flymake-get-next-err-line-no flymake-err-info (flymake-current-line-no)))) |
| 1640 | (when (not line-no) | 1577 | (when (not line-no) |
| 1641 | (setq line-no (flymake-get-first-err-line-no (flymake-get-buffer-err-info (current-buffer)))) | 1578 | (setq line-no (flymake-get-first-err-line-no flymake-err-info)) |
| 1642 | (flymake-log 1 "passed end of file")) | 1579 | (flymake-log 1 "passed end of file")) |
| 1643 | (if line-no | 1580 | (if line-no |
| 1644 | (flymake-goto-line line-no) | 1581 | (flymake-goto-line line-no) |
| @@ -1647,9 +1584,9 @@ With arg, turn Flymake mode on if and only if arg is positive." | |||
| 1647 | (defun flymake-goto-prev-error () | 1584 | (defun flymake-goto-prev-error () |
| 1648 | "Go to prev error in err ring." | 1585 | "Go to prev error in err ring." |
| 1649 | (interactive) | 1586 | (interactive) |
| 1650 | (let ((line-no (flymake-get-prev-err-line-no (flymake-get-buffer-err-info (current-buffer)) (flymake-current-line-no)))) | 1587 | (let ((line-no (flymake-get-prev-err-line-no flymake-err-info (flymake-current-line-no)))) |
| 1651 | (when (not line-no) | 1588 | (when (not line-no) |
| 1652 | (setq line-no (flymake-get-last-err-line-no (flymake-get-buffer-err-info (current-buffer)))) | 1589 | (setq line-no (flymake-get-last-err-line-no flymake-err-info)) |
| 1653 | (flymake-log 1 "passed beginning of file")) | 1590 | (flymake-log 1 "passed beginning of file")) |
| 1654 | (if line-no | 1591 | (if line-no |
| 1655 | (flymake-goto-line line-no) | 1592 | (flymake-goto-line line-no) |
| @@ -1721,7 +1658,8 @@ With arg, turn Flymake mode on if and only if arg is positive." | |||
| 1721 | Delete temp file." | 1658 | Delete temp file." |
| 1722 | (let* ((temp-source-file-name (flymake-get-buffer-value buffer "temp-source-file-name"))) | 1659 | (let* ((temp-source-file-name (flymake-get-buffer-value buffer "temp-source-file-name"))) |
| 1723 | (flymake-safe-delete-file temp-source-file-name) | 1660 | (flymake-safe-delete-file temp-source-file-name) |
| 1724 | (flymake-set-buffer-last-change-time buffer nil))) | 1661 | (with-current-buffer buffer |
| 1662 | (setq flymake-last-change-time nil)))) | ||
| 1725 | 1663 | ||
| 1726 | (defun flymake-get-real-file-name (buffer file-name-from-err-msg) | 1664 | (defun flymake-get-real-file-name (buffer file-name-from-err-msg) |
| 1727 | "Translate file name from error message to \"real\" file name. | 1665 | "Translate file name from error message to \"real\" file name. |