krasimir added a comment.

This is getting more fun: the reason why `///` isn't broken up is because the 
first character `/` after the comment leader `//` is considered punctuation per 
isPunctuation's CHAR_RAWDEL, which includes all these 
`{}[]#<>%:;?*+-/^&|~!=,"'`:

- 
https://github.com/llvm/llvm-project/blob/73a15ad567071c13e761fd6d593e2b66164865e2/clang/lib/Format/BreakableToken.cpp#L790
- 
https://github.com/llvm/llvm-project/blob/73a15ad567071c13e761fd6d593e2b66164865e2/clang/include/clang/Basic/CharInfo.h#L139
- 
https://github.com/llvm/llvm-project/blob/73a15ad567071c13e761fd6d593e2b66164865e2/clang/include/clang/Basic/CharInfo.h#L31

With this patch, we got stuff like:

  % cat test.cc
  //# status
  //. status
  //; status
  //{ status
  /// status
  //, status
  //: status
  % ~/llvm/llvm-project/build/bin/clang-format test.cc
  // # status
  //. status
  //; status
  //{ status
  /// status
  //, status
  //: status

This makes me think that we should really consider not adding indent if the 
first character is punctuation WAI, with rationale:

- comments starting with such characters often have special meaning, 
clang-format errors out on the conservative side to not touch them. Example is 
stuff like `//!` in Doxygen blocks: https://www.doxygen.nl/manual/docblocks.html
- it's possible to work around this by changing the source code to use `// #`; 
clang-format will respect indentation in that case (also for other punctuation 
characters).

WDYAT?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D121451

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

Reply via email to