I looked at the clang-format source code. It has trouble aligning the = of a -= or +=. I easily made a change to align on the - or + of a -= or +=, but some work will be necessary to give an option that aligns the way the nuttx code does it. Will think more about it.
-adam On Sat, Mar 14, 2020 at 1:21 PM Adam Feuer <a...@starcat.io> wrote: > David, Maciej, Peter, > > Thanks for your help! > > IndentPPDirectives: PPDIS_AfterHash works. The actual syntax for the > .clang-format file is this: > > IndentPPDirectives: AfterHash > > That makes things a lot better. There are a bunch of inconsistent macro > indents under sched/ though— many macros indent ok, but there are a bunch > that don't. Not sure what to do about that... are they really inconsistent? > If so maybe we make a small PR that fixes the inconsistent indents? > > What seems to be next: > > - alignment of successive expressions > > reltime.tv_nsec += NSEC_PER_SEC; >> - reltime.tv_sec -= 1; >> + reltime.tv_sec -= 1; >> > > - alignment of comment blocks — to make sure they line up with the > next comment line in the block > > For instance: > > - /* The resulting set is the intersection of the current set and >> + /* The resulting set is the intersection of the current set >> and >> * the complement of the signal set pointed to by _set. >> */ >> > > - evaluating inconsistencies in the alignment style... some > expressions and declarations are aligned, others are not... I need to > consult the style guide to see what it says. > > > I'm using clang-format-9. Here's the command lines I'm running to generate > and look at the changes (in the nutt/ dir): > > $ find ./sched/ -iname "*.h" -or -iname "*.c" | xargs clang-format-9 -i > -style=file > $ git diff > $ # change .clang-format > $ git stash; git stash drop > <repeat> > > Here's my .clang format file as of now: > > --- > Language: Cpp > AccessModifierOffset: -2 > AlignAfterOpenBracket: Align > AlignConsecutiveMacros: true > AlignConsecutiveAssignments: true > AlignConsecutiveDeclarations: true > AlignEscapedNewlines: DontAlign > AlignOperands: true > AlignTrailingComments: true > AllowAllArgumentsOnNextLine: true > AllowAllConstructorInitializersOnNextLine: true > AllowAllParametersOfDeclarationOnNextLine: true > AllowShortBlocksOnASingleLine: false > AllowShortCaseLabelsOnASingleLine: false > AllowShortFunctionsOnASingleLine: All > AllowShortLambdasOnASingleLine: All > AllowShortIfStatementsOnASingleLine: Never > AllowShortLoopsOnASingleLine: false > AlwaysBreakAfterDefinitionReturnType: None > AlwaysBreakAfterReturnType: None > AlwaysBreakBeforeMultilineStrings: false > AlwaysBreakTemplateDeclarations: MultiLine > BinPackArguments: true > BinPackParameters: true > BraceWrapping: > AfterCaseLabel: false > AfterClass: false > AfterControlStatement: true > AfterEnum: true > AfterFunction: true > AfterNamespace: false > AfterObjCDeclaration: false > AfterStruct: true > AfterUnion: true > AfterExternBlock: false > BeforeCatch: false > BeforeElse: true > IndentBraces: true > SplitEmptyFunction: true > SplitEmptyRecord: true > SplitEmptyNamespace: true > BreakBeforeBinaryOperators: None > BreakBeforeBraces: Custom > BreakBeforeInheritanceComma: false > BreakInheritanceList: BeforeColon > BreakBeforeTernaryOperators: true > BreakConstructorInitializersBeforeComma: false > BreakConstructorInitializers: BeforeColon > BreakAfterJavaFieldAnnotations: false > BreakStringLiterals: true > ColumnLimit: 0 > CommentPragmas: '^ IWYU pragma:' > CompactNamespaces: false > ConstructorInitializerAllOnOneLineOrOnePerLine: false > ConstructorInitializerIndentWidth: 4 > ContinuationIndentWidth: 0 > Cpp11BracedListStyle: false > DerivePointerAlignment: false > DisableFormat: false > ExperimentalAutoDetectBinPacking: false > FixNamespaceComments: false > ForEachMacros: > - foreach > - Q_FOREACH > - BOOST_FOREACH > IncludeBlocks: Preserve > IncludeCategories: > - Regex: '^"(llvm|llvm-c|clang|clang-c)/' > Priority: 2 > - Regex: '^(<|"(gtest|gmock|isl|json)/)' > Priority: 3 > - Regex: '.*' > Priority: 1 > IncludeIsMainRegex: '(Test)?$' > IndentCaseLabels: true > IndentPPDirectives: AfterHash > IndentWidth: 2 > IndentWrappedFunctionNames: false > JavaScriptQuotes: Leave > JavaScriptWrapImports: true > KeepEmptyLinesAtTheStartOfBlocks: true > MacroBlockBegin: '' > MacroBlockEnd: '' > MaxEmptyLinesToKeep: 1 > NamespaceIndentation: None > ObjCBinPackProtocolList: Auto > ObjCBlockIndentWidth: 2 > ObjCSpaceAfterProperty: false > ObjCSpaceBeforeProtocolList: true > PenaltyBreakAssignment: 2 > PenaltyBreakBeforeFirstCallParameter: 19 > PenaltyBreakComment: 300 > PenaltyBreakFirstLessLess: 120 > PenaltyBreakString: 1000 > PenaltyBreakTemplateDeclaration: 10 > PenaltyExcessCharacter: 1000000 > PenaltyReturnTypeOnItsOwnLine: 60 > PointerAlignment: Right > ReflowComments: false > SortIncludes: false > SortUsingDeclarations: true > SpaceAfterCStyleCast: false > SpaceAfterLogicalNot: false > SpaceAfterTemplateKeyword: true > SpaceBeforeAssignmentOperators: true > SpaceBeforeCpp11BracedList: false > SpaceBeforeCtorInitializerColon: true > SpaceBeforeInheritanceColon: true > SpaceBeforeParens: ControlStatements > SpaceBeforeRangeBasedForLoopColon: true > SpaceInEmptyParentheses: false > SpacesBeforeTrailingComments: 1 > SpacesInAngles: false > SpacesInContainerLiterals: true > SpacesInCStyleCastParentheses: false > SpacesInParentheses: false > SpacesInSquareBrackets: false > Standard: Cpp03 > StatementMacros: > - Q_UNUSED > - QT_REQUIRE_VERSION > TabWidth: 8 > UseTab: Never > ... > > > > > On Sat, Mar 14, 2020 at 1:29 AM David Sidrane <david.sidr...@nscdg.com> > wrote: > >> Hi Adam and Maciej, >> >> Thank you for spending you time on this. It will be a huge win for >> everyone! >> >> The way I have been looking at this is like in transfer-function with an >> offset. Once we can get a tools that will take X and make into X" that has >> well known malformations. We just fix the malformations. So once you feel >> have something that is close, let's evaluate it and see what the "last >> mile" >> looks like. >> >> David >> >> -----Original Message----- >> From: Adam Feuer [mailto:a...@starcat.io] >> Sent: Friday, March 13, 2020 7:08 PM >> To: dev@nuttx.apache.org >> Subject: Re: Should we relax precheck a little bit? >> >> Maciej, >> >> Thank you! I didn't know about the IndentPPDirectives option! I will try >> it! :) >> >> -adam >> >> On Fri, Mar 13, 2020 at 5:16 PM Maciej Wójcik <w8j...@gmail.com> wrote: >> >> > Are you sure that clang-format cannot indent macros? What about >> > >> > IndentPPDirectives: PPDIS_AfterHash >> > >> > It also treats the outmost macro in headers in a special way. >> > >> > On Sat, 14 Mar 2020, 01:03 Adam Feuer, <a...@starcat.io> wrote: >> > >> > > David, >> > > >> > > Re: whatstyle, I ran it overnight on the c files in sched/ and came up >> > with >> > > a clang-format that does somewhat ok. Thanks for pointing that program >> > out. >> > > >> > > By looking at the output of the diff, I learned a lot about how hard >> it >> > is >> > > to manually format programs. :) >> > > >> > > Anyway, the biggest problem with clang-format seems to be the way it >> > > handles C-macros. In NuttX, they are often indented like this: >> > > >> > > #ifdef ... >> > > # define ... >> > > # ifdef ... >> > > # define >> > > # endif >> > > #endif >> > > >> > > Peter Van Der Perk also mentioned this. There's no stock way to make >> > > clang-format do that. Maybe a post-processing script that only looked >> at >> > > these macros would work. Or a contribution to clang-format. I'll think >> > > about it some more. >> > > >> > > -adam >> > > >> > > On Sun, Mar 8, 2020 at 3:40 AM David Sidrane <david.sidr...@nscdg.com >> > >> > > wrote: >> > > >> > > > Hi Adam, >> > > > >> > > > Have a look at https://github.com/mikr/whatstyle >> > > > >> > > > I got furthest with clang-format and it. It may be we get a 95% of >> the >> > > way >> > > > there with it and we can add a backend secondary scripts. >> > > > >> > > > I was unable to convince Greg to create a master template so my >> > approach >> > > > was >> > > > to combine all the files and run it on the set so it would get all >> the >> > > > constructs at once. >> > > > >> > > > David >> > > > >> > > >> > > -- >> > > Adam Feuer <a...@starcat.io> >> > > >> > >> >> >> -- >> Adam Feuer <a...@starcat.io> >> > > > -- > Adam Feuer <a...@starcat.io> > -- Adam Feuer <a...@starcat.io>