owenpan added inline comments.

================
Comment at: clang/lib/Format/Format.cpp:3893
 
+bool isClangFormatOn(StringRef Comment) {
+  if (Comment == "/* clang-format on */")
----------------
alexolog wrote:
> alexolog wrote:
> > Here's my attempt at something flexible:
> > Disclaimer: this is my first time looking at the LLVM codebase, so don't 
> > expect production quality.
> > 
> > ```
> > ////////////////////////////////////////////////////////////////////////////////////////////////////
> > 
> > // Implementation detail, hide in a namespace and/or take out of the header
> > bool isClangFormatMarked(StringRef Comment, StringRef Mark) {
> >   // Quick heuristics: minimum length and starts with a slash (comment)
> >   // Shortest tag: "//clang-format on", 17 characters
> >   static constexpr StringLiteral clangFormatStr("clang-format ");
> >   if (Comment.size() < clangFormatStr.size() + 4 || Comment[0] != '/')
> >     return false;
> > 
> >   // check if it's a comment starting with "//" or "/*"
> >   bool CloseNeeded = false;
> >   if (Comment[1] == '*')
> >     CloseNeeded = true;
> >   else if (Comment[1] != '/')
> >     return false;
> > 
> >   // Remove the comment start and all following whitespace
> >   Comment = Comment.substr(2).ltrim();
> > 
> >   // Check for the actual command, a piece at a time
> >   if (!Comment.consume_front(clangFormatStr) || 
> > !Comment.consume_front(Mark))
> >     return false;
> > 
> >   // Are we there yet?
> >   if (!CloseNeeded && Comment.empty() ||
> >       CloseNeeded && Comment.starts_with("*/"))
> >     return true;
> > 
> >   // For a trailer, restrict the next character
> >   // (currently spaces and tabs, but can include a colon, etc.)
> >   static constexpr StringLiteral Separator(" \t");
> >   if (!Separator.contains(Comment[0]))
> >     return false;
> >   
> >   // Verify comment is properly terminated
> >   if (!CloseNeeded || Comment.contains("*/"))
> >     return true;
> > 
> >   return false; // Everything else
> > }
> > 
> > ////////////////////////////////////////////////////////////////////////////////////////////////////
> > 
> > bool isClangFormatOn(StringRef Comment) {
> >   return isClangFormatMarked(Comment, "on");
> > }
> > 
> > bool isClangFormatOff(StringRef Comment) {
> >   return isClangFormatMarked(Comment, "off");
> > }
> > 
> > ////////////////////////////////////////////////////////////////////////////////////////////////////
> > 
> >   EXPECT_TRUE(isClangFormatOn("//clang-format on"));
> >   EXPECT_TRUE(isClangFormatOn("// clang-format on"));
> >   EXPECT_TRUE(isClangFormatOn("//clang-format on "));
> >   EXPECT_TRUE(isClangFormatOn("//clang-format on and off"));
> >   EXPECT_TRUE(isClangFormatOn("/*clang-format on*/"));
> >   EXPECT_TRUE(isClangFormatOn("/* clang-format on*/"));
> >   EXPECT_TRUE(isClangFormatOn("/*clang-format on */"));
> >   EXPECT_TRUE(isClangFormatOn("/*clang-format on*/int i{0};"));
> > 
> >   EXPECT_FALSE(isClangFormatOn("//clang-format  on"));
> >   EXPECT_FALSE(isClangFormatOn("//clang-format o"));
> >   EXPECT_FALSE(isClangFormatOn("//     clang-format o"));
> >   EXPECT_FALSE(isClangFormatOn("//clang-format ontario"));
> >   EXPECT_FALSE(isClangFormatOn("//clang-format off"));
> >   EXPECT_FALSE(isClangFormatOn("/*clang-format onwards*/"));
> > 
> > ////////////////////////////////////////////////////////////////////////////////////////////////////
> > ```
> Sorry about the "done".  My misunderstanding
> Here's my attempt at something flexible:
> Disclaimer: this is my first time looking at the LLVM codebase, so don't 
> expect production quality.

Thanks! If we didn't have to worry about regressions, we might want to do 
something like what you suggested above.


================
Comment at: clang/lib/Format/Format.cpp:3901
+  return Comment.startswith(Prefix) &&
+         (Comment.size() == Size || isblank(Comment[Size]));
+}
----------------
HazardyKnusperkeks wrote:
> rymiel wrote:
> > Should the space be required? What about `// clang-format off: reasoning` 
> > or similar?
> > 
> > Also, should this be documented?
> > Should the space be required? What about `// clang-format off: reasoning` 
> > or similar?
> > 
> > Also, should this be documented?
> 
> +1
> Should the space be required? What about `// clang-format off: reasoning` or 
> similar?

On second thought, we should make it more restrictive to avoid regressions. How 
about //requiring// a colon, i.e. `// clang-format off:` (but not `// 
clang-format off :`)?
 
> Also, should this be documented?

Yep.



Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D142804/new/

https://reviews.llvm.org/D142804

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to