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