r236854 - Make emacs show when clang-format encountered a syntax error.
Daniel Jasper
djasper at google.com
Fri May 8 08:08:59 PDT 2015
On Fri, May 8, 2015 at 3:59 PM, Manuel Klimek <klimek at google.com> wrote:
> Author: klimek
> Date: Fri May 8 08:59:15 2015
> New Revision: 236854
>
> URL: http://llvm.org/viewvc/llvm-project?rev=236854&view=rev
> Log:
> Make emacs show when clang-format encountered a syntax error.
>
> Propagate the 'incomplete-format' state back through clang-format's command
> line interace and adapt the emacs integration to show a better result.
>
> Added:
> cfe/trunk/test/Format/incomplete.cpp
> - copied, changed from r236846, cfe/trunk/test/Format/cursor.cpp
> Modified:
> cfe/trunk/test/Format/cursor.cpp
> cfe/trunk/tools/clang-format/ClangFormat.cpp
> cfe/trunk/tools/clang-format/clang-format.el
>
> Modified: cfe/trunk/test/Format/cursor.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Format/cursor.cpp?rev=236854&r1=236853&r2=236854&view=diff
>
> ==============================================================================
> --- cfe/trunk/test/Format/cursor.cpp (original)
> +++ cfe/trunk/test/Format/cursor.cpp Fri May 8 08:59:15 2015
> @@ -1,6 +1,6 @@
> // RUN: grep -Ev "// *[A-Z-]+:" %s > %t2.cpp
> // RUN: clang-format -style=LLVM %t2.cpp -cursor=6 > %t.cpp
> // RUN: FileCheck -strict-whitespace -input-file=%t.cpp %s
> -// CHECK: {{^\{ "Cursor": 4 \}$}}
> +// CHECK: {{^\{ "Cursor": 4, }}
> // CHECK: {{^int\ \i;$}}
> int i;
>
> Copied: cfe/trunk/test/Format/incomplete.cpp (from r236846,
> cfe/trunk/test/Format/cursor.cpp)
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Format/incomplete.cpp?p2=cfe/trunk/test/Format/incomplete.cpp&p1=cfe/trunk/test/Format/cursor.cpp&r1=236846&r2=236854&rev=236854&view=diff
>
> ==============================================================================
> --- cfe/trunk/test/Format/cursor.cpp (original)
> +++ cfe/trunk/test/Format/incomplete.cpp Fri May 8 08:59:15 2015
> @@ -1,6 +1,8 @@
> // RUN: grep -Ev "// *[A-Z-]+:" %s > %t2.cpp
> -// RUN: clang-format -style=LLVM %t2.cpp -cursor=6 > %t.cpp
> +// RUN: clang-format -style=LLVM %t2.cpp > %t.cpp
> // RUN: FileCheck -strict-whitespace -input-file=%t.cpp %s
> -// CHECK: {{^\{ "Cursor": 4 \}$}}
> +// CHECK: {{^\{ "IncompleteFormat": true }}
> // CHECK: {{^int\ \i;$}}
> int i;
> +// CHECK: {{^f \( g \(;$}}
> +f ( g (;
>
> Modified: cfe/trunk/tools/clang-format/ClangFormat.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-format/ClangFormat.cpp?rev=236854&r1=236853&r2=236854&view=diff
>
> ==============================================================================
> --- cfe/trunk/tools/clang-format/ClangFormat.cpp (original)
> +++ cfe/trunk/tools/clang-format/ClangFormat.cpp Fri May 8 08:59:15 2015
> @@ -225,14 +225,17 @@ static bool format(StringRef FileName) {
>
> FormatStyle FormatStyle = getStyle(
> Style, (FileName == "-") ? AssumeFilename : FileName,
> FallbackStyle);
> - tooling::Replacements Replaces = reformat(FormatStyle, Sources, ID,
> Ranges);
> + bool IncompleteFormat = false;
> + tooling::Replacements Replaces = reformat(FormatStyle, Sources, ID,
> Ranges, &IncompleteFormat);
>
Column limit .... Y U no clang-format ;-).
> if (OutputXML) {
> - llvm::outs()
> - << "<?xml version='1.0'?>\n<replacements xml:space='preserve'>\n";
> + llvm::outs() << "<?xml version='1.0'?>\n<replacements "
> + "xml:space='preserve' incomplete_format='"
> + << (IncompleteFormat ? "true" : "false") << "'>\n";
> if (Cursor.getNumOccurrences() != 0)
> llvm::outs() << "<cursor>"
> << tooling::shiftedCodePosition(Replaces, Cursor)
> << "</cursor>\n";
> +
> for (tooling::Replacements::const_iterator I = Replaces.begin(),
> E = Replaces.end();
> I != E; ++I) {
> @@ -252,9 +255,12 @@ static bool format(StringRef FileName) {
> else if (Rewrite.overwriteChangedFiles())
> return true;
> } else {
> + outs() << "{";
> if (Cursor.getNumOccurrences() != 0)
> - outs() << "{ \"Cursor\": "
> - << tooling::shiftedCodePosition(Replaces, Cursor) << "
> }\n";
> + outs() << " \"Cursor\": "
> + << tooling::shiftedCodePosition(Replaces, Cursor) << ",";
> + outs() << " \"IncompleteFormat\": "
> + << (IncompleteFormat ? "true" : "false") << " }\n";
> Rewrite.getEditBuffer(ID).write(outs());
> }
> }
>
> Modified: cfe/trunk/tools/clang-format/clang-format.el
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-format/clang-format.el?rev=236854&r1=236853&r2=236854&view=diff
>
> ==============================================================================
> --- cfe/trunk/tools/clang-format/clang-format.el (original)
> +++ cfe/trunk/tools/clang-format/clang-format.el Fri May 8 08:59:15 2015
> @@ -61,6 +61,7 @@ of the buffer."
> (unless (and (listp xml-node) (eq (xml-node-name xml-node)
> 'replacements))
> (error "Expected <replacements> node"))
> (let ((nodes (xml-node-children xml-node))
> + (incomplete-format (xml-get-attribute xml-node
> 'incomplete_format))
> replacements
> cursor)
> (dolist (node nodes)
> @@ -89,7 +90,7 @@ of the buffer."
> (and (= (car a) (car b))
> (> (cadr a) (cadr b)))))))
>
> - (cons replacements cursor)))
> + (list replacements cursor (string= incomplete-format "true"))))
>
> (defun clang-format--replace (offset length &optional text)
> (let ((start (byte-to-position (1+ offset)))
> @@ -142,20 +143,24 @@ is no active region. If no style is giv
> ((stringp status)
> (error "(clang-format killed by signal %s%s)" status stderr))
> ((not (equal 0 status))
> - (error "(clang-format failed with code %d%s)" status stderr))
> - (t (message "(clang-format succeeded%s)" stderr)))
> + (error "(clang-format failed with code %d%s)" status stderr)))
>
> (with-current-buffer temp-buffer
> (setq operations (clang-format--extract (car
> (xml-parse-region)))))
>
> - (let ((replacements (car operations))
> - (cursor (cdr operations)))
> + (let ((replacements (nth 0 operations))
> + (cursor (nth 1 operations))
> + (incomplete-format (nth 2 operations)))
> (save-excursion
> (mapc (lambda (rpl)
> (apply #'clang-format--replace rpl))
> replacements))
> (when cursor
> - (goto-char (byte-to-position (1+ cursor))))))
> + (goto-char (byte-to-position (1+ cursor))))
> + (message "%s" incomplete-format)
> + (if incomplete-format
> + (message "(clang-format: incomplete (syntax errors)%s)"
> stderr)
> + (message "(clang-format: success%s)" stderr))))
> (delete-file temp-file)
> (when (buffer-name temp-buffer) (kill-buffer temp-buffer)))))
>
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150508/e323893e/attachment.html>
More information about the cfe-commits
mailing list