/[emacs]/emacs/lisp/progmodes/flymake.el
ViewVC logotype

Diff of /emacs/lisp/progmodes/flymake.el

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.8 by monnier, Thu Mar 24 22:42:42 2005 UTC revision 1.9 by monnier, Thu Mar 24 22:55:54 2005 UTC
# Line 49  Line 49 
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."
# Line 71  Line 71 
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)))
# Line 104  Line 104 
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))
# Line 134  Line 134 
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)
# Line 199  Line 199 
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)
# Line 210  Line 209 
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)
# Line 537  instead of reading master file from disk Line 535  instead of reading master file from disk
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    
# Line 546  instead of reading master file from disk Line 543  instead of reading master file from disk
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)))))
# Line 618  Find master file, patch and save it." Line 614  Find master file, patch and save it."
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)))
# Line 665  It's flymake process filter." Line 660  It's flymake process filter."
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)
# Line 706  It's flymake process filter." Line 700  It's flymake process filter."
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))
# Line 721  It's flymake process filter." Line 714  It's flymake process filter."
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)
# Line 846  line number outside the file being compi Line 838  line number outside the file being compi
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)
# Line 873  line number outside the file being compi Line 864  line number outside the file being compi
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))
# Line 891  Return t if it has at least one flymake Line 881  Return t if it has at least one flymake
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))
# Line 986  Returns ((LINES) RESIDUAL)." Line 977  Returns ((LINES) RESIDUAL)."
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
# Line 1211  Return first 'INCLUDE-DIRS/REL-FILE-NAME Line 1199  Return first 'INCLUDE-DIRS/REL-FILE-NAME
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)
# Line 1238  Return first 'INCLUDE-DIRS/REL-FILE-NAME Line 1225  Return first 'INCLUDE-DIRS/REL-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)))
# Line 1385  Return first 'INCLUDE-DIRS/REL-FILE-NAME Line 1371  Return first 'INCLUDE-DIRS/REL-FILE-NAME
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)
# Line 1405  Return first 'INCLUDE-DIRS/REL-FILE-NAME Line 1390  Return first 'INCLUDE-DIRS/REL-FILE-NAME
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 ()
# Line 1443  Return first 'INCLUDE-DIRS/REL-FILE-NAME Line 1419  Return first 'INCLUDE-DIRS/REL-FILE-NAME
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
# Line 1525  Return first 'INCLUDE-DIRS/REL-FILE-NAME Line 1500  Return first 'INCLUDE-DIRS/REL-FILE-NAME
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          )          )
# Line 1553  Return first 'INCLUDE-DIRS/REL-FILE-NAME Line 1527  Return first 'INCLUDE-DIRS/REL-FILE-NAME
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)))

Legend:
Removed from v.1.8  
changed lines
  Added in v.1.9

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26