diff options
| -rwxr-xr-x | clang/tools/clang-format/clang-format-diff.py | 10 | ||||
| -rw-r--r-- | clang/tools/clang-format/clang-format.el | 47 | ||||
| -rw-r--r-- | clang/tools/clang-format/clang-format.py | 7 | 
3 files changed, 58 insertions, 6 deletions
| diff --git a/clang/tools/clang-format/clang-format-diff.py b/clang/tools/clang-format/clang-format-diff.py index ab5f1b1bc63..16c6ad2159f 100755 --- a/clang/tools/clang-format/clang-format-diff.py +++ b/clang/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/clang/tools/clang-format/clang-format.el b/clang/tools/clang-format/clang-format.el new file mode 100644 index 00000000000..c63c62ee551 --- /dev/null +++ b/clang/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/clang/tools/clang-format/clang-format.py b/clang/tools/clang-format/clang-format.py index de922574070..d90c62a5bf6 100644 --- a/clang/tools/clang-format/clang-format.py +++ b/clang/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) | 

