]> code.delx.au - gnu-emacs/blobdiff - lisp/progmodes/flymake.el
Allow use of "end" keyword for terminating Octave-mode blocks.
[gnu-emacs] / lisp / progmodes / flymake.el
index 757afdd79ee61d0f6e7d6e709554352913f435cf..69eac565892c15fdb412c876871f95343f534879 100644 (file)
@@ -1,6 +1,6 @@
 ;;; flymake.el -- a universal on-the-fly syntax checker
 
-;; Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008
+;; Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009
 ;;   Free Software Foundation, Inc.
 
 ;; Author:  Pavel Kobyakov <pk_at_work@yahoo.com>
 
 ;; This file is part of GNU Emacs.
 
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -21,9 +21,7 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 ;;
@@ -81,7 +79,7 @@
       'float-time
     (if (featurep 'xemacs)
        (lambda ()
-         (multiple-value-bind (s0 s1 s2) (current-time)
+         (multiple-value-bind (s0 s1 s2) (values-list (current-time))
            (+ (* (float (ash 1 16)) s0) (float s1) (* 0.0000001 s2)))))))
 
 (defalias 'flymake-replace-regexp-in-string
@@ -265,6 +263,11 @@ are the string substitutions (see `format')."
 
 (make-variable-buffer-local 'flymake-output-residual)
 
+(defgroup flymake nil
+  "A universal on-the-fly syntax checker."
+  :version "23.1"
+  :group 'tools)
+
 (defcustom flymake-allowed-file-name-masks
   '(("\\.c\\'" flymake-simple-make-init)
     ("\\.cpp\\'" flymake-simple-make-init)
@@ -342,13 +345,10 @@ Return nil if we cannot, non-nil if we can."
 Buildfile includes Makefile, build.xml etc.
 Return its file name if found, or nil if not found."
   (or (flymake-get-buildfile-from-cache source-dir-name)
-      (let* ((file (locate-dominating-file
-                    source-dir-name
-                    (concat "\\`" (regexp-quote buildfile-name) "\\'"))))
+      (let* ((file (locate-dominating-file source-dir-name buildfile-name)))
         (if file
             (progn
               (flymake-log 3 "found buildfile at %s" file)
-              (setq file (file-name-directory file))
               (flymake-add-buildfile-to-cache source-dir-name file)
               file)
           (progn
@@ -564,10 +564,8 @@ Find master file, patch and save it."
        nil))))
 
 (defun flymake-save-buffer-in-file (file-name)
-  (save-restriction
-    (widen)
-    (make-directory (file-name-directory file-name) 1)
-    (write-region (point-min) (point-max) file-name nil 566))
+  (make-directory (file-name-directory file-name) 1)
+  (write-region nil nil file-name nil 566)
   (flymake-log 3 "saved buffer %s in file %s" (buffer-name) file-name))
 
 (defun flymake-save-string-to-file (file-name data)
@@ -587,7 +585,7 @@ It's flymake process filter."
 
     (flymake-log 3 "received %d byte(s) of output from process %d"
                  (length output) (process-id process))
-    (when source-buffer
+    (when (buffer-live-p source-buffer)
       (with-current-buffer source-buffer
         (flymake-parse-output-and-residual output)))))
 
@@ -791,15 +789,15 @@ Return t if it has at least one flymake overlay, nil if no overlay."
     has-flymake-overlays))
 
 (defface flymake-errline
-  ;;+   '((((class color)) (:foreground "OrangeRed" :bold t :underline t))
-  ;;+   '((((class color)) (:underline "OrangeRed"))
-  '((((class color)) (:background "LightPink"))
+  '((((class color) (background dark)) (:background "Firebrick4"))
+    (((class color) (background light)) (:background "LightPink"))
     (t (:bold t)))
   "Face used for marking error lines."
   :group 'flymake)
 
 (defface flymake-warnline
-  '((((class color)) (:background "LightBlue2"))
+  '((((class color) (background dark)) (:background "DarkBlue"))
+    (((class color) (background light)) (:background "LightBlue2"))
     (t (:bold t)))
   "Face used for marking warning lines."
   :group 'flymake)
@@ -807,7 +805,8 @@ Return t if it has at least one flymake overlay, nil if no overlay."
 (defun flymake-highlight-line (line-no line-err-info-list)
   "Highlight line LINE-NO in current buffer.
 Perhaps use text from LINE-ERR-INFO-LIST to enhance highlighting."
-  (goto-line line-no)
+  (goto-char (point-min))
+  (forward-line (1- line-no))
   (let* ((line-beg (flymake-line-beginning-position))
         (line-end (flymake-line-end-position))
         (beg      line-beg)
@@ -858,11 +857,9 @@ Perhaps use text from LINE-ERR-INFO-LIST to enhance highlighting."
                                       (flymake-ler-file line-err-info)))
        (setq line-err-info (flymake-ler-set-full-file line-err-info real-file-name))
 
-       (if (flymake-same-files real-file-name source-file-name)
-           (setq line-err-info (flymake-ler-set-file line-err-info nil))
-         (setq line-err-info (flymake-ler-set-file line-err-info (file-name-nondirectory real-file-name))))
-
-       (setq err-info-list (flymake-add-err-info err-info-list line-err-info)))
+       (when (flymake-same-files real-file-name source-file-name)
+         (setq line-err-info (flymake-ler-set-file line-err-info nil))
+         (setq err-info-list (flymake-add-err-info err-info-list line-err-info))))
       (flymake-log 3 "parsed '%s', %s line-err-info" (nth idx lines) (if line-err-info "got" "no"))
       (setq idx (1+ idx)))
     err-info-list))
@@ -1273,7 +1270,8 @@ For the format of LINE-ERR-INFO, see `flymake-ler-make-ler'."
   (if (not (file-exists-p file))
       (flymake-log 1 "File %s does not exist" file)
     (find-file file)
-    (goto-line line)))
+    (goto-char (point-min))
+    (forward-line (1- line))))
 
 ;; flymake minor mode declarations
 (defvar flymake-mode-line nil)
@@ -1447,7 +1445,8 @@ With arg, turn Flymake mode on if and only if arg is positive."
 
 (defun flymake-goto-line (line-no)
   "Go to line LINE-NO, then skip whitespace."
-  (goto-line line-no)
+  (goto-char (point-min))
+  (forward-line (1- line-no))
   (flymake-skip-whitespace))
 
 (defun flymake-goto-next-error ()