Проблема формата Clang с параметрами объявления многострочной функции

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

Edit: я использую плагин clang format Xcode, который я получил здесь on GitHub июль 2016 (сначала установлен Alcatraz, затем плагин формата clang с Aclatraz). Я не совсем уверен, где двоичный файл формата clang, поэтому не видел номер версии для того, который пришел с плагином.

однако, основываясь на приведенных ниже предложениях, я установил clang-формат с помощью Homebrew, который дал мне версию 3.9.0. Затем я установил плагин Xcode В "использовать системный clang-формат", и я получил желаемый результат, поэтому я думаю, что это была ошибка.

2 ответов


ваш случай кажется мне прекрасным на 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 .лязг-формат и исходный код

    mkdir ~/test
    vim ~/test/.clang-format
    vim ~/test/test.cpp
    
  • тестовый формат.cpp в vim (используя F3), то результат:

    bool importSomethingIn( const boost::property_tree::ptree& inBoostTree,
                            int inSomeIndex,
                            std::shared_ptr<Something> inSomething,
                            int x,
                            int y );
    

Я думаю, что это вызвано 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 был установлен, и это одна из возможных причин, я думаю, он был сокращен.