From a2e7d0dee30d60bb212b6f362d54c1840427abe9 Mon Sep 17 00:00:00 2001 From: Krasimir Georgiev Date: Tue, 29 Aug 2017 13:51:38 +0000 Subject: [clang-format] Do not format likely xml Summary: This patch detects the leading '<' in likely xml files and stops formatting in that case. A recent use of a Qt xml file with a .ts extension triggered this: http://doc.qt.io/qt-4.8/linguist-ts-file-format.html Reviewers: djasper Reviewed By: djasper Subscribers: sammccall, cfe-commits, klimek Differential Revision: https://reviews.llvm.org/D37136 llvm-svn: 311999 --- clang/lib/Format/Format.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'clang/lib/Format/Format.cpp') diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp index aa4ed8c42a7..4b067fcea3e 100644 --- a/clang/lib/Format/Format.cpp +++ b/clang/lib/Format/Format.cpp @@ -1539,14 +1539,19 @@ bool isMpegTS(StringRef Code) { return Code.size() > 188 && Code[0] == 0x47 && Code[188] == 0x47; } +bool likelyXml(StringRef Code) { + return Code.ltrim().startswith("<"); +} + tooling::Replacements sortIncludes(const FormatStyle &Style, StringRef Code, ArrayRef Ranges, StringRef FileName, unsigned *Cursor) { tooling::Replacements Replaces; if (!Style.SortIncludes) return Replaces; - if (Style.Language == FormatStyle::LanguageKind::LK_JavaScript && - isMpegTS(Code)) + if (likelyXml(Code) || + (Style.Language == FormatStyle::LanguageKind::LK_JavaScript && + isMpegTS(Code))) return Replaces; if (Style.Language == FormatStyle::LanguageKind::LK_JavaScript) return sortJavaScriptImports(Style, Code, Ranges, FileName); @@ -1894,7 +1899,8 @@ tooling::Replacements reformat(const FormatStyle &Style, StringRef Code, FormatStyle Expanded = expandPresets(Style); if (Expanded.DisableFormat) return tooling::Replacements(); - if (Expanded.Language == FormatStyle::LK_JavaScript && isMpegTS(Code)) + if (likelyXml(Code) || + (Expanded.Language == FormatStyle::LK_JavaScript && isMpegTS(Code))) return tooling::Replacements(); typedef std::function -- cgit v1.2.3