# HG changeset patch # User Stefan Monnier # Date 1136318340 0 # Node ID 1a9ccbce1b6e6c9e661c7f5802263511fd9877bb # Parent a45d40da31da98ab89f08da046bf27c06b6d6868 (flymake-create-temp-with-folder-structure): Use expand-file-name. (flymake-delete-temp-directory): Use expand-file-name, file-name-directory, and directory-file-name. (flymake-strrchr): Delete. (flymake-start-syntax-check): Don't pass the redundant buffer argument to the init-f function. (flymake-init-find-buildfile-dir, flymake-init-create-temp-buffer-copy) (flymake-init-create-temp-source-and-master-buffer-copy, flymake-perl-init) (flymake-save-buffer-in-file, flymake-simple-make-init-impl, flymake-xml-init) (flymake-simple-make-init, flymake-master-make-init, flymake-master-tex-init) (flymake-master-make-header-init, flymake-simple-make-java-init) (flymake-simple-ant-java-init, flymake-simple-tex-init): Remove corresponding redundant buffer argument. (flymake-allowed-file-name-masks): Remove last elems that are equal to the default anyway. Clean up regexps. diff -r a45d40da31da -r 1a9ccbce1b6e lisp/ChangeLog --- a/lisp/ChangeLog Tue Jan 03 19:05:06 2006 +0000 +++ b/lisp/ChangeLog Tue Jan 03 19:59:00 2006 +0000 @@ -1,5 +1,23 @@ 2006-01-03 Stefan Monnier + * progmodes/flymake.el (flymake-create-temp-with-folder-structure): + Use expand-file-name. + (flymake-delete-temp-directory): Use expand-file-name, + file-name-directory, and directory-file-name. + (flymake-strrchr): Delete. + (flymake-start-syntax-check): Don't pass the redundant buffer argument + to the init-f function. + (flymake-save-buffer-in-file, flymake-init-create-temp-buffer-copy) + (flymake-init-find-buildfile-dir) + (flymake-init-create-temp-source-and-master-buffer-copy) + (flymake-simple-make-init-impl, flymake-simple-make-init) + (flymake-master-make-init, flymake-master-make-header-init) + (flymake-simple-make-java-init, flymake-simple-ant-java-init) + (flymake-perl-init, flymake-simple-tex-init, flymake-master-tex-init) + (flymake-xml-init): Remove corresponding redundant buffer argument. + (flymake-allowed-file-name-masks): Remove last elems that are equal to + the default anyway. Clean up regexps. + * progmodes/flymake.el (flymake-temp-source-file-name) (flymake-master-file-name, flymake-temp-master-file-name) (flymake-base-dir): New buffer-local vars. diff -r a45d40da31da -r 1a9ccbce1b6e lisp/progmodes/flymake.el --- a/lisp/progmodes/flymake.el Tue Jan 03 19:05:06 2006 +0000 +++ b/lisp/progmodes/flymake.el Tue Jan 03 19:59:00 2006 +0000 @@ -221,7 +221,7 @@ ;;(with-temp-buffer ;; (insert msg) ;; (insert "\n") - ;; (flymake-save-buffer-in-file (current-buffer) "d:/flymake.log" t) ; make log file name customizable + ;; (flymake-save-buffer-in-file "d:/flymake.log" t) ; make log file name customizable ;;) ))) @@ -245,26 +245,26 @@ (make-variable-buffer-local 'flymake-output-residual) (defcustom flymake-allowed-file-name-masks - '((".+\\.c$" flymake-simple-make-init flymake-simple-cleanup flymake-get-real-file-name) - (".+\\.cpp$" flymake-simple-make-init flymake-simple-cleanup flymake-get-real-file-name) - (".+\\.xml$" flymake-xml-init flymake-simple-cleanup flymake-get-real-file-name) - (".+\\.html?$" flymake-xml-init flymake-simple-cleanup flymake-get-real-file-name) - (".+\\.cs$" flymake-simple-make-init flymake-simple-cleanup flymake-get-real-file-name) - (".+\\.pl$" flymake-perl-init flymake-simple-cleanup flymake-get-real-file-name) - (".+\\.h$" flymake-master-make-header-init flymake-master-cleanup flymake-get-real-file-name) - (".+\\.java$" flymake-simple-make-java-init flymake-simple-java-cleanup flymake-get-real-file-name) - (".+[0-9]+\\.tex$" flymake-master-tex-init flymake-master-cleanup flymake-get-real-file-name) - (".+\\.tex$" flymake-simple-tex-init flymake-simple-cleanup flymake-get-real-file-name) - (".+\\.idl$" flymake-simple-make-init flymake-simple-cleanup flymake-get-real-file-name) - ;; (".+\\.cpp$" 1) - ;; (".+\\.java$" 3) - ;; (".+\\.h$" 2 (".+\\.cpp$" ".+\\.c$") + '(("\\.c\\'" flymake-simple-make-init flymake-simple-cleanup) + ("\\.cpp\\'" flymake-simple-make-init flymake-simple-cleanup) + ("\\.xml\\'" flymake-xml-init flymake-simple-cleanup) + ("\\.html?\\'" flymake-xml-init flymake-simple-cleanup) + ("\\.cs\\'" flymake-simple-make-init flymake-simple-cleanup) + ("\\.pl\\'" flymake-perl-init flymake-simple-cleanup) + ("\\.h\\'" flymake-master-make-header-init flymake-master-cleanup) + ("\\.java\\'" flymake-simple-make-java-init flymake-simple-java-cleanup) + ("[0-9]+\\.tex\\'" flymake-master-tex-init flymake-master-cleanup) + ("\\.tex\\'" flymake-simple-tex-init flymake-simple-cleanup) + ("\\.idl\\'" flymake-simple-make-init flymake-simple-cleanup) + ;; ("\\.cpp\\'" 1) + ;; ("\\.java\\'" 3) + ;; ("\\.h\\'" 2 ("\\.cpp\\'" "\\.c\\'") ;; ("[ \t]*#[ \t]*include[ \t]*\"\\([\w0-9/\\_\.]*[/\\]*\\)\\(%s\\)\"" 1 2)) - ;; (".+\\.idl$" 1) - ;; (".+\\.odl$" 1) - ;; (".+[0-9]+\\.tex$" 2 (".+\\.tex$") + ;; ("\\.idl\\'" 1) + ;; ("\\.odl\\'" 1) + ;; ("[0-9]+\\.tex\\'" 2 ("\\.tex\\'") ;; ("[ \t]*\\input[ \t]*{\\(.*\\)\\(%s\\)}" 1 2 )) - ;; (".+\\.tex$" 1) + ;; ("\\.tex\\'" 1) ) "*Files syntax checking is allowed for." :group 'flymake @@ -300,7 +300,8 @@ (nth 1 (flymake-get-file-name-mode-and-masks file-name))) (defun flymake-get-real-file-name-function (file-name) - (or (nth 2 (flymake-get-file-name-mode-and-masks file-name)) 'flymake-get-real-file-name)) + (or (nth 2 (flymake-get-file-name-mode-and-masks file-name)) + 'flymake-get-real-file-name)) (defcustom flymake-buildfile-dirs '("." ".." "../.." "../../.." "../../../.." "../../../../.." "../../../../../.." "../../../../../../.." "../../../../../../../.." "../../../../../../../../.." "../../../../../../../../../.." "../../../../../../../../../../..") "Dirs to look for buildfile." @@ -500,7 +501,7 @@ (file-name-nondirectory patched-source-file-name)))) (forward-line 1))) (when found - (flymake-save-buffer-in-file (current-buffer) patched-master-file-name))) + (flymake-save-buffer-in-file patched-master-file-name))) ;;+(flymake-log 3 "killing buffer %s" (buffer-name master-file-temp-buffer)) (kill-buffer master-file-temp-buffer))) ;;+(flymake-log 3 "check-patch master file %s: %s" master-file-name found) @@ -590,15 +591,12 @@ (file-name-nondirectory source-file-name)) nil)))) -(defun flymake-save-buffer-in-file (buffer file-name) - (or buffer - (error "Invalid buffer")) - (with-current-buffer buffer - (save-restriction - (widen) - (make-directory (file-name-directory file-name) 1) - (write-region (point-min) (point-max) file-name nil 566))) - (flymake-log 3 "saved buffer %s in file %s" (buffer-name buffer) file-name)) +(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)) + (flymake-log 3 "saved buffer %s in file %s" (buffer-name) file-name)) (defun flymake-save-string-to-file (file-name data) "Save string DATA to file FILE-NAME." @@ -1171,7 +1169,7 @@ (let* ((source-file-name buffer-file-name) (init-f (flymake-get-init-function source-file-name)) (cleanup-f (flymake-get-cleanup-function source-file-name)) - (cmd-and-args (funcall init-f (current-buffer))) + (cmd-and-args (funcall init-f)) (cmd (nth 0 cmd-and-args)) (args (nth 1 cmd-and-args)) (dir (nth 2 cmd-and-args))) @@ -1535,20 +1533,14 @@ (error "Invalid file-name")) (let* ((dir (file-name-directory file-name)) + ;; Not sure what this slash-pos is all about, but I guess it's just + ;; trying to remove the leading / of absolute file names. (slash-pos (string-match "/" dir)) - (temp-dir (concat (file-name-as-directory (flymake-get-temp-dir)) (substring dir (1+ slash-pos))))) - - (file-truename (concat (file-name-as-directory temp-dir) - (file-name-nondirectory file-name))))) + (temp-dir (expand-file-name (substring dir (1+ slash-pos)) + (flymake-get-temp-dir)))) -(defun flymake-strrchr (str ch) - (let* ((count (length str)) - (pos nil)) - (while (and (not pos) (> count 0)) - (if (= ch (elt str (1- count))) - (setq pos (1- count))) - (setq count (1- count))) - pos)) + (file-truename (expand-file-name (file-name-nondirectory file-name) + temp-dir)))) (defun flymake-delete-temp-directory (dir-name) "Attempt to delete temp dir created by `flymake-create-temp-with-folder-structure', do not fail on error." @@ -1557,12 +1549,11 @@ (slash-pos nil)) (while (> (length suffix) 0) + (setq suffix (directory-file-name suffix)) ;;+(flymake-log 0 "suffix=%s" suffix) - (flymake-safe-delete-directory (file-truename (concat (file-name-as-directory temp-dir) suffix))) - (setq slash-pos (flymake-strrchr suffix (string-to-char "/"))) - (if slash-pos - (setq suffix (substring suffix 0 slash-pos)) - (setq suffix ""))))) + (flymake-safe-delete-directory + (file-truename (expand-file-name suffix temp-dir))) + (setq suffix (file-name-directory suffix))))) (defvar flymake-temp-source-file-name nil) (make-variable-buffer-local 'flymake-temp-source-file-name) @@ -1576,14 +1567,13 @@ (defvar flymake-base-dir nil) (make-variable-buffer-local 'flymake-base-dir) -(defun flymake-init-create-temp-buffer-copy (buffer create-temp-f) +(defun flymake-init-create-temp-buffer-copy (create-temp-f) "Make a temporary copy of the current buffer, save its name in buffer data and return the name." - (let* ((source-file-name (buffer-file-name buffer)) + (let* ((source-file-name buffer-file-name) (temp-source-file-name (funcall create-temp-f source-file-name "flymake"))) - (flymake-save-buffer-in-file buffer temp-source-file-name) - (with-current-buffer buffer - (setq flymake-temp-source-file-name temp-source-file-name)) + (flymake-save-buffer-in-file temp-source-file-name) + (setq flymake-temp-source-file-name temp-source-file-name) temp-source-file-name)) (defun flymake-simple-cleanup (buffer) @@ -1661,24 +1651,23 @@ (setq base-dirs-count (1- base-dirs-count)))))) real-name)) -(defun flymake-init-find-buildfile-dir (buffer source-file-name buildfile-name) +(defun flymake-init-find-buildfile-dir (source-file-name buildfile-name) "Find buildfile, store its dir in buffer data and return its dir, if found." (let* ((buildfile-dir (flymake-find-buildfile buildfile-name (file-name-directory source-file-name) flymake-buildfile-dirs))) (if buildfile-dir - (with-current-buffer buffer (setq flymake-base-dir buildfile-dir)) + (setq flymake-base-dir buildfile-dir) (flymake-log 1 "no buildfile (%s) for %s" buildfile-name source-file-name) - (with-current-buffer buffer - (flymake-report-fatal-status - "NOMK" (format "No buildfile (%s) found for %s" - buildfile-name source-file-name)))))) + (flymake-report-fatal-status + "NOMK" (format "No buildfile (%s) found for %s" + buildfile-name source-file-name))))) -(defun flymake-init-create-temp-source-and-master-buffer-copy (buffer get-incl-dirs-f create-temp-f master-file-masks include-regexp-list) +(defun flymake-init-create-temp-source-and-master-buffer-copy (get-incl-dirs-f create-temp-f master-file-masks include-regexp-list) "Find master file (or buffer), create it's copy along with a copy of the source file." - (let* ((source-file-name (buffer-file-name buffer)) - (temp-source-file-name (flymake-init-create-temp-buffer-copy buffer create-temp-f)) + (let* ((source-file-name buffer-file-name buffer) + (temp-source-file-name (flymake-init-create-temp-buffer-copy create-temp-f)) (master-and-temp-master (flymake-create-master-file source-file-name temp-source-file-name get-incl-dirs-f create-temp-f @@ -1687,13 +1676,10 @@ (if (not master-and-temp-master) (progn (flymake-log 1 "cannot find master file for %s" source-file-name) - (when (bufferp buffer) - (with-current-buffer buffer - (flymake-report-status "!" ""))) ; NOMASTER + (flymake-report-status "!" "") ; NOMASTER nil) - (with-current-buffer buffer - (setq flymake-master-file-name (nth 0 master-and-temp-master)) - (setq flymake-temp-master-file-name (nth 1 master-and-temp-master)))))) + (setq flymake-master-file-name (nth 0 master-and-temp-master)) + (setq flymake-temp-master-file-name (nth 1 master-and-temp-master))))) (defun flymake-master-cleanup (buffer) (flymake-simple-cleanup buffer) @@ -1729,30 +1715,30 @@ (concat "-DCHK_SOURCES=" source) "check-syntax"))) -(defun flymake-simple-make-init-impl (buffer create-temp-f use-relative-base-dir use-relative-source build-file-name get-cmdline-f) +(defun flymake-simple-make-init-impl (create-temp-f use-relative-base-dir use-relative-source build-file-name get-cmdline-f) "Create syntax check command line for a directly checked source file. Use CREATE-TEMP-F for creating temp copy." (let* ((args nil) - (source-file-name (buffer-file-name buffer)) - (buildfile-dir (flymake-init-find-buildfile-dir buffer source-file-name build-file-name))) + (source-file-name buffer-file-name) + (buildfile-dir (flymake-init-find-buildfile-dir source-file-name build-file-name))) (if buildfile-dir - (let* ((temp-source-file-name (flymake-init-create-temp-buffer-copy buffer create-temp-f))) + (let* ((temp-source-file-name (flymake-init-create-temp-buffer-copy create-temp-f))) (setq args (flymake-get-syntax-check-program-args temp-source-file-name buildfile-dir use-relative-base-dir use-relative-source get-cmdline-f)))) args)) -(defun flymake-simple-make-init (buffer) - (flymake-simple-make-init-impl buffer 'flymake-create-temp-inplace t t "Makefile" 'flymake-get-make-cmdline)) +(defun flymake-simple-make-init () + (flymake-simple-make-init-impl 'flymake-create-temp-inplace t t "Makefile" 'flymake-get-make-cmdline)) -(defun flymake-master-make-init (buffer get-incl-dirs-f master-file-masks include-regexp-list) +(defun flymake-master-make-init (get-incl-dirs-f master-file-masks include-regexp-list) "Create make command line for a source file checked via master file compilation." (let* ((make-args nil) (temp-master-file-name (flymake-init-create-temp-source-and-master-buffer-copy - buffer get-incl-dirs-f 'flymake-create-temp-inplace + get-incl-dirs-f 'flymake-create-temp-inplace master-file-masks include-regexp-list))) (when temp-master-file-name - (let* ((buildfile-dir (flymake-init-find-buildfile-dir buffer temp-master-file-name "Makefile"))) + (let* ((buildfile-dir (flymake-init-find-buildfile-dir temp-master-file-name "Makefile"))) (if buildfile-dir (setq make-args (flymake-get-syntax-check-program-args temp-master-file-name buildfile-dir nil nil 'flymake-get-make-cmdline))))) @@ -1762,18 +1748,17 @@ (flymake-find-buildfile "Makefile" source-dir flymake-buildfile-dirs)) ;;;; .h/make specific -(defun flymake-master-make-header-init (buffer) - (flymake-master-make-init buffer - 'flymake-get-include-dirs - '(".+\\.cpp$" ".+\\.c$") +(defun flymake-master-make-header-init () + (flymake-master-make-init 'flymake-get-include-dirs + '("\\.cpp\\'" "\\.c\\'") '("[ \t]*#[ \t]*include[ \t]*\"\\([\w0-9/\\_\.]*[/\\]*\\)\\(%s\\)\"" 1 2))) ;;;; .java/make specific -(defun flymake-simple-make-java-init (buffer) - (flymake-simple-make-init-impl buffer 'flymake-create-temp-with-folder-structure nil nil "Makefile" 'flymake-get-make-cmdline)) +(defun flymake-simple-make-java-init () + (flymake-simple-make-init-impl 'flymake-create-temp-with-folder-structure nil nil "Makefile" 'flymake-get-make-cmdline)) -(defun flymake-simple-ant-java-init (buffer) - (flymake-simple-make-init-impl buffer 'flymake-create-temp-with-folder-structure nil nil "build.xml" 'flymake-get-ant-cmdline)) +(defun flymake-simple-ant-java-init () + (flymake-simple-make-init-impl 'flymake-create-temp-with-folder-structure nil nil "build.xml" 'flymake-get-ant-cmdline)) (defun flymake-simple-java-cleanup (buffer) "Cleanup after `flymake-simple-make-java-init' -- delete temp file and dirs." @@ -1784,9 +1769,9 @@ (flymake-delete-temp-directory (file-name-directory temp-source-file-name))))) ;;;; perl-specific init-cleanup routines -(defun flymake-perl-init (buffer) +(defun flymake-perl-init () (let* ((temp-file (flymake-init-create-temp-buffer-copy - buffer 'flymake-create-temp-inplace)) + 'flymake-create-temp-inplace)) (local-file (concat (flymake-build-relative-filename (file-name-directory buffer-file-name) (file-name-directory temp-file)) @@ -1798,13 +1783,13 @@ ;;(list "latex" (list "-c-style-errors" file-name)) (list "texify" (list "--pdf" "--tex-option=-c-style-errors" file-name))) -(defun flymake-simple-tex-init (buffer) - (flymake-get-tex-args (flymake-init-create-temp-buffer-copy buffer 'flymake-create-temp-inplace))) +(defun flymake-simple-tex-init () + (flymake-get-tex-args (flymake-init-create-temp-buffer-copy 'flymake-create-temp-inplace))) -(defun flymake-master-tex-init (buffer) +(defun flymake-master-tex-init () (let* ((temp-master-file-name (flymake-init-create-temp-source-and-master-buffer-copy - buffer 'flymake-get-include-dirs-dot 'flymake-create-temp-inplace - '(".+\\.tex$") + 'flymake-get-include-dirs-dot 'flymake-create-temp-inplace + '("\\.tex\\'") '("[ \t]*\\input[ \t]*{\\(.*\\)\\(%s\\)}" 1 2)))) (when temp-master-file-name (flymake-get-tex-args temp-master-file-name)))) @@ -1813,8 +1798,8 @@ '(".")) ;;;; xml-specific init-cleanup routines -(defun flymake-xml-init (buffer) - (list "xml" (list "val" (flymake-init-create-temp-buffer-copy buffer 'flymake-create-temp-inplace)))) +(defun flymake-xml-init () + (list "xml" (list "val" (flymake-init-create-temp-buffer-copy 'flymake-create-temp-inplace)))) (provide 'flymake)