Author: mprobst Date: Fri Sep 2 09:29:48 2016 New Revision: 280487 URL: http://llvm.org/viewvc/llvm-project?rev=280487&view=rev Log: clang-format: [JS] merge requoting replacements.
Summary: When formatting source code that needs both requoting and reindentation, merge the replacements to avoid erroring out for conflicting replacements. Also removes the misleading Replacements parameter from the TokenAnalyzer API. Reviewers: djasper Subscribers: klimek, cfe-commits Differential Revision: https://reviews.llvm.org/D24155 Modified: cfe/trunk/lib/Format/Format.cpp cfe/trunk/lib/Format/SortJavaScriptImports.cpp cfe/trunk/lib/Format/TokenAnalyzer.cpp cfe/trunk/lib/Format/TokenAnalyzer.h cfe/trunk/unittests/Format/FormatTestJS.cpp Modified: cfe/trunk/lib/Format/Format.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/Format.cpp?rev=280487&r1=280486&r2=280487&view=diff ============================================================================== --- cfe/trunk/lib/Format/Format.cpp (original) +++ cfe/trunk/lib/Format/Format.cpp Fri Sep 2 09:29:48 2016 @@ -801,14 +801,15 @@ public: tooling::Replacements analyze(TokenAnnotator &Annotator, SmallVectorImpl<AnnotatedLine *> &AnnotatedLines, - FormatTokenLexer &Tokens, tooling::Replacements &Result) override { + FormatTokenLexer &Tokens) override { + tooling::Replacements RequoteReplaces; deriveLocalStyle(AnnotatedLines); AffectedRangeMgr.computeAffectedLines(AnnotatedLines.begin(), AnnotatedLines.end()); if (Style.Language == FormatStyle::LK_JavaScript && Style.JavaScriptQuotes != FormatStyle::JSQS_Leave) - requoteJSStringLiteral(AnnotatedLines, Result); + requoteJSStringLiteral(AnnotatedLines, RequoteReplaces); for (unsigned i = 0, e = AnnotatedLines.size(); i != e; ++i) { Annotator.calculateFormattingInformation(*AnnotatedLines[i]); @@ -825,7 +826,7 @@ public: UnwrappedLineFormatter(&Indenter, &Whitespaces, Style, Tokens.getKeywords(), IncompleteFormat) .format(AnnotatedLines); - return Whitespaces.generateReplacements(); + return RequoteReplaces.merge(Whitespaces.generateReplacements()); } private: @@ -997,7 +998,7 @@ public: tooling::Replacements analyze(TokenAnnotator &Annotator, SmallVectorImpl<AnnotatedLine *> &AnnotatedLines, - FormatTokenLexer &Tokens, tooling::Replacements &Result) override { + FormatTokenLexer &Tokens) override { // FIXME: in the current implementation the granularity of affected range // is an annotated line. However, this is not sufficient. Furthermore, // redundant code introduced by replacements does not necessarily Modified: cfe/trunk/lib/Format/SortJavaScriptImports.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/SortJavaScriptImports.cpp?rev=280487&r1=280486&r2=280487&view=diff ============================================================================== --- cfe/trunk/lib/Format/SortJavaScriptImports.cpp (original) +++ cfe/trunk/lib/Format/SortJavaScriptImports.cpp Fri Sep 2 09:29:48 2016 @@ -127,7 +127,7 @@ public: tooling::Replacements analyze(TokenAnnotator &Annotator, SmallVectorImpl<AnnotatedLine *> &AnnotatedLines, - FormatTokenLexer &Tokens, tooling::Replacements &) override { + FormatTokenLexer &Tokens) override { tooling::Replacements Result; AffectedRangeMgr.computeAffectedLines(AnnotatedLines.begin(), AnnotatedLines.end()); @@ -282,7 +282,6 @@ private: SmallVectorImpl<AnnotatedLine *> &AnnotatedLines) { SmallVector<JsModuleReference, 16> References; SourceLocation Start; - bool FoundLines = false; AnnotatedLine *FirstNonImportLine = nullptr; bool AnyImportAffected = false; for (auto Line : AnnotatedLines) { @@ -296,7 +295,6 @@ private: Start = Line->First->Tok.getLocation(); if (!Current) continue; // Only comments on this line. - FoundLines = true; JsModuleReference Reference; Reference.Range.setBegin(Start); if (!parseModuleReference(Keywords, Reference)) { Modified: cfe/trunk/lib/Format/TokenAnalyzer.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/TokenAnalyzer.cpp?rev=280487&r1=280486&r2=280487&view=diff ============================================================================== --- cfe/trunk/lib/Format/TokenAnalyzer.cpp (original) +++ cfe/trunk/lib/Format/TokenAnalyzer.cpp Fri Sep 2 09:29:48 2016 @@ -107,7 +107,7 @@ tooling::Replacements TokenAnalyzer::pro } tooling::Replacements RunResult = - analyze(Annotator, AnnotatedLines, Tokens, Result); + analyze(Annotator, AnnotatedLines, Tokens); DEBUG({ llvm::dbgs() << "Replacements for run " << Run << ":\n"; Modified: cfe/trunk/lib/Format/TokenAnalyzer.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/TokenAnalyzer.h?rev=280487&r1=280486&r2=280487&view=diff ============================================================================== --- cfe/trunk/lib/Format/TokenAnalyzer.h (original) +++ cfe/trunk/lib/Format/TokenAnalyzer.h Fri Sep 2 09:29:48 2016 @@ -87,7 +87,7 @@ protected: virtual tooling::Replacements analyze(TokenAnnotator &Annotator, SmallVectorImpl<AnnotatedLine *> &AnnotatedLines, - FormatTokenLexer &Tokens, tooling::Replacements &Result) = 0; + FormatTokenLexer &Tokens) = 0; void consumeUnwrappedLine(const UnwrappedLine &TheLine) override; Modified: cfe/trunk/unittests/Format/FormatTestJS.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTestJS.cpp?rev=280487&r1=280486&r2=280487&view=diff ============================================================================== --- cfe/trunk/unittests/Format/FormatTestJS.cpp (original) +++ cfe/trunk/unittests/Format/FormatTestJS.cpp Fri Sep 2 09:29:48 2016 @@ -1334,6 +1334,13 @@ TEST_F(FormatTestJS, RequoteStringsSingl "let x = \"single\";\n"); } +TEST_F(FormatTestJS, RequoteAndIndent) { + verifyFormat("let x = someVeryLongFunctionThatGoesOnAndOn(\n" + " 'double quoted string that needs wrapping');", + "let x = someVeryLongFunctionThatGoesOnAndOn(" + "\"double quoted string that needs wrapping\");"); +} + TEST_F(FormatTestJS, RequoteStringsDouble) { FormatStyle DoubleQuotes = getGoogleStyle(FormatStyle::LK_JavaScript); DoubleQuotes.JavaScriptQuotes = FormatStyle::JSQS_Double; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits