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>

Reply via email to