[PATCH] D35955: clang-format: Add preprocessor directive indentation

Daniel Jasper via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Jul 31 22:29:25 PDT 2017


djasper added inline comments.


================
Comment at: docs/ClangFormatStyleOptions.rst:1182
 
+**IndentPPDirectives** (``bool``)
+  Indent preprocessor directives on conditionals.
----------------
I think we can foresee that a bool is not going to be enough here. Make this an enum, which for no can contain the values "no" and "afterhash" and in the long run can get a "beforehash" value.


================
Comment at: lib/Format/ContinuationIndenter.cpp:379
 
+  // indent preprocessor directives after the hash if required.
+  if ((State.Line->Type == LT_PreprocessorDirective ||
----------------
Start comments upper case.


================
Comment at: lib/Format/ContinuationIndenter.cpp:383
+      Current.Previous->is(tok::hash) && State.FirstIndent > 0) {
+    // subtract 1 so indent lines up with non-preprocessor code
+    Spaces += State.FirstIndent;
----------------
Same here and use full sentences.

Also, this does not seem to be what the example in the style option suggests and I'd rather not do it (subtracting 1).


================
Comment at: lib/Format/UnwrappedLineFormatter.cpp:1021
 
+  // Preprocessor directives get indented after the hash.
+  if (Line.Type == LT_PreprocessorDirective ||
----------------
... or not at all. :)


================
Comment at: lib/Format/UnwrappedLineParser.cpp:667
   parsePPUnknown();
+  if (IfNDef) {
+    PPMaybeIncludeGuard = IfCondition;
----------------
LLVM style does not use braces for single statement ifs.


================
Comment at: lib/Format/UnwrappedLineParser.cpp:699
   }
+  if (PPMaybeIncludeGuard != nullptr &&
+      PPMaybeIncludeGuard->TokenText == FormatTok->TokenText &&
----------------
In LLVM's codebase, we mostly just leave out the "!= nullptr" and rely on the implicit conversion to bool.


================
Comment at: lib/Format/UnwrappedLineParser.cpp:701
+      PPMaybeIncludeGuard->TokenText == FormatTok->TokenText &&
+      PPIndentLevel > 0) {
+    --PPIndentLevel;
----------------
I think you'll need substantially more tests here:
- An include guard must not have a #else 
- An include guard must span the entire file


================
Comment at: lib/Format/UnwrappedLineParser.h:238
 
+  unsigned PPIndentLevel;
+  FormatToken *PPMaybeIncludeGuard;
----------------
I think this should almost always be PPBranchLevel. Probably the different case is the #else itself, but I think we can handle that easily.


https://reviews.llvm.org/D35955





More information about the cfe-commits mailing list