Adam,


Thank you for putting in the effort on this!



I only suggest forking incase the LLVM project finds Nuttx' CS not of
value. It would be great if we can upstream the changes.



If we make this a DNM (Do Not Merge) Pull request we can discuss in-line
where the comments will have context. Just put [Do Not Merge] in the title
and Leave it set at DRAFT PR.



Hopefully everyone will understand that we are doing this to collaborate
and add valuable feedback.



My overall view is it fixed a bunch of stuff NxStyle does not even detect.
But it messes up a bunch of things too.



One issue is the # indenting. Since Nuttx does not allow the modern use of
`#pragma once` the guard #if defs set the indent to 1 to start with. I
remember getting lambasted for doing this after reading the CS and
following it. So we will need a -nuttx-option to set the indent to -1 and
then only indent for > 0.



Let's continue to take it apart in the PR and see what the level of effort
would be to get it in shape.



Personally, I am not afflicted with NIH syndrome, I value others quality
tools, and I would rather put the effort in to this mature tool than
Nxstyle, as the ROI will be much, much greater.



David







*From:* Adam Feuer [mailto:a...@starcat.io]
*Sent:* Monday, March 16, 2020 3:35 PM
*To:* David Sidrane; dev@nuttx.apache.org
*Subject:* Re: Nuttx Code Formatter Progress [Was RE: Should we relax
precheck a little bit?]



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