<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, May 6, 2014 at 4:47 PM, Nico Weber <span dir="ltr"><<a href="mailto:thakis@chromium.org" target="_blank" class="cremed">thakis@chromium.org</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Having libFormat know about "goog.scope" seems pretty icky. Maybe this<br>
should be handled like the for loop macros instead?<br></blockquote><div><br></div><div>I don't disagree, we should eventually move this out again.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="HOEnZb"><div class="h5">
On Tue, May 6, 2014 at 6:54 AM, Daniel Jasper <<a href="mailto:djasper@google.com" class="cremed">djasper@google.com</a>> wrote:<br>
> Author: djasper<br>
> Date: Tue May  6 08:54:10 2014<br>
> New Revision: 208088<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=208088&view=rev" target="_blank" class="cremed">http://llvm.org/viewvc/llvm-project?rev=208088&view=rev</a><br>
> Log:<br>
> clang-format: [JS] Don't indent in goog.scope blocks.<br>
><br>
> Before:<br>
>   goog.scope(function() {<br>
>     var x = a.b;<br>
>     var y = c.d;<br>
>   });  // goog.scope<br>
><br>
> After:<br>
>   goog.scope(function() {<br>
>   var x = a.b;<br>
>   var y = c.d;<br>
>   });  // goog.scope<br>
><br>
> Modified:<br>
>     cfe/trunk/lib/Format/UnwrappedLineParser.cpp<br>
>     cfe/trunk/unittests/Format/FormatTestJS.cpp<br>
><br>
> Modified: cfe/trunk/lib/Format/UnwrappedLineParser.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/UnwrappedLineParser.cpp?rev=208088&r1=208087&r2=208088&view=diff" target="_blank" class="cremed">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/UnwrappedLineParser.cpp?rev=208088&r1=208087&r2=208088&view=diff</a><br>

> ==============================================================================<br>
> --- cfe/trunk/lib/Format/UnwrappedLineParser.cpp (original)<br>
> +++ cfe/trunk/lib/Format/UnwrappedLineParser.cpp Tue May  6 08:54:10 2014<br>
> @@ -415,16 +415,34 @@ void UnwrappedLineParser::parseBlock(boo<br>
>    Line->Level = InitialLevel;<br>
>  }<br>
><br>
> +static bool IsGoogScope(const UnwrappedLine &Line) {<br>
> +  if (Line.Tokens.size() < 4)<br>
> +    return false;<br>
> +  auto I = Line.Tokens.begin();<br>
> +  if (I->Tok->TokenText != "goog")<br>
> +    return false;<br>
> +  ++I;<br>
> +  if (I->Tok->isNot(tok::period))<br>
> +    return false;<br>
> +  ++I;<br>
> +  if (I->Tok->TokenText != "scope")<br>
> +    return false;<br>
> +  ++I;<br>
> +  return I->Tok->is(tok::l_paren);<br>
> +}<br>
> +<br>
>  void UnwrappedLineParser::parseChildBlock() {<br>
>    FormatTok->BlockKind = BK_Block;<br>
>    nextToken();<br>
>    {<br>
> +    bool GoogScope =<br>
> +        Style.Language == FormatStyle::LK_JavaScript && IsGoogScope(*Line);<br>
>      ScopedLineState LineState(*this);<br>
>      ScopedDeclarationState DeclarationState(*Line, DeclarationScopeStack,<br>
>                                              /*MustBeDeclaration=*/false);<br>
> -    Line->Level += 1;<br>
> +    Line->Level += GoogScope ? 0 : 1;<br>
>      parseLevel(/*HasOpeningBrace=*/true);<br>
> -    Line->Level -= 1;<br>
> +    Line->Level -= GoogScope ? 0 : 1;<br>
>    }<br>
>    nextToken();<br>
>  }<br>
><br>
> Modified: cfe/trunk/unittests/Format/FormatTestJS.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTestJS.cpp?rev=208088&r1=208087&r2=208088&view=diff" target="_blank" class="cremed">http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTestJS.cpp?rev=208088&r1=208087&r2=208088&view=diff</a><br>

> ==============================================================================<br>
> --- cfe/trunk/unittests/Format/FormatTestJS.cpp (original)<br>
> +++ cfe/trunk/unittests/Format/FormatTestJS.cpp Tue May  6 08:54:10 2014<br>
> @@ -91,5 +91,12 @@ TEST_F(FormatTestJS, SingleQuoteStrings)<br>
>    verifyFormat("this.function('', true);");<br>
>  }<br>
><br>
> +TEST_F(FormatTestJS, GoogScopes) {<br>
> +  verifyFormat("goog.scope(function() {\n"<br>
> +               "var x = a.b;\n"<br>
> +               "var y = c.d;\n"<br>
> +               "});  // goog.scope");<br>
> +}<br>
> +<br>
>  } // end namespace tooling<br>
>  } // end namespace clang<br>
><br>
><br>
> _______________________________________________<br>
> cfe-commits mailing list<br>
> <a href="mailto:cfe-commits@cs.uiuc.edu" class="cremed">cfe-commits@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank" class="cremed">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</div></div></blockquote></div><br></div></div>