49 |
(if test (make-hash-table :test test) (make-hash-table)) |
(if test (make-hash-table :test test) (make-hash-table)) |
50 |
(makehash test))) |
(makehash test))) |
51 |
|
|
52 |
(defun flymake-float-time () |
(defalias 'flymake-float-time |
53 |
(if (featurep 'xemacs) |
(if (fboundp 'float-time) |
54 |
(let ((tm (current-time))) |
'float-time |
55 |
(multiple-value-bind (s0 s1 s2) (current-time) |
(lambda () |
56 |
(+ (* (float (ash 1 16)) s0) (float s1) (* 0.0000001 s2)))) |
(multiple-value-bind (s0 s1 s2) (current-time) |
57 |
(float-time))) |
(+ (* (float (ash 1 16)) s0) (float s1) (* 0.0000001 s2)))))) |
58 |
|
|
59 |
(defsubst flymake-replace-regexp-in-string (regexp rep str) |
(defsubst flymake-replace-regexp-in-string (regexp rep str) |
60 |
(if (featurep 'xemacs) |
(if (fboundp 'replace-regexp-in-string) |
61 |
(replace-in-string str regexp rep) |
(replace-regexp-in-string regexp rep str) |
62 |
(replace-regexp-in-string regexp rep str))) |
(replace-in-string str regexp rep))) |
63 |
|
|
64 |
(defun flymake-split-string (str pattern) |
(defun flymake-split-string (str pattern) |
65 |
"Split, then remove first and/or last in case it's empty." |
"Split, then remove first and/or last in case it's empty." |
71 |
splitted)) |
splitted)) |
72 |
|
|
73 |
(defsubst flymake-get-temp-dir () |
(defsubst flymake-get-temp-dir () |
74 |
(if (featurep 'xemacs) |
(if (fboundp 'temp-directory) |
75 |
(temp-directory) |
(temp-directory) |
76 |
temporary-file-directory)) |
temporary-file-directory)) |
77 |
|
|
78 |
(defun flymake-line-beginning-position () |
(defalias 'flymake-line-beginning-position |
79 |
(save-excursion |
(if (fboundp 'line-beginning-position) |
80 |
(beginning-of-line) |
'line-beginning-position |
81 |
(point))) |
(lambda (&optional arg) (save-excursion (beginning-of-line arg) (point))))) |
82 |
|
|
83 |
(defun flymake-line-end-position () |
(defalias 'flymake-line-end-position |
84 |
(save-excursion |
(if (fboundp 'line-end-position) |
85 |
(end-of-line) |
'line-end-position |
86 |
(point))) |
(lambda (&optional arg) (save-excursion (end-of-line arg) (point))))) |
87 |
|
|
88 |
(defun flymake-popup-menu (pos menu-data) |
(defun flymake-popup-menu (pos menu-data) |
89 |
(if (featurep 'xemacs) |
(if (and (fboundp 'popup-menu) (fboundp 'make-event)) |
90 |
(let* ((x-pos (nth 0 (nth 0 pos))) |
(let* ((x-pos (nth 0 (nth 0 pos))) |
91 |
(y-pos (nth 1 (nth 0 pos))) |
(y-pos (nth 1 (nth 0 pos))) |
92 |
(fake-event-props '(button 1 x 1 y 1))) |
(fake-event-props '(button 1 x 1 y 1))) |
104 |
menu-items)) |
menu-items)) |
105 |
(list menu-title (cons "" menu-commands)))) |
(list menu-title (cons "" menu-commands)))) |
106 |
|
|
|
(defun flymake-nop ()) |
|
|
|
|
107 |
(if (featurep 'xemacs) (progn |
(if (featurep 'xemacs) (progn |
108 |
|
|
109 |
|
(defun flymake-nop ()) |
110 |
|
|
111 |
(defun flymake-make-xemacs-menu (menu-data) |
(defun flymake-make-xemacs-menu (menu-data) |
112 |
(let* ((menu-title (nth 0 menu-data)) |
(let* ((menu-title (nth 0 menu-data)) |
113 |
(menu-items (nth 1 menu-data)) |
(menu-items (nth 1 menu-data)) |
134 |
|
|
135 |
(defun flymake-current-row () |
(defun flymake-current-row () |
136 |
"Return current row number in current frame." |
"Return current row number in current frame." |
137 |
(if (featurep 'xemacs) |
(if (fboundp 'window-edges) |
138 |
(count-lines (window-start) (point)) |
(+ (car (cdr (window-edges))) (count-lines (window-start) (point))) |
139 |
(+ (car (cdr (window-edges))) (count-lines (window-start) (point))))) |
(count-lines (window-start) (point)))) |
140 |
|
|
141 |
(defun flymake-selected-frame () |
(defun flymake-selected-frame () |
142 |
(if (featurep 'xemacs) |
(if (fboundp 'window-edges) |
143 |
(selected-window) |
(selected-frame) |
144 |
(selected-frame))) |
(selected-window))) |
145 |
|
|
146 |
;;;; ]] |
;;;; ]] |
147 |
|
|
148 |
(defcustom flymake-log-level -1 |
(defcustom flymake-log-level -1 |
149 |
"Logging level, only messages with level > flymake-log-level will not be logged |
"Logging level, only messages with level lower or equal will be logged. |
150 |
-1 = NONE, 0 = ERROR, 1 = WARNING, 2 = INFO, 3 = DEBUG" |
-1 = NONE, 0 = ERROR, 1 = WARNING, 2 = INFO, 3 = DEBUG" |
151 |
:group 'flymake |
:group 'flymake |
152 |
:type 'integer) |
:type 'integer) |
199 |
|
|
200 |
(if (eq buffer (current-buffer)) |
(if (eq buffer (current-buffer)) |
201 |
(symbol-value var-name) |
(symbol-value var-name) |
202 |
(save-excursion |
(with-current-buffer buffer |
|
(set-buffer buffer) |
|
203 |
(symbol-value var-name)))) |
(symbol-value var-name)))) |
204 |
|
|
205 |
(defun flymake-set-buffer-var (buffer var-name var-value) |
(defun flymake-set-buffer-var (buffer var-name var-value) |
209 |
|
|
210 |
(if (eq buffer (current-buffer)) |
(if (eq buffer (current-buffer)) |
211 |
(set var-name var-value) |
(set var-name var-value) |
212 |
(save-excursion |
(with-current-buffer buffer |
|
(set-buffer buffer) |
|
213 |
(set var-name var-value)))) |
(set var-name var-value)))) |
214 |
|
|
215 |
(defvar flymake-buffer-data (flymake-makehash) |
(defvar flymake-buffer-data (flymake-makehash) |
535 |
(defun flymake-read-file-to-temp-buffer (file-name) |
(defun flymake-read-file-to-temp-buffer (file-name) |
536 |
"Insert contents of FILE-NAME into newly created temp buffer." |
"Insert contents of FILE-NAME into newly created temp buffer." |
537 |
(let* ((temp-buffer (get-buffer-create (generate-new-buffer-name (concat "flymake:" (file-name-nondirectory file-name)))))) |
(let* ((temp-buffer (get-buffer-create (generate-new-buffer-name (concat "flymake:" (file-name-nondirectory file-name)))))) |
538 |
(save-excursion |
(with-current-buffer temp-buffer |
|
(set-buffer temp-buffer) |
|
539 |
(insert-file-contents file-name)) |
(insert-file-contents file-name)) |
540 |
temp-buffer)) |
temp-buffer)) |
541 |
|
|
543 |
"Copy contents of BUFFER into newly created temp buffer." |
"Copy contents of BUFFER into newly created temp buffer." |
544 |
(let ((contents nil) |
(let ((contents nil) |
545 |
(temp-buffer nil)) |
(temp-buffer nil)) |
546 |
(save-excursion |
(with-current-buffer buffer |
|
(set-buffer buffer) |
|
547 |
(setq contents (buffer-string)) |
(setq contents (buffer-string)) |
548 |
|
|
549 |
(setq temp-buffer (get-buffer-create (generate-new-buffer-name (concat "flymake:" (buffer-name buffer))))) |
(setq temp-buffer (get-buffer-create (generate-new-buffer-name (concat "flymake:" (buffer-name buffer))))) |
614 |
(defun flymake-save-buffer-in-file (buffer file-name) |
(defun flymake-save-buffer-in-file (buffer file-name) |
615 |
(or buffer |
(or buffer |
616 |
(error "Invalid buffer")) |
(error "Invalid buffer")) |
617 |
(save-excursion |
(with-current-buffer buffer |
618 |
(save-restriction |
(save-restriction |
|
(set-buffer buffer) |
|
619 |
(widen) |
(widen) |
620 |
(make-directory (file-name-directory file-name) 1) |
(make-directory (file-name-directory file-name) 1) |
621 |
(write-region (point-min) (point-max) file-name nil 566))) |
(write-region (point-min) (point-max) file-name nil 566))) |
660 |
(delete-process process) |
(delete-process process) |
661 |
|
|
662 |
(when source-buffer |
(when source-buffer |
663 |
(save-excursion |
(with-current-buffer source-buffer |
|
(set-buffer source-buffer) |
|
664 |
|
|
665 |
(flymake-parse-residual source-buffer) |
(flymake-parse-residual source-buffer) |
666 |
(flymake-post-syntax-check source-buffer exit-status command) |
(flymake-post-syntax-check source-buffer exit-status command) |
700 |
|
|
701 |
(defun flymake-parse-output-and-residual (source-buffer output) |
(defun flymake-parse-output-and-residual (source-buffer output) |
702 |
"Split OUTPUT into lines, merge in residual if necessary." |
"Split OUTPUT into lines, merge in residual if necessary." |
703 |
(save-excursion |
(with-current-buffer source-buffer |
|
(set-buffer source-buffer) |
|
704 |
(let* ((buffer-residual (flymake-get-buffer-output-residual source-buffer)) |
(let* ((buffer-residual (flymake-get-buffer-output-residual source-buffer)) |
705 |
(total-output (if buffer-residual (concat buffer-residual output) output)) |
(total-output (if buffer-residual (concat buffer-residual output) output)) |
706 |
(lines-and-residual (flymake-split-output total-output)) |
(lines-and-residual (flymake-split-output total-output)) |
714 |
|
|
715 |
(defun flymake-parse-residual (source-buffer) |
(defun flymake-parse-residual (source-buffer) |
716 |
"Parse residual if it's non empty." |
"Parse residual if it's non empty." |
717 |
(save-excursion |
(with-current-buffer source-buffer |
|
(set-buffer source-buffer) |
|
718 |
(when (flymake-get-buffer-output-residual source-buffer) |
(when (flymake-get-buffer-output-residual source-buffer) |
719 |
(flymake-set-buffer-new-err-info source-buffer (flymake-parse-err-lines |
(flymake-set-buffer-new-err-info source-buffer (flymake-parse-err-lines |
720 |
(flymake-get-buffer-new-err-info source-buffer) |
(flymake-get-buffer-new-err-info source-buffer) |
838 |
|
|
839 |
(defun flymake-highlight-err-lines (buffer err-info-list) |
(defun flymake-highlight-err-lines (buffer err-info-list) |
840 |
"Highlight error lines in BUFFER using info from ERR-INFO-LIST." |
"Highlight error lines in BUFFER using info from ERR-INFO-LIST." |
841 |
(save-excursion |
(with-current-buffer buffer |
|
(set-buffer buffer) |
|
842 |
(let* ((idx 0) |
(let* ((idx 0) |
843 |
(count (length err-info-list))) |
(count (length err-info-list))) |
844 |
(while (< idx count) |
(while (< idx count) |
864 |
|
|
865 |
(defun flymake-delete-own-overlays (buffer) |
(defun flymake-delete-own-overlays (buffer) |
866 |
"Delete all flymake overlays in BUFFER." |
"Delete all flymake overlays in BUFFER." |
867 |
(save-excursion |
(with-current-buffer buffer |
|
(set-buffer buffer) |
|
868 |
(let ((ov (overlays-in (point-min) (point-max)))) |
(let ((ov (overlays-in (point-min) (point-max)))) |
869 |
(while (consp ov) |
(while (consp ov) |
870 |
(when (flymake-overlay-p (car ov)) |
(when (flymake-overlay-p (car ov)) |
881 |
(while (consp ov) |
(while (consp ov) |
882 |
(when (flymake-overlay-p (car ov)) |
(when (flymake-overlay-p (car ov)) |
883 |
(setq has-flymake-overlays t)) |
(setq has-flymake-overlays t)) |
884 |
(setq ov (cdr ov))))) |
(setq ov (cdr ov))) |
885 |
|
has-flymake-overlays)) |
886 |
|
|
887 |
(defface flymake-errline-face |
(defface flymake-errline-face |
888 |
;;+ '((((class color)) (:foreground "OrangeRed" :bold t :underline t)) |
;;+ '((((class color)) (:foreground "OrangeRed" :bold t :underline t)) |
977 |
"Grab error line patterns from ORIGINAL-LIST in compile.el format. |
"Grab error line patterns from ORIGINAL-LIST in compile.el format. |
978 |
Convert it to flymake internal format." |
Convert it to flymake internal format." |
979 |
(let* ((converted-list '())) |
(let* ((converted-list '())) |
980 |
(mapcar |
(dolist (item original-list) |
981 |
(lambda (item) |
(setq item (cdr item)) |
982 |
(setq item (cdr item)) |
(let ((regexp (nth 0 item)) |
983 |
(let ((regexp (nth 0 item)) |
(file (nth 1 item)) |
984 |
(file (nth 1 item)) |
(line (nth 2 item)) |
985 |
(line (nth 2 item)) |
(col (nth 3 item))) |
986 |
(col (nth 3 item)) |
(if (consp file) (setq file (car file))) |
987 |
end-line) |
(if (consp line) (setq line (car line))) |
988 |
(if (consp file) (setq file (car file))) |
(if (consp col) (setq col (car col))) |
989 |
(if (consp line) (setq end-line (cdr line) line (car line))) |
|
990 |
(if (consp col) (setq col (car col))) |
(when (not (functionp line)) |
991 |
|
(setq converted-list (cons (list regexp file line col) converted-list))))) |
|
(when (not (functionp line)) |
|
|
(setq converted-list (cons (list regexp file line col) converted-list))))) |
|
|
original-list) |
|
992 |
converted-list)) |
converted-list)) |
993 |
|
|
994 |
(eval-when-compile |
(eval-when-compile |
1199 |
(defun flymake-get-program-dir (buffer) |
(defun flymake-get-program-dir (buffer) |
1200 |
"Get dir to start program in." |
"Get dir to start program in." |
1201 |
(unless (bufferp buffer) |
(unless (bufferp buffer) |
1202 |
(error "Invlid buffer")) |
(error "Invalid buffer")) |
1203 |
(save-excursion |
(with-current-buffer buffer |
|
(set-buffer buffer) |
|
1204 |
default-directory)) |
default-directory)) |
1205 |
|
|
1206 |
(defun flymake-safe-delete-file (file-name) |
(defun flymake-safe-delete-file (file-name) |
1225 |
"Start syntax checking for buffer BUFFER." |
"Start syntax checking for buffer BUFFER." |
1226 |
(unless (bufferp buffer) |
(unless (bufferp buffer) |
1227 |
(error "Expected a buffer")) |
(error "Expected a buffer")) |
1228 |
(save-excursion |
(with-current-buffer buffer |
|
(set-buffer buffer) |
|
1229 |
(flymake-log 3 "flymake is running: %s" (flymake-get-buffer-is-running buffer)) |
(flymake-log 3 "flymake is running: %s" (flymake-get-buffer-is-running buffer)) |
1230 |
(when (and (not (flymake-get-buffer-is-running buffer)) |
(when (and (not (flymake-get-buffer-is-running buffer)) |
1231 |
(flymake-can-syntax-check-file (buffer-file-name buffer))) |
(flymake-can-syntax-check-file (buffer-file-name buffer))) |
1371 |
"Start a syntax check for buffer BUFFER if necessary." |
"Start a syntax check for buffer BUFFER if necessary." |
1372 |
;;+(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)) |
;;+(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)) |
1373 |
(when (and (bufferp buffer) (not (flymake-get-buffer-is-running buffer))) |
(when (and (bufferp buffer) (not (flymake-get-buffer-is-running buffer))) |
1374 |
(save-excursion |
(with-current-buffer buffer |
|
(set-buffer buffer) |
|
1375 |
(when (and (flymake-get-buffer-last-change-time buffer) |
(when (and (flymake-get-buffer-last-change-time buffer) |
1376 |
(> (flymake-float-time) (+ flymake-no-changes-timeout (flymake-get-buffer-last-change-time buffer)))) |
(> (flymake-float-time) (+ flymake-no-changes-timeout (flymake-get-buffer-last-change-time buffer)))) |
1377 |
(flymake-set-buffer-last-change-time buffer nil) |
(flymake-set-buffer-last-change-time buffer nil) |
1390 |
(end (if (= (point) (point-max)) (point) (1+ (point))))) |
(end (if (= (point) (point-max)) (point) (1+ (point))))) |
1391 |
(count-lines beg end))) |
(count-lines beg end))) |
1392 |
|
|
|
(defun flymake-get-line-count (buffer) |
|
|
"Return number of lines in buffer BUFFER." |
|
|
(unless (bufferp buffer) |
|
|
(error "Invalid buffer")) |
|
|
(save-excursion |
|
|
(set-buffer buffer) |
|
|
(count-lines (point-min) (point-max)))) |
|
|
|
|
1393 |
(defun flymake-count-lines (buffer) |
(defun flymake-count-lines (buffer) |
1394 |
"Return number of lines in buffer BUFFER." |
"Return number of lines in buffer BUFFER." |
1395 |
(save-excursion |
(with-current-buffer buffer |
|
(set-buffer buffer) |
|
1396 |
(count-lines (point-min) (point-max)))) |
(count-lines (point-min) (point-max)))) |
1397 |
|
|
1398 |
(defun flymake-get-point-pixel-pos () |
(defun flymake-get-point-pixel-pos () |
1419 |
(menu-data (flymake-make-err-menu-data line-no line-err-info-list)) |
(menu-data (flymake-make-err-menu-data line-no line-err-info-list)) |
1420 |
(choice nil) |
(choice nil) |
1421 |
(mouse-pos (flymake-get-point-pixel-pos)) |
(mouse-pos (flymake-get-point-pixel-pos)) |
|
(moved-mouse-pos (list (car mouse-pos) (+ 10 (car (cdr mouse-pos))))) |
|
1422 |
(menu-pos (list (flymake-get-point-pixel-pos) (selected-window)))) |
(menu-pos (list (flymake-get-point-pixel-pos) (selected-window)))) |
1423 |
(if menu-data |
(if menu-data |
1424 |
(progn |
(progn |
1500 |
(defun flymake-report-status (buffer e-w &optional status) |
(defun flymake-report-status (buffer e-w &optional status) |
1501 |
"Show status in mode line." |
"Show status in mode line." |
1502 |
(when (bufferp buffer) |
(when (bufferp buffer) |
1503 |
(save-excursion |
(with-current-buffer buffer |
|
(set-buffer buffer) |
|
1504 |
(when e-w |
(when e-w |
1505 |
(flymake-set-buffer-mode-line-e-w buffer e-w) |
(flymake-set-buffer-mode-line-e-w buffer e-w) |
1506 |
) |
) |
1527 |
(when flymake-gui-warnings-enabled |
(when flymake-gui-warnings-enabled |
1528 |
(flymake-display-warning (format "Flymake: %s. Flymake will be switched OFF" warning)) |
(flymake-display-warning (format "Flymake: %s. Flymake will be switched OFF" warning)) |
1529 |
) |
) |
1530 |
(save-excursion |
(with-current-buffer buffer |
|
(set-buffer buffer) |
|
1531 |
(flymake-mode 0) |
(flymake-mode 0) |
1532 |
(flymake-log 0 "switched OFF Flymake mode for buffer %s due to fatal status %s, warning %s" |
(flymake-log 0 "switched OFF Flymake mode for buffer %s due to fatal status %s, warning %s" |
1533 |
(buffer-name buffer) status warning))) |
(buffer-name buffer) status warning))) |