QtCreator 使用beautifier插件配置Artistic Style

ArtisticStyle是一個開源的源代碼格式化工具

Artistic Style在windows下的使用。主頁地址爲:http://astyle.sourceforge.net/ ,它可以應用在C、C++、Objective-C、C#、Java等程序語言中。http://astyle.sourceforge.net/astyle.html 中爲對使用它的詳細介紹。從 https://sourceforge.net/projects/astyle/files/astyle/ 下載windows下文件AStyle_3.1_windows.zip,解壓縮後,將AStyle/bin/下的AStyle.exe拷貝到電腦指定目錄下。

常用選項參數說明:

  1. -s4 : 表示縮進4個空格,默認配置;
  2. -S: 表示switch中case語句的縮進;
  3. -N: 表示命名空間namespace內的縮進;
  4. -U: 表示括號內的兩頭的參數和括號之間不留空格;
  5. -H: 表示”if”、”for”、”while”等關鍵字右邊增加一個空格;
  6. -k1: *和&在表示指針和引用類型時,和類型名稱並緊,和變量名之間留空格;
  7. -p: 在運算符號(操作符)左右加上空格;
  8. -P: 在括號兩邊插入空格;-d只在括號外面插入空格,-D只在裏面插入;
  9. -j: 給每個”if”、”for”、“while”增加大括號;
  10. -D: 在小括號邊上增加一個空格;
  11. -c: 將TAB替換成空格;
  12. -M: 對定義的參數和變量進行對齊;
  13. -w: 對宏進行對齊處理;
  14. –style=ansi: ANSI標準的文件格式,對”{”、”}”另啓一行;
  15. –indent=spaces=4: 縮進採用4個空格;
  16. –add-brackets: 對”if”、”for”、“while”單行的語句增加括號;
  17. –convert-tabs: 強制轉換TAB爲空格;
  18. –indent-preprocessor: 將preprocessor(#define)等這類預定義的語句,如果有多行時前面填充對齊(是對單語句多行進行填充);
  19. –align-pointer=type: *、&這類字符靠近類型;
  20. –align-pointer=name: *、&這類字符靠近變量名字;
  21. –pad-oper: 在操作符號兩邊增加空格字符;
  22. –pad–header: 在關鍵字”if”、”for”、”while”等後面增加空格;
  23. –indent-switches: switch case的代碼也按照標準縮進方式縮進;
  24. –indent-col1-comments: 如果函數開始後面(“{”後面)第一行是註釋,也進行縮進;
  25. –indent=tab: 顯示說明使用Tab;

我的QtCreator中Artistic Style配置

--style=allman
indent=spaces=4	        # 縮進採用4個空格
indent-switches         # -S  設置 switch 整體縮進
indent-cases 	        # -K  設置 cases 整體縮進
indent-namespaces       # -N  設置 namespace 整體縮進
indent-preproc-block    # -xW 設置預處理模塊縮進
indent-preproc-define 	# -w  設置宏定義模塊縮進	
pad-oper                # -p  操作符前後填充空格
delete-empty-lines      # -xe 刪除多餘空行
add-braces              # -j  單行語句加上大括號
align-pointer=name      # *、&這類字符靠近變量名字
#align-pointer=type       *、&這類字符靠近類型

在這裏插入圖片描述
VS2017 插件自帶界面勾選配置。
在這裏插入圖片描述

clang-format版本代碼格式化工具

平時團隊進行合作的時候需要注意代碼的格式,雖然很難統一每個人的編碼風格,但是通過工具能夠很好的管理代碼格式。這裏介紹下clang-format,它是基於clang的一個命令行工具,能夠自動化格式C/C++/Obj-C代碼,支持多種代碼風格:Google, Chromium, LLVM, Mozilla, WebKit,也支持自定義風格(通過編寫.clang-format文件)很方便的同意代碼格式。

保存爲utf-8格式的.clang-format文件,(團隊合作的時候,使用同一個.clang-format配置文件即可)

# 語言: None, Cpp, Java, JavaScript, ObjC, Proto, TableGen, TextProto
Language:        Cpp
# BasedOnStyle:  WebKit
# 訪問說明符(public、private等)的偏移
AccessModifierOffset: -4
# 開括號(開圓括號、開尖括號、開方括號)後的對齊: Align, DontAlign, AlwaysBreak(總是在開括號後換行)
AlignAfterOpenBracket: AlwaysBreak
# 連續賦值時,對齊所有等號
AlignConsecutiveAssignments: false
# 連續聲明時,對齊所有聲明的變量名
AlignConsecutiveDeclarations: false
# 左對齊逃脫換行(使用反斜槓換行)的反斜槓
AlignEscapedNewlines: Right
# 水平對齊二元和三元表達式的操作數
AlignOperands:   true
# 對齊連續的尾隨的註釋
AlignTrailingComments: true
# 允許函數聲明的所有參數在放在下一行
AllowAllParametersOfDeclarationOnNextLine: true
# 允許短的塊放在同一行
AllowShortBlocksOnASingleLine: false
# 允許短的case標籤放在同一行
AllowShortCaseLabelsOnASingleLine: false
# 允許短的函數放在同一行: None, InlineOnly(定義在類中), Empty(空函數), Inline(定義在類中,空函數), All
AllowShortFunctionsOnASingleLine: Empty
# 允許短的if語句保持在同一行
AllowShortIfStatementsOnASingleLine: false
# 允許短的循環保持在同一行
AllowShortLoopsOnASingleLine: false
# 總是在定義返回類型後換行(deprecated)
AlwaysBreakAfterDefinitionReturnType: None
# 總是在返回類型後換行: None, All, TopLevel(頂級函數,不包括在類中的函數),
#   AllDefinitions(所有的定義,不包括聲明), TopLevelDefinitions(所有的頂級函數的定義)
AlwaysBreakAfterReturnType: None
# 總是在多行string字面量前換行
AlwaysBreakBeforeMultilineStrings: false
# 總是在template聲明後換行
AlwaysBreakTemplateDeclarations: true
# false表示函數實參要麼都在同一行,要麼都各自一行
BinPackArguments: false
# false表示所有形參要麼都在同一行,要麼都各自一行
BinPackParameters: false
# 大括號換行,只有當BreakBeforeBraces設置爲Custom時纔有效
BraceWrapping:   
  # class定義後面
  AfterClass:      true
  # 控制語句後面
  AfterControlStatement: true
  # enum定義後面
  AfterEnum:       true
  # 函數定義後面
  AfterFunction:   true
  # 命名空間定義後面
  AfterNamespace:  true
  # ObjC定義後面
  AfterObjCDeclaration: false
  # struct定義後面
  AfterStruct:     true
  # union定義後面
  AfterUnion:      true
  # extern 定義後面
  AfterExternBlock: true
  # catch之前
  BeforeCatch:     true
  # else 之前
  BeforeElse:      true
  # 縮進大括號
  IndentBraces:    false

  SplitEmptyFunction: true

  SplitEmptyRecord: true

  SplitEmptyNamespace: true
# 在二元運算符前換行: None(在操作符後換行), NonAssignment(在非賦值的操作符前換行), All(在操作符前換行)
BreakBeforeBinaryOperators: All
# 在大括號前換行: Attach(始終將大括號附加到周圍的上下文), Linux(除函數、命名空間和類定義,與Attach類似),
#   Mozilla(除枚舉、函數、記錄定義,與Attach類似), Stroustrup(除函數定義、catch、else,與Attach類似),
#   Allman(總是在大括號前換行), GNU(總是在大括號前換行,並對於控制語句的大括號增加額外的縮進), WebKit(在函數前換行), Custom
#   注:這裏認爲語句塊也屬於函數
BreakBeforeBraces: Allman
# 繼承列表的逗號前換行
BreakBeforeInheritanceComma: false
# 在三元運算符前換行
BreakBeforeTernaryOperators: true
# 在構造函數的初始化列表的逗號前換行
BreakConstructorInitializersBeforeComma: false
# 初始化列表前換行
BreakConstructorInitializers: BeforeComma
# Java註解後換行
BreakAfterJavaFieldAnnotations: false

BreakStringLiterals: true
# 每行字符的限制,0表示沒有限制
ColumnLimit:     160
# 描述具有特殊意義的註釋的正則表達式,它不應該被分割爲多行或以其它方式改變
CommentPragmas:  '^ IWYU pragma:'
# 緊湊 命名空間
CompactNamespaces: false
# 構造函數的初始化列表要麼都在同一行,要麼都各自一行
ConstructorInitializerAllOnOneLineOrOnePerLine: true
# 構造函數的初始化列表的縮進寬度
ConstructorInitializerIndentWidth: 4
# 延續的行的縮進寬度
ContinuationIndentWidth: 4
# 去除C++11的列表初始化的大括號{後和}前的空格
Cpp11BracedListStyle: false
# 繼承最常用的指針和引用的對齊方式
DerivePointerAlignment: false
# 關閉格式化
DisableFormat:   false
# 自動檢測函數的調用和定義是否被格式爲每行一個參數(Experimental)
ExperimentalAutoDetectBinPacking: false
# 固定命名空間註釋
FixNamespaceComments: true
# 需要被解讀爲foreach循環而不是函數調用的宏
ForEachMacros:   
  - foreach
  - Q_FOREACH
  - BOOST_FOREACH

IncludeBlocks:   Preserve
# 對#include進行排序,匹配了某正則表達式的#include擁有對應的優先級,匹配不到的則默認優先級爲INT_MAX(優先級越小排序越靠前),
#   可以定義負數優先級從而保證某些#include永遠在最前面
IncludeCategories: 
  - Regex:           '^"(llvm|llvm-c|clang|clang-c)/'
    Priority:        2
  - Regex:           '^(<|"(gtest|gmock|isl|json)/)'
    Priority:        3
  - Regex:           '.*'
    Priority:        1
IncludeIsMainRegex: '(Test)?$'
# 縮進case標籤
IndentCaseLabels: true

IndentPPDirectives: None
# 縮進寬度
IndentWidth:     4
# 函數返回類型換行時,縮進函數聲明或函數定義的函數名
IndentWrappedFunctionNames: false

JavaScriptQuotes: Leave

JavaScriptWrapImports: true
# 保留在塊開始處的空行
KeepEmptyLinesAtTheStartOfBlocks: true
# 開始一個塊的宏的正則表達式
MacroBlockBegin: ''
# 結束一個塊的宏的正則表達式
MacroBlockEnd:   ''
# 連續空行的最大數量
MaxEmptyLinesToKeep: 1

# 命名空間的縮進: None, Inner(縮進嵌套的命名空間中的內容), All
NamespaceIndentation: All
# 使用ObjC塊時縮進寬度
ObjCBlockIndentWidth: 4
# 在ObjC的@property後添加一個空格
ObjCSpaceAfterProperty: true
# 在ObjC的protocol列表前添加一個空格
ObjCSpaceBeforeProtocolList: true

PenaltyBreakAssignment: 2

PenaltyBreakBeforeFirstCallParameter: 19
# 在一個註釋中引入換行的penalty
PenaltyBreakComment: 300
# 第一次在<<前換行的penalty
PenaltyBreakFirstLessLess: 120
# 在一個字符串字面量中引入換行的penalty
PenaltyBreakString: 1000
# 對於每個在行字符數限制之外的字符的penalty
PenaltyExcessCharacter: 1000000
# 將函數的返回類型放到它自己的行的penalty
PenaltyReturnTypeOnItsOwnLine: 60
# 指針和引用的對齊: Left, Right, Middle
PointerAlignment: Right

#RawStringFormats: 
#  - Delimiter:       pb
#    Language:        TextProto
#    BasedOnStyle:    google
# 允許重新排版註釋
ReflowComments:  false
# 允許排序#include
SortIncludes:    true

SortUsingDeclarations: true
# 在C風格類型轉換後添加空格
SpaceAfterCStyleCast: false
# 模板關鍵字後面添加空格
SpaceAfterTemplateKeyword: true
# 在賦值運算符之前添加空格
SpaceBeforeAssignmentOperators: true
# 開圓括號之前添加一個空格: Never, ControlStatements, Always
SpaceBeforeParens: ControlStatements
# 在空的圓括號中添加空格
SpaceInEmptyParentheses: false
# 在尾隨的評論前添加的空格數(只適用於//)
SpacesBeforeTrailingComments: 1
# 在尖括號的<後和>前添加空格
SpacesInAngles:  false
# 在容器(ObjC和JavaScript的數組和字典等)字面量中添加空格
SpacesInContainerLiterals: true
# 在C風格類型轉換的括號中添加空格
SpacesInCStyleCastParentheses: false
# 在圓括號的(後和)前添加空格
SpacesInParentheses: false
# 在方括號的[後和]前添加空格,lamda表達式和未指明大小的數組的聲明不受影響
SpacesInSquareBrackets: false
# 標準: Cpp03, Cpp11, Auto
Standard:        Cpp11
# tab寬度
TabWidth:        4
# 使用tab字符: Never, ForIndentation, ForContinuationAndIndentation, Always
UseTab:          Never
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章