多行函数声明参数的 Clang 格式问题
Clang Format Issue with multiline function declaration parameters
Clang Format 一直在这样做:
bool importSomethingIn( const boost::property_tree::ptree& inBoostTree,
int inSomeIndex,
std::shared_ptr<Something>
inSomething,
int x,
int y );
当我希望它这样做时:
bool importSomethingIn( const boost::property_tree::ptree& inBoostTree,
int inSomeIndex,
std::shared_ptr<Something> inSomething,
int x,
int y );
注意是在符号inSomething
前加了换行和缩进。似乎总是导致这种行为的模板化类型。
我怎样才能阻止它这样做?
这是我当前的 .clang 格式:
BasedOnStyle: LLVM
Language: Cpp
AccessModifierOffset: -4
AlignEscapedNewlinesLeft: false
AlignTrailingComments: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortFunctionsOnASingleLine: false
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: true
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: false
BinPackParameters: false
BreakBeforeBinaryOperators: false
BreakBeforeBraces: Allman
BreakBeforeTernaryOperators: false
BreakConstructorInitializersBeforeComma: false
ColumnLimit: 120
CommentPragmas: ''
ConstructorInitializerAllOnOneLineOrOnePerLine: false
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DerivePointerAlignment: false
DerivePointerBinding: false
ExperimentalAutoDetectBinPacking: false
IndentCaseLabels: true
IndentFunctionDeclarationAfterType: true
IndentWidth: 4
IndentWrappedFunctionNames: false
KeepEmptyLinesAtTheStartOfBlocks: false
MaxEmptyLinesToKeep: 2
NamespaceIndentation: All
ObjCBlockIndentWidth: 4
ObjCSpaceAfterProperty: true
ObjCSpaceBeforeProtocolList: true
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyExcessCharacter: 1000
PenaltyReturnTypeOnItsOwnLine: 60
PointerAlignment: Left
PointerBindsToType: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeParens: ControlStatements
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: false
SpacesInContainerLiterals: true
SpacesInCStyleCastParentheses: false
SpacesInParentheses: true
Standard: Cpp11
TabWidth: 8
UseTab: Never
编辑:我正在使用 clang 格式 Xcode 插件,我在 2016 年 github 七月 here 获得(首先安装 Alcatraz,然后使用 Aclatraz 安装 clang 格式插件)。我不完全确定 clang-format 二进制文件在哪里,因此没有看到插件附带的版本号。
但是,根据下面的建议,我使用 Homebrew 安装了 clang-format,它给了我版本 3.9.0。然后我将 Xcode 插件设置为 "use system clang-format",我得到了想要的结果,所以我想这一定是一个错误。
我认为是ColumnLimit
造成的。我认为这是一个错误......我有这个问题,我通过改变这个变量解决了它。尝试设置:
ColumnLimit: 0
原因
bool importSomethingIn( const boost::property_tree::ptree& inBoostTree, int inSomeIndex, std::shared_ptr<Something>" has 117+-3 chars in dependence of computing invisible chars.
的长度是117+-3,依赖于计算不可见字符。 ColumnLimit: 120
已经设置了,可能的原因之一,我想,已经删掉了。
我觉得你的情况在 ubuntu 16.04 和 clang-format 3.8
上没问题
安装 clang-format-3.8
sudo apt-get install clang-format-3.8
在~/.vimrc
map <F3> :pyf /usr/share/vim/addons/syntax/clang-format-3.8.py<cr>
imap <F3> <C-o>:pyf /usr/share/vim/addons/syntax/clang-format-3.8.py<cr>
使用@OP 的 .clang 格式和源代码
mkdir ~/test
vim ~/test/.clang-format
vim ~/test/test.cpp
在vim中格式化test.cpp(使用F3),则结果:
bool importSomethingIn( const boost::property_tree::ptree& inBoostTree,
int inSomeIndex,
std::shared_ptr<Something> inSomething,
int x,
int y );
Clang Format 一直在这样做:
bool importSomethingIn( const boost::property_tree::ptree& inBoostTree,
int inSomeIndex,
std::shared_ptr<Something>
inSomething,
int x,
int y );
当我希望它这样做时:
bool importSomethingIn( const boost::property_tree::ptree& inBoostTree,
int inSomeIndex,
std::shared_ptr<Something> inSomething,
int x,
int y );
注意是在符号inSomething
前加了换行和缩进。似乎总是导致这种行为的模板化类型。
我怎样才能阻止它这样做?
这是我当前的 .clang 格式:
BasedOnStyle: LLVM
Language: Cpp
AccessModifierOffset: -4
AlignEscapedNewlinesLeft: false
AlignTrailingComments: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortFunctionsOnASingleLine: false
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: true
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: false
BinPackParameters: false
BreakBeforeBinaryOperators: false
BreakBeforeBraces: Allman
BreakBeforeTernaryOperators: false
BreakConstructorInitializersBeforeComma: false
ColumnLimit: 120
CommentPragmas: ''
ConstructorInitializerAllOnOneLineOrOnePerLine: false
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DerivePointerAlignment: false
DerivePointerBinding: false
ExperimentalAutoDetectBinPacking: false
IndentCaseLabels: true
IndentFunctionDeclarationAfterType: true
IndentWidth: 4
IndentWrappedFunctionNames: false
KeepEmptyLinesAtTheStartOfBlocks: false
MaxEmptyLinesToKeep: 2
NamespaceIndentation: All
ObjCBlockIndentWidth: 4
ObjCSpaceAfterProperty: true
ObjCSpaceBeforeProtocolList: true
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyExcessCharacter: 1000
PenaltyReturnTypeOnItsOwnLine: 60
PointerAlignment: Left
PointerBindsToType: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeParens: ControlStatements
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: false
SpacesInContainerLiterals: true
SpacesInCStyleCastParentheses: false
SpacesInParentheses: true
Standard: Cpp11
TabWidth: 8
UseTab: Never
编辑:我正在使用 clang 格式 Xcode 插件,我在 2016 年 github 七月 here 获得(首先安装 Alcatraz,然后使用 Aclatraz 安装 clang 格式插件)。我不完全确定 clang-format 二进制文件在哪里,因此没有看到插件附带的版本号。
但是,根据下面的建议,我使用 Homebrew 安装了 clang-format,它给了我版本 3.9.0。然后我将 Xcode 插件设置为 "use system clang-format",我得到了想要的结果,所以我想这一定是一个错误。
我认为是ColumnLimit
造成的。我认为这是一个错误......我有这个问题,我通过改变这个变量解决了它。尝试设置:
ColumnLimit: 0
原因
bool importSomethingIn( const boost::property_tree::ptree& inBoostTree, int inSomeIndex, std::shared_ptr<Something>" has 117+-3 chars in dependence of computing invisible chars.
的长度是117+-3,依赖于计算不可见字符。 ColumnLimit: 120
已经设置了,可能的原因之一,我想,已经删掉了。
我觉得你的情况在 ubuntu 16.04 和 clang-format 3.8
上没问题安装 clang-format-3.8
sudo apt-get install clang-format-3.8
在
~/.vimrc
map <F3> :pyf /usr/share/vim/addons/syntax/clang-format-3.8.py<cr> imap <F3> <C-o>:pyf /usr/share/vim/addons/syntax/clang-format-3.8.py<cr>
使用@OP 的 .clang 格式和源代码
mkdir ~/test vim ~/test/.clang-format vim ~/test/test.cpp
在vim中格式化test.cpp(使用F3),则结果:
bool importSomethingIn( const boost::property_tree::ptree& inBoostTree, int inSomeIndex, std::shared_ptr<Something> inSomething, int x, int y );