]> git.eshelyaron.com Git - emacs.git/commitdiff
Small flymake changes.
authorGlenn Morris <rgm@gnu.org>
Thu, 2 Dec 2010 17:34:35 +0000 (09:34 -0800)
committerGlenn Morris <rgm@gnu.org>
Thu, 2 Dec 2010 17:34:35 +0000 (09:34 -0800)
* lisp/progmodes/flymake.el (flymake-check-file-limit):
Allow nil to mean "no limit".
(flymake-check-patch-master-file-buffer): Update for above change.
Allow a .tex file-name extension to be optional.
(flymake-master-tex-init): Also match \include statements.

lisp/ChangeLog
lisp/progmodes/flymake.el

index 4795e0eda5881e85ec202528e52013bb9d7ebe96..135cfe952c7280d7b26159782ecbcfd175adc5e0 100644 (file)
@@ -1,3 +1,11 @@
+2010-12-02  Glenn Morris  <rgm@gnu.org>
+
+       * progmodes/flymake.el (flymake-check-file-limit):
+       Allow nil to mean "no limit".
+       (flymake-check-patch-master-file-buffer): Update for above change.
+       Allow a .tex file-name extension to be optional.
+       (flymake-master-tex-init): Also match \include statements.
+
 2010-11-30  Sam Steingold  <sds@gnu.org>
 
        * nxml/nxml-mode.el (nxml-parent-document): Add a variable.
index 6346ab50e9663ae49d3f4ac73f72993274b41ddc..a90f380d1c3fbcf99df63c1321d3698820421c73 100644 (file)
@@ -413,9 +413,11 @@ to the beginning of the list (File.h -> File.cpp moved to top)."
        (not (equal file-one file-two))))
 
 (defcustom flymake-check-file-limit 8192
-  "Max number of chars to look at when checking possible master file."
+  "Maximum number of chars to look at when checking possible master file.
+Nil means search the entire file."
   :group 'flymake
-  :type 'integer)
+  :type '(choice (const :tag "No limit" nil)
+                 (integer :tag "Characters")))
 
 (defun flymake-check-patch-master-file-buffer
        (master-file-temp-buffer
@@ -431,16 +433,26 @@ For example, foo.cpp is a master file if it includes foo.h.
 Whether a buffer for MATER-FILE-NAME exists, use it as a source
 instead of reading master file from disk."
   (let* ((source-file-nondir (file-name-nondirectory source-file-name))
+         (source-file-extension (file-name-extension source-file-nondir))
+         (source-file-nonext (file-name-sans-extension source-file-nondir))
          (found                     nil)
         (inc-name                  nil)
         (search-limit              flymake-check-file-limit))
     (setq regexp
           (format regexp       ; "[ \t]*#[ \t]*include[ \t]*\"\\(.*%s\\)\""
-                  (regexp-quote source-file-nondir)))
+                  ;; Hack for tex files, where \include often excludes .tex.
+                  ;; Maybe this is safe generally.
+                  (if (and (> (length source-file-extension) 1)
+                           (string-equal source-file-extension "tex"))
+                      (format "%s\\(?:\\.%s\\)?"
+                              (regexp-quote source-file-nonext)
+                              (regexp-quote source-file-extension))
+                    (regexp-quote source-file-nondir))))
     (unwind-protect
         (with-current-buffer master-file-temp-buffer
-          (when (> search-limit (point-max))
-            (setq search-limit (point-max)))
+          (if (or (not search-limit)
+                  (> search-limit (point-max)))
+              (setq search-limit (point-max)))
           (flymake-log 3 "checking %s against regexp %s"
                        master-file-name regexp)
           (goto-char (point-min))
@@ -451,6 +463,11 @@ instead of reading master file from disk."
 
               (flymake-log 3 "found possible match for %s" source-file-nondir)
               (setq inc-name (match-string 1))
+              (and (> (length source-file-extension) 1)
+                   (string-equal source-file-extension "tex")
+                   (not (string-match (format "\\.%s\\'" source-file-extension)
+                                      inc-name))
+                   (setq inc-name (concat inc-name "." source-file-extension)))
               (when (eq t (compare-strings
                            source-file-nondir nil nil
                            inc-name (- (length inc-name)
@@ -1737,11 +1754,14 @@ Use CREATE-TEMP-F for creating temp copy."
 (defun flymake-simple-tex-init ()
   (flymake-get-tex-args (flymake-init-create-temp-buffer-copy 'flymake-create-temp-inplace)))
 
+;; Perhaps there should be a buffer-local variable flymake-master-file
+;; that people can set to override this stuff.  Could inherit from
+;; the similar AUCTeX variable.
 (defun flymake-master-tex-init ()
   (let* ((temp-master-file-name (flymake-init-create-temp-source-and-master-buffer-copy
                                  'flymake-get-include-dirs-dot 'flymake-create-temp-inplace
                                 '("\\.tex\\'")
-                                "[ \t]*\\input[ \t]*{\\(.*%s\\)}")))
+                                "[ \t]*\\in\\(?:put\\|clude\\)[ \t]*{\\(.*%s\\)}")))
     (when temp-master-file-name
       (flymake-get-tex-args temp-master-file-name))))