Mercurial > emacs
comparison lisp/progmodes/flymake.el @ 61943:26bd7a854809
(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.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sat, 30 Apr 2005 20:13:39 +0000 |
parents | b600a84e6555 |
children | a7e02ef1e3d6 |
comparison
equal
deleted
inserted
replaced
61942:cf8e7c12c048 | 61943:26bd7a854809 |
---|---|
60 (if (fboundp 'replace-regexp-in-string) | 60 (if (fboundp 'replace-regexp-in-string) |
61 (replace-regexp-in-string regexp rep str) | 61 (replace-regexp-in-string regexp rep str) |
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))) |
69 (if (and (> (length splitted) 0) (= 0 (length (elt splitted (1- (length splitted)))))) | 70 (if (and (> (length splitted) 0) (= 0 (length (elt splitted (1- (length splitted)))))) |
70 (setq splitted (reverse (cdr (reverse splitted))))) | 71 (setq splitted (reverse (cdr (reverse splitted))))) |
84 (if (fboundp 'line-end-position) | 85 (if (fboundp 'line-end-position) |
85 'line-end-position | 86 'line-end-position |
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))) |
93 (setq fake-event-props (plist-put fake-event-props 'x x-pos)) | 99 (setq fake-event-props (plist-put fake-event-props 'x x-pos)) |
94 (setq fake-event-props (plist-put fake-event-props 'y y-pos)) | 100 (setq fake-event-props (plist-put fake-event-props 'y y-pos)) |
95 (popup-menu (flymake-make-xemacs-menu menu-data) (make-event 'button-press fake-event-props))) | 101 (popup-menu (flymake-make-xemacs-menu menu-data) (make-event 'button-press fake-event-props))) |
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)) |
102 (setq menu-commands (mapcar (lambda (foo) | 112 (setq menu-commands (mapcar (lambda (foo) |
103 (cons (nth 0 foo) (nth 1 foo))) | 113 (cons (nth 0 foo) (nth 1 foo))) |
107 (if (featurep 'xemacs) (progn | 117 (if (featurep 'xemacs) (progn |
108 | 118 |
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)) |
115 (setq menu-commands (mapcar (lambda (foo) | 126 (setq menu-commands (mapcar (lambda (foo) |
116 (vector (nth 0 foo) (or (nth 1 foo) '(flymake-nop)) t)) | 127 (vector (nth 0 foo) (or (nth 1 foo) '(flymake-nop)) t)) |
150 -1 = NONE, 0 = ERROR, 1 = WARNING, 2 = INFO, 3 = DEBUG" | 161 -1 = NONE, 0 = ERROR, 1 = WARNING, 2 = INFO, 3 = DEBUG" |
151 :group 'flymake | 162 :group 'flymake |
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) |
159 ;;(with-temp-buffer | 174 ;;(with-temp-buffer |
160 ;; (insert msg) | 175 ;; (insert msg) |
174 (let ((tmp (copy-sequence list))) ; (???) | 189 (let ((tmp (copy-sequence list))) ; (???) |
175 (setcar (nthcdr pos tmp) val) | 190 (setcar (nthcdr pos tmp) val) |
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 | |
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 | 209 |
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 | |
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 | 224 |
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) |
245 (".+\\.xml$" flymake-xml-init flymake-simple-cleanup flymake-get-real-file-name) | 228 (".+\\.xml$" flymake-xml-init flymake-simple-cleanup flymake-get-real-file-name) |
640 (when source-buffer | 623 (when source-buffer |
641 (with-current-buffer source-buffer | 624 (with-current-buffer source-buffer |
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" |
677 (flymake-report-status source-buffer (format "%d/%d" err-count warn-count) "")))) | 663 (flymake-report-status source-buffer (format "%d/%d" err-count warn-count) "")))) |
678 | 664 |
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 |
717 (defun flymake-er-get-line (err-info) | 699 (defun flymake-er-get-line (err-info) |
718 (nth 0 err-info)) | 700 (nth 0 err-info)) |
722 | 704 |
723 (defvar flymake-new-err-info nil | 705 (defvar flymake-new-err-info nil |
724 "Same as 'flymake-err-info', effective when a syntax check is in progress.") | 706 "Same as 'flymake-err-info', effective when a syntax check is in progress.") |
725 | 707 |
726 (make-variable-buffer-local 'flymake-new-err-info) | 708 (make-variable-buffer-local 'flymake-new-err-info) |
727 | |
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 | 709 |
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)) |
737 | 713 |
1065 (and (string= (flymake-ler-get-type line-one) (flymake-ler-get-type line-two)) | 1041 (and (string= (flymake-ler-get-type line-one) (flymake-ler-get-type line-two)) |
1066 (or (and (flymake-ler-get-file line-one) (flymake-ler-get-file line-two)) | 1042 (or (and (flymake-ler-get-file line-one) (flymake-ler-get-file line-two)) |
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)) |
1074 (idx 0)) | 1054 (idx 0)) |
1075 (while (and (< idx count) (flymake-line-err-info-is-less-or-equal (nth idx line-err-info-list) line-err-info)) | 1055 (while (and (< idx count) (flymake-line-err-info-is-less-or-equal (nth idx line-err-info-list) line-err-info)) |
1077 (cond ((equal 0 idx) (setq line-err-info-list (cons line-err-info line-err-info-list))) | 1057 (cond ((equal 0 idx) (setq line-err-info-list (cons line-err-info line-err-info-list))) |
1078 (t (setq line-err-info-list (flymake-ins-after line-err-info-list (1- idx) line-err-info)))) | 1058 (t (setq line-err-info-list (flymake-ins-after line-err-info-list (1- idx) line-err-info)))) |
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)) |
1086 (pos (nth 1 info-and-pos)) | 1069 (pos (nth 1 info-and-pos)) |
1087 (line-err-info-list nil) | 1070 (line-err-info-list nil) |
1200 (defun flymake-start-syntax-check (buffer) | 1183 (defun flymake-start-syntax-check (buffer) |
1201 "Start syntax checking for buffer BUFFER." | 1184 "Start syntax checking for buffer BUFFER." |
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)) |
1218 (cleanup-f (flymake-get-cleanup-function source-file-name)) | 1201 (cleanup-f (flymake-get-cleanup-function source-file-name)) |
1219 (cmd-and-args (funcall init-f buffer)) | 1202 (cmd-and-args (funcall init-f buffer)) |
1223 (if (not cmd-and-args) | 1206 (if (not cmd-and-args) |
1224 (progn | 1207 (progn |
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) |
1232 "Start syntax check process." | 1215 "Start syntax check process." |
1233 (let* ((process nil)) | 1216 (let* ((process nil)) |
1240 (set-process-sentinel process 'flymake-process-sentinel) | 1223 (set-process-sentinel process 'flymake-process-sentinel) |
1241 (set-process-filter process 'flymake-process-filter) | 1224 (set-process-filter process 'flymake-process-filter) |
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" |
1251 (process-id process) (process-command process) default-directory) | 1235 (process-id process) (process-command process) default-directory) |
1252 process) | 1236 process) |
1262 (defun flymake-kill-process (pid &optional rest) | 1246 (defun flymake-kill-process (pid &optional rest) |
1263 "Kill process PID." | 1247 "Kill process PID." |
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 () |
1271 "Kill all syntax check processes." | 1256 "Kill all syntax check processes." |
1272 (interactive) | 1257 (interactive) |
1286 (defvar flymake-is-running nil | 1271 (defvar flymake-is-running nil |
1287 "If t, flymake syntax check process is running for the current buffer.") | 1272 "If t, flymake syntax check process is running for the current buffer.") |
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 | |
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 | 1295 |
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 |
1344 :type 'number) | 1299 :type 'number) |
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 |
1357 (defun flymake-start-syntax-check-for-current-buffer () | 1313 (defun flymake-start-syntax-check-for-current-buffer () |
1358 "Run 'flymake-start-syntax-check' for current buffer if it isn't already running." | 1314 "Run 'flymake-start-syntax-check' for current buffer if it isn't already running." |
1389 | 1345 |
1390 (defun flymake-display-err-menu-for-current-line () | 1346 (defun flymake-display-err-menu-for-current-line () |
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)) |
1398 (menu-pos (list (flymake-get-point-pixel-pos) (selected-window)))) | 1354 (menu-pos (list (flymake-get-point-pixel-pos) (selected-window)))) |
1399 (if menu-data | 1355 (if menu-data |
1440 ;; flymake minor mode declarations | 1396 ;; flymake minor mode declarations |
1441 (defvar flymake-mode-line nil) | 1397 (defvar flymake-mode-line nil) |
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 | |
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 | 1408 |
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) |
1488 "Display a warning to user." | 1425 "Display a warning to user." |
1489 (message-box warning)) | 1426 (message-box warning)) |
1530 (add-hook 'kill-buffer-hook 'flymake-kill-buffer-hook) | 1467 (add-hook 'kill-buffer-hook 'flymake-kill-buffer-hook) |
1531 ;;+(add-hook 'find-file-hook 'flymake-find-file-hook) | 1468 ;;+(add-hook 'find-file-hook 'flymake-find-file-hook) |
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))) |
1539 (when flymake-start-syntax-check-on-find-file | 1477 (when flymake-start-syntax-check-on-find-file |
1540 (flymake-start-syntax-check-for-current-buffer)))) ; will be started by on-load hook | 1478 (flymake-start-syntax-check-for-current-buffer)))) ; will be started by on-load hook |
1548 (remove-hook 'kill-buffer-hook (function flymake-kill-buffer-hook) t) | 1486 (remove-hook 'kill-buffer-hook (function flymake-kill-buffer-hook) t) |
1549 ;;+(remove-hook 'find-file-hook (function flymake-find-file-hook) t) | 1487 ;;+(remove-hook 'find-file-hook (function flymake-find-file-hook) t) |
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 | 1494 |
1557 (flymake-set-buffer-is-running (current-buffer) nil) | 1495 (setq flymake-is-running nil) |
1558 | |
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 |
1562 (defcustom flymake-start-syntax-check-on-newline t | 1499 (defcustom flymake-start-syntax-check-on-newline t |
1563 "Start syntax check if newline char was added/removed from the buffer." | 1500 "Start syntax check if newline char was added/removed from the buffer." |
1569 ;;+(flymake-log 0 "setting change time to %s" (flymake-float-time)) | 1506 ;;+(flymake-log 0 "setting change time to %s" (flymake-float-time)) |
1570 (let((new-text (buffer-substring start stop))) | 1507 (let((new-text (buffer-substring start stop))) |
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? |
1578 (progn | 1515 (progn |
1579 (flymake-log 3 "starting syntax check as buffer was saved") | 1516 (flymake-log 3 "starting syntax check as buffer was saved") |
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 |
1589 ;;+ (flymake-log 3 "starting syntax check on file open") | 1526 ;;+ (flymake-log 3 "starting syntax check on file open") |
1590 ;;+ (flymake-start-syntax-check-for-current-buffer) | 1527 ;;+ (flymake-start-syntax-check-for-current-buffer) |
1634 (flymake-skip-whitespace)) | 1571 (flymake-skip-whitespace)) |
1635 | 1572 |
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) |
1645 (flymake-log 1 "no errors in current buffer")))) | 1582 (flymake-log 1 "no errors in current buffer")))) |
1646 | 1583 |
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) |
1656 (flymake-log 1 "no errors in current buffer")))) | 1593 (flymake-log 1 "no errors in current buffer")))) |
1657 | 1594 |
1719 (defun flymake-simple-cleanup (buffer) | 1656 (defun flymake-simple-cleanup (buffer) |
1720 "Do cleanup after 'flymake-init-create-temp-buffer-copy'. | 1657 "Do cleanup after 'flymake-init-create-temp-buffer-copy'. |
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. |
1728 Return full-name. Names are real, not patched." | 1666 Return full-name. Names are real, not patched." |
1729 (let* ((real-name nil) | 1667 (let* ((real-name nil) |