summaryrefslogtreecommitdiffstats
path: root/clang/tools
diff options
context:
space:
mode:
authorManuel Klimek <klimek@google.com>2015-05-08 13:59:15 +0000
committerManuel Klimek <klimek@google.com>2015-05-08 13:59:15 +0000
commit3dfe4a87c891a3a73575272f742fb21b3d6ae7e1 (patch)
treefb94dfe58caf6af9d5d4d360a2bc61135fc42d03 /clang/tools
parent0cb96aaf2b7c399d723ce387077ea7967723f058 (diff)
downloadbcm5719-llvm-3dfe4a87c891a3a73575272f742fb21b3d6ae7e1.tar.gz
bcm5719-llvm-3dfe4a87c891a3a73575272f742fb21b3d6ae7e1.zip
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. llvm-svn: 236854
Diffstat (limited to 'clang/tools')
-rw-r--r--clang/tools/clang-format/ClangFormat.cpp16
-rw-r--r--clang/tools/clang-format/clang-format.el17
2 files changed, 22 insertions, 11 deletions
diff --git a/clang/tools/clang-format/ClangFormat.cpp b/clang/tools/clang-format/ClangFormat.cpp
index fe7d678852d..ae2180c8370 100644
--- a/clang/tools/clang-format/ClangFormat.cpp
+++ b/clang/tools/clang-format/ClangFormat.cpp
@@ -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);
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());
}
}
diff --git a/clang/tools/clang-format/clang-format.el b/clang/tools/clang-format/clang-format.el
index add2436bbe7..ca461444e22 100644
--- a/clang/tools/clang-format/clang-format.el
+++ b/clang/tools/clang-format/clang-format.el
@@ -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 given uses `clang-format-style'."
((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)))))
OpenPOWER on IntegriCloud