diff options
author | Daniel Jasper <djasper@google.com> | 2013-04-09 15:23:04 +0000 |
---|---|---|
committer | Daniel Jasper <djasper@google.com> | 2013-04-09 15:23:04 +0000 |
commit | 63911838bf7891445ff39fdc7f81d1469d54f5c1 (patch) | |
tree | e8d0591f84016c3a6c2ce852a6edaed7f0e2c90e /tools | |
parent | 40db5155fbd78faa792aefec5ceddcbf4fc3bb41 (diff) |
Improvements to clang-format integrations.
This adds an emacs editor integration (thanks to Ami Fischman). Also
pulls out the style into a variable for the vi integration and just
uses clang-formats defaults style in clang-format-diff.py.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@179098 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools')
-rwxr-xr-x | tools/clang-format/clang-format-diff.py | 10 | ||||
-rw-r--r-- | tools/clang-format/clang-format.el | 47 | ||||
-rw-r--r-- | tools/clang-format/clang-format.py | 7 |
3 files changed, 58 insertions, 6 deletions
diff --git a/tools/clang-format/clang-format-diff.py b/tools/clang-format/clang-format-diff.py index ab5f1b1bc6..16c6ad2159 100755 --- a/tools/clang-format/clang-format-diff.py +++ b/tools/clang-format/clang-format-diff.py @@ -63,9 +63,10 @@ def formatRange(r, style): offset, length = getOffsetLength(filename, line_number, line_count) with open(filename, 'r') as f: text = f.read() - p = subprocess.Popen([binary, '-offset', str(offset), '-length', str(length), - '-style', style], - stdout=subprocess.PIPE, stderr=subprocess.PIPE, + command = [binary, '-offset', str(offset), '-length', str(length)] + if style: + command.append('-style', style) + p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE) stdout, stderr = p.communicate(input=text) if stderr: @@ -84,8 +85,7 @@ def main(): 'Reformat changed lines in diff') parser.add_argument('-p', default=1, help='strip the smallest prefix containing P slashes') - parser.add_argument('-style', default='LLVM', - help='formatting style to apply (LLVM, Google)') + parser.add_argument('-style', help='formatting style to apply (LLVM, Google)') args = parser.parse_args() filename = None diff --git a/tools/clang-format/clang-format.el b/tools/clang-format/clang-format.el new file mode 100644 index 0000000000..c63c62ee55 --- /dev/null +++ b/tools/clang-format/clang-format.el @@ -0,0 +1,47 @@ +;;; Clang-format emacs integration for use with C/Objective-C/C++. + +;; This defines a function clang-format-region that you can bind to a key. +;; A minimal .emacs would contain: +;; +;; (load "<path-to-clang>/tools/clang/clang-format/clang-format.el") +;; (global-set-key [C-M-tab] 'clang-format-region) +;; +;; Depending on your configuration and coding style, you might need to modify +;; 'style' and 'binary' below. +(defun clang-format-region () + (interactive) + (let ((orig-file buffer-file-name) + (orig-point (point)) + (orig-mark (mark t)) + (orig-mark-active mark-active) + (binary "clang-format") + (style "LLVM") + replacement-text replaced beg end) + (basic-save-buffer) + (save-restriction + (widen) + (if mark-active + (setq beg (1- (region-beginning)) + end (1- (region-end))) + (setq beg (1- (line-beginning-position)) + end (1- (line-end-position)))) + (with-temp-buffer + (call-process + binary orig-file '(t nil) t + "-offset" (number-to-string beg) + "-length" (number-to-string (- end beg)) + "-style" style) + (setq replacement-text + (buffer-substring-no-properties (point-min) (point-max)))) + (unless (string= replacement-text + (buffer-substring-no-properties (point-min) (point-max))) + (delete-region (point-min) (point-max)) + (insert replacement-text) + (setq replaced t))) + (ignore-errors + (when orig-mark + (push-mark orig-mark) + (when orig-mark-active + (activate-mark) + (setq deactivate-mark nil))) + (goto-char orig-point)))) diff --git a/tools/clang-format/clang-format.py b/tools/clang-format/clang-format.py index de92257407..d90c62a5bf 100644 --- a/tools/clang-format/clang-format.py +++ b/tools/clang-format/clang-format.py @@ -23,6 +23,10 @@ import subprocess # Change this to the full path if clang-format is not on the path. binary = 'clang-format' +# Change this to format according to other formatting styles (see +# clang-format -help) +style = 'LLVM' + # Get the current text. buf = vim.current.buffer text = "\n".join(buf) @@ -34,7 +38,8 @@ length = int(vim.eval('line2byte(' + str(vim.current.range.end + 2) + ')')) - offset - 2 # Call formatter. -p = subprocess.Popen([binary, '-offset', str(offset), '-length', str(length)], +p = subprocess.Popen([binary, '-offset', str(offset), '-length', str(length), + '-style', style], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE) stdout, stderr = p.communicate(input=text) |