Qt6.2.1使用clang格式化代码
1、環(huán)境說明
Qt6.2.1 64bit, windows環(huán)境, 安裝鏈接:Download Qt | Develop Desktop & Embedded Systems | Qt
llvm 10.0.0 64bit windows環(huán)境,安裝鏈接:
LLVM Download Page
?2、啟用Beautifer
幫助--關(guān)于插件,勾選Beautifier,重啟生效。
?3、配置clang
工具--選項(xiàng)--Beautifier--General
勾選,Enable auto format on file save,每次ctrl+S保存文件后自動(dòng)格式化。
Tool選擇ClangFormat(安裝了LLVM自動(dòng)識(shí)別)
?工具--選項(xiàng)--Beautifier--Clang Format
Options勾選自定義格式,Add新增一個(gè),然后編輯。
隨便寫一個(gè)什么字符(例如,AccessModifierOffset:-4),保存。
進(jìn)入源代碼編輯模式,修改代碼然后保存(敲幾個(gè)回車),看到概要信息報(bào)錯(cuò),提示clang格式化不正確,這不重要,接下來要對(duì)clang格式化文本進(jìn)行替換。
?進(jìn)入以下文件夾:C:\Users\XXXX\AppData\Roaming\QtProject\qtcreator\beautifier\clangformat\clang
打開并用以下clang-format內(nèi)容替換,由于帶有注釋,.clang-format文件請(qǐng)以UTF-8編碼。
?備注:以下clangformat根據(jù)網(wǎng)上博客內(nèi)容修改而成,請(qǐng)按需修改。
--- # 語言: None, Cpp, Java, JavaScript, ObjC, Proto, TableGen, TextProto Language: Cpp BasedOnStyle: LLVM # 訪問說明符(public、private等)的偏移 AccessModifierOffset: -4 # 開括號(hào)(開圓括號(hào)、開尖括號(hào)、開方括號(hào))后的對(duì)齊: Align, DontAlign, AlwaysBreak(總是在開括號(hào)后換行) AlignAfterOpenBracket: Align # 連續(xù)賦值時(shí),對(duì)齊所有等號(hào) AlignConsecutiveAssignments: false # 連續(xù)聲明時(shí),對(duì)齊所有聲明的變量名 AlignConsecutiveDeclarations: true # 宏對(duì)齊 AlignConsecutiveMacros: true # 左對(duì)齊逃脫換行(使用反斜杠換行)的反斜杠 AlignEscapedNewlinesLeft: true # 水平對(duì)齊二元和三元表達(dá)式的操作數(shù) AlignOperands: true # 對(duì)齊連續(xù)的尾隨的注釋 AlignTrailingComments: true # 允許函數(shù)聲明的所有參數(shù)在放在下一行 AllowAllParametersOfDeclarationOnNextLine: true # 允許短的塊放在同一行 AllowShortBlocksOnASingleLine: false # 允許短的case標(biāo)簽放在同一行 AllowShortCaseLabelsOnASingleLine: false # 允許短的函數(shù)放在同一行: None, InlineOnly(定義在類中), Empty(空函數(shù)), Inline(定義在類中,空函數(shù)), All AllowShortFunctionsOnASingleLine: Empty # 允許短的if語句保持在同一行 AllowShortIfStatementsOnASingleLine: false # 允許短的循環(huán)保持在同一行 AllowShortLoopsOnASingleLine: false # 總是在定義返回類型后換行(deprecated) AlwaysBreakAfterDefinitionReturnType: None # 總是在返回類型后換行: None, All, TopLevel(頂級(jí)函數(shù),不包括在類中的函數(shù)), # AllDefinitions(所有的定義,不包括聲明), TopLevelDefinitions(所有的頂級(jí)函數(shù)的定義) AlwaysBreakAfterReturnType: None # 總是在多行string字面量前換行 AlwaysBreakBeforeMultilineStrings: false # 總是在template聲明后換行 AlwaysBreakTemplateDeclarations: false # false表示函數(shù)實(shí)參要么都在同一行,要么都各自一行 BinPackArguments: false # false表示所有形參要么都在同一行,要么都各自一行 BinPackParameters: false # 大括號(hào)換行,只有當(dāng)BreakBeforeBraces設(shè)置為Custom時(shí)才有效 BraceWrapping: # class定義后面AfterClass: false# 控制語句后面AfterControlStatement: false# enum定義后面AfterEnum: false# 函數(shù)定義后面AfterFunction: true# 命名空間定義后面AfterNamespace: true# ObjC定義后面AfterObjCDeclaration: true# struct定義后面AfterStruct: false# union定義后面AfterUnion: false# catch之前BeforeCatch: true# else之前BeforeElse: false# 縮進(jìn)大括號(hào)IndentBraces: false# extern AfterExternBlock: false# case后換行AfterCaseLabel: false # 在二元運(yùn)算符前換行: None(在操作符后換行), NonAssignment(在非賦值的操作符前換行), All(在操作符前換行) BreakBeforeBinaryOperators: NonAssignment # 在大括號(hào)前換行: Attach(始終將大括號(hào)附加到周圍的上下文), Linux(除函數(shù)、命名空間和類定義,與Attach類似), # Mozilla(除枚舉、函數(shù)、記錄定義,與Attach類似), Stroustrup(除函數(shù)定義、catch、else,與Attach類似), # Allman(總是在大括號(hào)前換行), GNU(總是在大括號(hào)前換行,并對(duì)于控制語句的大括號(hào)增加額外的縮進(jìn)), WebKit(在函數(shù)前換行), Custom # 注:這里認(rèn)為語句塊也屬于函數(shù) BreakBeforeBraces: Custom # 在三元運(yùn)算符前換行 BreakBeforeTernaryOperators: true # 在構(gòu)造函數(shù)的初始化列表的逗號(hào)前換行 BreakConstructorInitializersBeforeComma: false # 每行字符的限制,0表示沒有限制 ColumnLimit: 0 # 描述具有特殊意義的注釋的正則表達(dá)式,它不應(yīng)該被分割為多行或以其它方式改變 CommentPragmas: '^ IWYU pragma:' # 構(gòu)造函數(shù)的初始化列表要么都在同一行,要么都各自一行 ConstructorInitializerAllOnOneLineOrOnePerLine: true # 構(gòu)造函數(shù)的初始化列表的縮進(jìn)寬度 ConstructorInitializerIndentWidth: 4 # 延續(xù)的行的縮進(jìn)寬度 ContinuationIndentWidth: 4 # 去除C++11的列表初始化的大括號(hào){后和}前的空格 Cpp11BracedListStyle: false # 繼承最常用的指針和引用的對(duì)齊方式 DerivePointerAlignment: false # 關(guān)閉格式化 DisableFormat: false # 自動(dòng)檢測(cè)函數(shù)的調(diào)用和定義是否被格式為每行一個(gè)參數(shù)(Experimental) ExperimentalAutoDetectBinPacking: false # 需要被解讀為foreach循環(huán)而不是函數(shù)調(diào)用的宏 ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ] # 對(duì)#include進(jìn)行排序,匹配了某正則表達(dá)式的#include擁有對(duì)應(yīng)的優(yōu)先級(jí),匹配不到的則默認(rèn)優(yōu)先級(jí)為INT_MAX(優(yōu)先級(jí)越小排序越靠前), # 可以定義負(fù)數(shù)優(yōu)先級(jí)從而保證某些#include永遠(yuǎn)在最前面 IncludeCategories: - Regex: '^"(llvm|llvm-c|clang|clang-c)/'Priority: 2- Regex: '^(<|"(gtest|isl|json)/)'Priority: 3- Regex: '.*'Priority: 1 # 縮進(jìn)case標(biāo)簽 IndentCaseLabels: true # 縮進(jìn)寬度 IndentWidth: 4 # 函數(shù)返回類型換行時(shí),縮進(jìn)函數(shù)聲明或函數(shù)定義的函數(shù)名 IndentWrappedFunctionNames: false # 保留在塊開始處的空行 KeepEmptyLinesAtTheStartOfBlocks: true # 開始一個(gè)塊的宏的正則表達(dá)式 MacroBlockBegin: '' # 結(jié)束一個(gè)塊的宏的正則表達(dá)式 MacroBlockEnd: '' # 連續(xù)空行的最大數(shù)量 MaxEmptyLinesToKeep: 1 # 命名空間的縮進(jìn): None, Inner(縮進(jìn)嵌套的命名空間中的內(nèi)容), All NamespaceIndentation: Inner # 使用ObjC塊時(shí)縮進(jìn)寬度 ObjCBlockIndentWidth: 4 # 在ObjC的@property后添加一個(gè)空格 ObjCSpaceAfterProperty: false # 在ObjC的protocol列表前添加一個(gè)空格 ObjCSpaceBeforeProtocolList: true # 在call(后對(duì)函數(shù)調(diào)用換行的penalty PenaltyBreakBeforeFirstCallParameter: 19 # 在一個(gè)注釋中引入換行的penalty PenaltyBreakComment: 106 # 第一次在<<前換行的penalty PenaltyBreakFirstLessLess: 120 # 在一個(gè)字符串字面量中引入換行的penalty PenaltyBreakString: 1000 # 對(duì)于每個(gè)在行字符數(shù)限制之外的字符的penalty PenaltyExcessCharacter: 1000000 # 將函數(shù)的返回類型放到它自己的行的penalty PenaltyReturnTypeOnItsOwnLine: 60 # 指針和引用的對(duì)齊: Left, Right, Middle PointerAlignment: Left # 允許重新排版注釋 ReflowComments: true # 允許排序#include SortIncludes: false # 在C風(fēng)格類型轉(zhuǎn)換后添加空格 SpaceAfterCStyleCast: false # 在賦值運(yùn)算符之前添加空格 SpaceBeforeAssignmentOperators: true # 開圓括號(hào)之前添加一個(gè)空格: Never, ControlStatements, Always SpaceBeforeParens: ControlStatements # 在空的圓括號(hào)中添加空格 SpaceInEmptyParentheses: false # 在尾隨的評(píng)論前添加的空格數(shù)(只適用于//) SpacesBeforeTrailingComments: 1 # 在尖括號(hào)的<后和>前添加空格 SpacesInAngles: true # 在容器(ObjC和JavaScript的數(shù)組和字典等)字面量中添加空格 SpacesInContainerLiterals: true # 在C風(fēng)格類型轉(zhuǎn)換的括號(hào)中添加空格 SpacesInCStyleCastParentheses: false # 在圓括號(hào)的(后和)前添加空格 SpacesInParentheses: false # 在方括號(hào)的[后和]前添加空格,lamda表達(dá)式和未指明大小的數(shù)組的聲明不受影響 SpacesInSquareBrackets: false # 標(biāo)準(zhǔn): Cpp03, Cpp11, Auto Standard: Cpp11 # tab寬度 TabWidth: 4 # 使用tab字符: Never, ForIndentation, ForContinuationAndIndentation, Always UseTab: Never?4、查看格式化效果
?修改源代碼后保存文件,自動(dòng)進(jìn)行格式化。
?以下無。
?
?
總結(jié)
以上是生活随笔為你收集整理的Qt6.2.1使用clang格式化代码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx做服务器入口_Nginx实现h
- 下一篇: 从零开始学androidNotifica