r208088 - clang-format: [JS] Don't indent in goog.scope blocks.
Nico Weber
thakis at chromium.org
Tue May 6 07:47:18 PDT 2014
Having libFormat know about "goog.scope" seems pretty icky. Maybe this
should be handled like the for loop macros instead?
On Tue, May 6, 2014 at 6:54 AM, Daniel Jasper <djasper at google.com> wrote:
> Author: djasper
> Date: Tue May 6 08:54:10 2014
> New Revision: 208088
>
> URL: http://llvm.org/viewvc/llvm-project?rev=208088&view=rev
> Log:
> clang-format: [JS] Don't indent in goog.scope blocks.
>
> Before:
> goog.scope(function() {
> var x = a.b;
> var y = c.d;
> }); // goog.scope
>
> After:
> goog.scope(function() {
> var x = a.b;
> var y = c.d;
> }); // goog.scope
>
> Modified:
> cfe/trunk/lib/Format/UnwrappedLineParser.cpp
> cfe/trunk/unittests/Format/FormatTestJS.cpp
>
> Modified: cfe/trunk/lib/Format/UnwrappedLineParser.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/UnwrappedLineParser.cpp?rev=208088&r1=208087&r2=208088&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Format/UnwrappedLineParser.cpp (original)
> +++ cfe/trunk/lib/Format/UnwrappedLineParser.cpp Tue May 6 08:54:10 2014
> @@ -415,16 +415,34 @@ void UnwrappedLineParser::parseBlock(boo
> Line->Level = InitialLevel;
> }
>
> +static bool IsGoogScope(const UnwrappedLine &Line) {
> + if (Line.Tokens.size() < 4)
> + return false;
> + auto I = Line.Tokens.begin();
> + if (I->Tok->TokenText != "goog")
> + return false;
> + ++I;
> + if (I->Tok->isNot(tok::period))
> + return false;
> + ++I;
> + if (I->Tok->TokenText != "scope")
> + return false;
> + ++I;
> + return I->Tok->is(tok::l_paren);
> +}
> +
> void UnwrappedLineParser::parseChildBlock() {
> FormatTok->BlockKind = BK_Block;
> nextToken();
> {
> + bool GoogScope =
> + Style.Language == FormatStyle::LK_JavaScript && IsGoogScope(*Line);
> ScopedLineState LineState(*this);
> ScopedDeclarationState DeclarationState(*Line, DeclarationScopeStack,
> /*MustBeDeclaration=*/false);
> - Line->Level += 1;
> + Line->Level += GoogScope ? 0 : 1;
> parseLevel(/*HasOpeningBrace=*/true);
> - Line->Level -= 1;
> + Line->Level -= GoogScope ? 0 : 1;
> }
> nextToken();
> }
>
> Modified: cfe/trunk/unittests/Format/FormatTestJS.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTestJS.cpp?rev=208088&r1=208087&r2=208088&view=diff
> ==============================================================================
> --- cfe/trunk/unittests/Format/FormatTestJS.cpp (original)
> +++ cfe/trunk/unittests/Format/FormatTestJS.cpp Tue May 6 08:54:10 2014
> @@ -91,5 +91,12 @@ TEST_F(FormatTestJS, SingleQuoteStrings)
> verifyFormat("this.function('', true);");
> }
>
> +TEST_F(FormatTestJS, GoogScopes) {
> + verifyFormat("goog.scope(function() {\n"
> + "var x = a.b;\n"
> + "var y = c.d;\n"
> + "}); // goog.scope");
> +}
> +
> } // end namespace tooling
> } // end namespace clang
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list