ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [개발환경] clang-format
    카테고리 없음 2021. 6. 19. 17:11

    OS : Ubuntu 20.04

    IDE : vscode

     

    은근히 쓸데없는 시행착오가 많아 적용방법을 정리함.

     

    0. DO NOT INSTALL an extension "clang-format" in the vscode Extensions

    1. Install the clang-format

    $ sudo apt-get update
    $ sudo apt-get install clang-format-11

    2. Find out the installation path of the clang-format-11 with the command below

      - Then, you might get the path as "/usr/bin/clang-format-11".

    $ whereis clang-format-11

    3. In the vscode, locate a file, .clang-format, in the root folder of your workspace.

      - The file name should be just ".clang-format".

      - What I use is as below. (I don't remember where I obtained this file)

    ---
    Language:        Cpp
    # BasedOnStyle:  Google
    AccessModifierOffset: -1
    AlignAfterOpenBracket: Align
    AlignConsecutiveMacros: false
    AlignConsecutiveAssignments: false
    AlignConsecutiveDeclarations: false
    AlignEscapedNewlines: Left
    AlignOperands:   true
    AlignTrailingComments: true
    AllowAllArgumentsOnNextLine: true
    AllowAllConstructorInitializersOnNextLine: true
    AllowAllParametersOfDeclarationOnNextLine: true
    AllowShortBlocksOnASingleLine: Never
    AllowShortCaseLabelsOnASingleLine: false
    AllowShortFunctionsOnASingleLine: All
    AllowShortLambdasOnASingleLine: All
    AllowShortIfStatementsOnASingleLine: WithoutElse
    AllowShortLoopsOnASingleLine: true
    AlwaysBreakAfterDefinitionReturnType: None
    AlwaysBreakAfterReturnType: None
    AlwaysBreakBeforeMultilineStrings: true
    AlwaysBreakTemplateDeclarations: Yes
    BinPackArguments: true
    BinPackParameters: true
    BraceWrapping:
      AfterCaseLabel:  false
      AfterClass:      false
      AfterControlStatement: false
      AfterEnum:       false
      AfterFunction:   false
      AfterNamespace:  false
      AfterObjCDeclaration: false
      AfterStruct:     false
      AfterUnion:      false
      AfterExternBlock: false
      BeforeCatch:     false
      BeforeElse:      false
      IndentBraces:    false
      SplitEmptyFunction: true
      SplitEmptyRecord: true
      SplitEmptyNamespace: true
    BreakBeforeBinaryOperators: None
    BreakBeforeBraces: Attach
    BreakBeforeInheritanceComma: false
    BreakInheritanceList: BeforeColon
    BreakBeforeTernaryOperators: true
    BreakConstructorInitializersBeforeComma: false
    BreakConstructorInitializers: BeforeColon
    BreakAfterJavaFieldAnnotations: false
    BreakStringLiterals: true
    ColumnLimit:     80
    CommentPragmas:  '^ IWYU pragma:'
    CompactNamespaces: false
    ConstructorInitializerAllOnOneLineOrOnePerLine: true
    ConstructorInitializerIndentWidth: 4
    ContinuationIndentWidth: 4
    Cpp11BracedListStyle: true
    DeriveLineEnding: true
    DerivePointerAlignment: true
    DisableFormat:   false
    ExperimentalAutoDetectBinPacking: false
    FixNamespaceComments: true
    ForEachMacros:
      - foreach
      - Q_FOREACH
      - BOOST_FOREACH
    IncludeBlocks:   Regroup
    IncludeCategories:
      - Regex:           '^<ext/.*\.h>'
        Priority:        2
        SortPriority:    0
      - Regex:           '^<.*\.h>'
        Priority:        1
        SortPriority:    0
      - Regex:           '^<.*'
        Priority:        2
        SortPriority:    0
      - Regex:           '.*'
        Priority:        3
        SortPriority:    0
    IncludeIsMainRegex: '([-_](test|unittest))?$'
    IncludeIsMainSourceRegex: ''
    IndentCaseLabels: true
    IndentGotoLabels: true
    IndentPPDirectives: None
    IndentWidth:     2
    IndentWrappedFunctionNames: false
    JavaScriptQuotes: Leave
    JavaScriptWrapImports: true
    KeepEmptyLinesAtTheStartOfBlocks: false
    MacroBlockBegin: ''
    MacroBlockEnd:   ''
    MaxEmptyLinesToKeep: 1
    NamespaceIndentation: None
    ObjCBinPackProtocolList: Never
    ObjCBlockIndentWidth: 2
    ObjCSpaceAfterProperty: false
    ObjCSpaceBeforeProtocolList: true
    PenaltyBreakAssignment: 2
    PenaltyBreakBeforeFirstCallParameter: 1
    PenaltyBreakComment: 300
    PenaltyBreakFirstLessLess: 120
    PenaltyBreakString: 1000
    PenaltyBreakTemplateDeclaration: 10
    PenaltyExcessCharacter: 1000000
    PenaltyReturnTypeOnItsOwnLine: 200
    PointerAlignment: Left
    RawStringFormats:
      - Language:        Cpp
        Delimiters:
          - cc
          - CC
          - cpp
          - Cpp
          - CPP
          - 'c++'
          - 'C++'
        CanonicalDelimiter: ''
        BasedOnStyle:    google
      - Language:        TextProto
        Delimiters:
          - pb
          - PB
          - proto
          - PROTO
        EnclosingFunctions:
          - EqualsProto
          - EquivToProto
          - PARSE_PARTIAL_TEXT_PROTO
          - PARSE_TEST_PROTO
          - PARSE_TEXT_PROTO
          - ParseTextOrDie
          - ParseTextProtoOrDie
        CanonicalDelimiter: ''
        BasedOnStyle:    google
    ReflowComments:  true
    SortIncludes:    true
    SortUsingDeclarations: true
    SpaceAfterCStyleCast: false
    SpaceAfterLogicalNot: false
    SpaceAfterTemplateKeyword: true
    SpaceBeforeAssignmentOperators: true
    SpaceBeforeCpp11BracedList: false
    SpaceBeforeCtorInitializerColon: true
    SpaceBeforeInheritanceColon: true
    SpaceBeforeParens: ControlStatements
    SpaceBeforeRangeBasedForLoopColon: true
    SpaceInEmptyBlock: false
    SpaceInEmptyParentheses: false
    SpacesBeforeTrailingComments: 2
    SpacesInAngles:  false
    SpacesInConditionalStatement: false
    SpacesInContainerLiterals: true
    SpacesInCStyleCastParentheses: false
    SpacesInParentheses: false
    SpacesInSquareBrackets: false
    SpaceBeforeSquareBrackets: false
    Standard:        Auto
    StatementMacros:
      - Q_UNUSED
      - QT_REQUIRE_VERSION
    TabWidth:        8
    UseCRLF:         false
    UseTab:          Never
    ...
    
    

    4. Add the commands in "settings.json" file of the vscode

      - There are two files in the vscode. (1 : root/.vscode/,  2 : home/usr_name/.config/Code/User/)

      - The commands have to be added to the 2nd file.

      - Notice that the path we obtained above is applied to "C_Cpp.clang_format_path" option.

    "editor.formatOnSave": true,
    "editor.formatOnSaveMode": "file",
    "C_Cpp.clang_format_path": "/usr/bin/clang-format-11",
    "C_Cpp.clang_format_style": "file",
    "C_Cpp.clang_format_fallbackStyle": "Google"

     

    5. Python formatting

     - Google's coding style for Python can be applied from "yapf"

     - Install "yapf" with the command below:

     - And, also find out the installation path.

    $ pip install yapf
    $ whereis yapf

    6. Add the commands in "settings.json" file of the vscode

    "python.formatting.provider": "yapf",
    "python.formatting.yapfPath": "/home/user_name/.local/bin/yapf"

     

Designed by Tistory.