Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(124)

Side by Side Diff: tools/emacs/flymake-chromium.el

Issue 8872013: Fix flymake to work with my Emacs, and hopefully not break others. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Check for nil. Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 ;; Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 ;; Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 ;; Use of this source code is governed by a BSD-style license that can be 2 ;; Use of this source code is governed by a BSD-style license that can be
3 ;; found in the LICENSE file. 3 ;; found in the LICENSE file.
4 4
5 ;; Set up flymake for use with chromium code. Uses ninja (since none of the 5 ;; Set up flymake for use with chromium code. Uses ninja (since none of the
6 ;; other chromium build systems have latency that allows interactive use). 6 ;; other chromium build systems have latency that allows interactive use).
7 ;; 7 ;;
8 ;; Requires a modern emacs (GNU Emacs >= 23) and that gyp has already generated 8 ;; Requires a modern emacs (GNU Emacs >= 23) and that gyp has already generated
9 ;; the build.ninja file(s). See defcustoms below for settable knobs. 9 ;; the build.ninja file(s). See defcustoms below for settable knobs.
10 10
11 11
12 (require 'flymake) 12 (require 'flymake)
13 13
14 (defcustom cr-flymake-ninja-build-file "out/Debug/build.ninja" 14 (defcustom cr-flymake-ninja-build-file "out/Debug/build.ninja"
15 "Relative path from chromium's src/ directory to the 15 "Relative path from chromium's src/ directory to the
16 build.ninja file to use.") 16 build.ninja file to use.")
17 17
18 (defcustom cr-flymake-ninja-executable "ninja" 18 (defcustom cr-flymake-ninja-executable "ninja"
19 "Ninja executable location; either in $PATH or explicitly given.") 19 "Ninja executable location; either in $PATH or explicitly given.")
20 20
21 (defun cr-flymake-absbufferpath ()
22 "Return the absolute path to the current buffer. On some
23 Emacsen, buffer-file-truename is not absolute but rather uses a
Ami GONE FROM CHROMIUM 2011/12/08 16:17:01 I believe this behavior is in fact the case for al
Ami GONE FROM CHROMIUM 2011/12/08 19:27:49 Remove the second sentence of the docstring.
Jói 2011/12/08 20:46:16 Done.
24 path relative to the user's home dir (with ~)."
25 (when buffer-file-truename
26 (expand-file-name buffer-file-truename)))
27
21 (defun cr-flymake-chromium-src () 28 (defun cr-flymake-chromium-src ()
22 "Return chromium's src/ directory, or nil on failure." 29 "Return chromium's src/ directory, or nil on failure."
23 (locate-dominating-file buffer-file-truename cr-flymake-ninja-build-file)) 30 (let ((srcdir (locate-dominating-file
31 (cr-flymake-absbufferpath) cr-flymake-ninja-build-file)))
32 (when srcdir (expand-file-name srcdir))))
Ami GONE FROM CHROMIUM 2011/12/08 19:27:49 You don't need this when (and thus the above let)
Jói 2011/12/08 20:46:16 locate-dominating-file is fine with a nil and then
Ami GONE FROM CHROMIUM 2011/12/08 20:49:16 I was mis-reading the code before (thinking you're
24 33
25 (defun cr-flymake-string-prefix-p (prefix str) 34 (defun cr-flymake-string-prefix-p (prefix str)
26 "Return non-nil if PREFIX is a prefix of STR (23.2 has string-prefix-p but 35 "Return non-nil if PREFIX is a prefix of STR (23.2 has string-prefix-p but
27 that's case insensitive and also 23.1 doesn't have it)." 36 that's case insensitive and also 23.1 doesn't have it)."
28 (string= prefix (substring str 0 (length prefix)))) 37 (string= prefix (substring str 0 (length prefix))))
29 38
30 (defun cr-flymake-current-file-name () 39 (defun cr-flymake-current-file-name ()
31 "Return the relative path from chromium's src/ directory to the 40 "Return the relative path from chromium's src/ directory to the
32 file backing the current buffer or nil if it doesn't look like 41 file backing the current buffer or nil if it doesn't look like
33 we're under chromium/src/." 42 we're under chromium/src/."
34 (when (and (cr-flymake-chromium-src) 43 (when (and (cr-flymake-chromium-src)
35 (cr-flymake-string-prefix-p 44 (cr-flymake-string-prefix-p
36 (cr-flymake-chromium-src) buffer-file-truename)) 45 (cr-flymake-chromium-src) (cr-flymake-absbufferpath)))
37 (substring buffer-file-truename (length (cr-flymake-chromium-src))))) 46 (substring (cr-flymake-absbufferpath) (length (cr-flymake-chromium-src)))))
Ami GONE FROM CHROMIUM 2011/12/08 16:17:01 I don't understand the need for these abspath chan
38 47
39 (defun cr-flymake-from-build-to-src-root () 48 (defun cr-flymake-from-build-to-src-root ()
40 "Return a path fragment for getting from the build.ninja file to src/." 49 "Return a path fragment for getting from the build.ninja file to src/."
41 (replace-regexp-in-string 50 (replace-regexp-in-string
42 "[^/]+" ".." 51 "[^/]+" ".."
43 (substring 52 (substring
44 (file-name-directory 53 (file-name-directory
45 (file-truename (or (and (cr-flymake-string-prefix-p 54 (file-truename (or (and (cr-flymake-string-prefix-p
46 "/" cr-flymake-ninja-build-file) 55 "/" cr-flymake-ninja-build-file)
47 cr-flymake-ninja-build-file) 56 cr-flymake-ninja-build-file)
(...skipping 13 matching lines...) Expand all
61 (list "-C" 70 (list "-C"
62 (concat (cr-flymake-chromium-src) 71 (concat (cr-flymake-chromium-src)
63 (file-name-directory cr-flymake-ninja-build-file)) 72 (file-name-directory cr-flymake-ninja-build-file))
64 (concat (cr-flymake-from-build-to-src-root) 73 (concat (cr-flymake-from-build-to-src-root)
65 (cr-flymake-current-file-name) "^"))))) 74 (cr-flymake-current-file-name) "^")))))
66 75
67 (defun cr-flymake-kick-off-check-after-save () 76 (defun cr-flymake-kick-off-check-after-save ()
68 "Kick off a syntax check after file save, if flymake-mode is on." 77 "Kick off a syntax check after file save, if flymake-mode is on."
69 (when flymake-mode (flymake-start-syntax-check))) 78 (when flymake-mode (flymake-start-syntax-check)))
70 79
71 (defadvice next-error (around cr-flymake-next-error activate) 80 (defadvice next-error (around flymake-next-error activate)
Ami GONE FROM CHROMIUM 2011/12/08 16:17:01 This change is wrong - that particular arg to defa
72 "If flymake has something to say, let it say it; otherwise 81 "If flymake has something to say, let it say it; otherwise
73 revert to normal next-error behavior." 82 revert to normal next-error behavior."
74 (if (not flymake-err-info) 83 (if (not flymake-err-info)
75 (condition-case msg 84 (condition-case msg
76 ad-do-it 85 ad-do-it
77 (error (message "%s" (prin1-to-string msg)))) 86 (error (message "%s" (prin1-to-string msg))))
78 (flymake-goto-next-error) 87 (flymake-goto-next-error)
79 ;; copy/pasted from flymake-display-err-menu-for-current-line because I 88 ;; copy/pasted from flymake-display-err-menu-for-current-line because I
80 ;; couldn't find a way to have it tell me what the relevant error for this 89 ;; couldn't find a way to have it tell me what the relevant error for this
81 ;; line was in a single call: 90 ;; line was in a single call:
(...skipping 23 matching lines...) Expand all
105 (kill-local-variable 'flymake-allowed-file-name-masks)))) 114 (kill-local-variable 'flymake-allowed-file-name-masks))))
106 115
107 (add-hook 'find-file-hook 'cr-flymake-find-file 'append) 116 (add-hook 'find-file-hook 'cr-flymake-find-file 'append)
108 (add-hook 'after-save-hook 'cr-flymake-kick-off-check-after-save) 117 (add-hook 'after-save-hook 'cr-flymake-kick-off-check-after-save)
109 118
110 ;; Show flymake infrastructure ERRORs in hopes of fixing them. Set to 3 for 119 ;; Show flymake infrastructure ERRORs in hopes of fixing them. Set to 3 for
111 ;; DEBUG-level output from flymake.el. 120 ;; DEBUG-level output from flymake.el.
112 (setq flymake-log-level 0) 121 (setq flymake-log-level 0)
113 122
114 (provide 'flymake-chromium) 123 (provide 'flymake-chromium)
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698