Here's a Github compare with .clang-format file and the results when
clang-format-9 is run on all the files under sched/:

https://github.com/apache/incubator-nuttx/compare/master...starcat-io:explore/clang-format-sched

If anyone has comments or observations I would love to know them.

-adam

On Mon, Mar 16, 2020 at 3:23 PM Adam Feuer <a...@starcat.io> wrote:

> David,
>
> It would be a --style=NuttX option on the command line, and a set of
> configurations. But yes that might be the way to go. I don't think forking
> it would be the right thing, if we can modify it to do what we want, we
> should be able to add options that are configurable, submit PRs and get
> them merged. Then the features can be used and maintained by everyone who
> uses clang-format, a very large userbase, that would be a very good option.
>
> I think it can work... I'll post link to what it can currently do in
> sched/ so we can look at the differences to see how close we are.
>
> -adam
>
> On Sun, Mar 15, 2020 at 6:49 AM David Sidrane <david.sidr...@nscdg.com>
> wrote:
>
>> Hi Adam,
>>
>>
>>
>> Hmmm…Would the shortest path, on this issue, be to add some -NuttX
>> options and submit a PR to upstream or Fork it?
>>
>>
>>
>> It may be that time spent training Clang-format is better than time spent
>> on nstyle, as it is a "shorter haul" with a much, much greater return.
>>
>>
>>
>> David
>>
>>
>>
>> *From:* Adam Feuer [mailto:a...@starcat.io]
>> *Sent:* Saturday, March 14, 2020 1:59 PM
>> *To:* dev@nuttx.apache.org; david.sidr...@nscdg.com; w8j...@gmail.com
>> *Subject:* Re: Nuttx Code Formatter Progress [Was RE: Should we relax
>> precheck a little bit?]
>>
>>
>>
>> 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>
>>
>
>
> --
> Adam Feuer <a...@starcat.io>
>


-- 
Adam Feuer <a...@starcat.io>

Reply via email to