代码规范一: Clang-Format 统一 Xcode 代码格式化规范

西门桃桃 2022-02-17 PM 5056℃ 2条

背景

  • 提升代码可读性
  • Reformat 历史代码,一劳永逸的解决这个问题
  • 用工具约束代码规范,不影响原有开发流程的同时,减少 code review 中代码规范方面的噪音

安装步骤:

1、安装clang-format

brew install clang-format

查看是否安装成功

clang-format --version

2、添加自动化服务

1.png

选择快速操作

2.png

将shell拖拽到右侧

3.png

添加内容并勾选,保存并命名为CodeFormat

4.png

export PATH=/usr/local/bin:$PATH
clang-format

查看文件保存的位置:

open ~/Library/Services

3、创建 .clang-format 文件并放到根目录

创建 .clang-format 文件:

touch .clang-format

.clang-format 文件内容:

# 工具 https://github.com/mapbox/XcodeClangFormat(需要添加签名使用)
# 函数名详细地址 英文 http://clang.llvm.org/docs/ClangFormatStyleOptions.html
# 函数名详细地址 中文 https://www.cnblogs.com/PaulpauL/p/5929753.html

# OC语言
Language: ObjC

# 基于LLVM格式
# BasedOnStyle: LLVM

# 对齐注释
AlignTrailingComments: true

# 指针和引用的对齐方式
PointerAlignment: Right

# 用于缩进的列数
IndentWidth: 4

# 针对OC的block的缩进宽度
ObjCBlockIndentWidth: 4

# OC的block嵌套参数不换行
ObjCBreakBeforeNestedBlockParam: false

# switch的case缩进
IndentCaseLabels: true

# OC里面,在@property后加空格
ObjCSpaceAfterProperty: false

# 括号中的(),{},[]代码对齐方式
AlignAfterOpenBracket: Align

#ContinuationIndentWidth: 0

# 赋值=对齐
AlignConsecutiveAssignments: false

# 声明参数对齐
AlignConsecutiveDeclarations: false

# 运算符位置
BreakBeforeBinaryOperators: None

# 如果为真(true), 三元运算符将被放置在换行后
BreakBeforeTernaryOperators: false

# 总是在逗号和对齐逗号跟冒号前把构造函数初始化式换行
BreakConstructorInitializersBeforeComma: false

# 允许短的函数放在同一行
#AllowShortFunctionsOnASingleLine: None

# 允许case在同一行
AllowShortCaseLabelsOnASingleLine: false

# OC里面,在Protocol前后加空格
ObjCSpaceBeforeProtocolList: true

# 单行注释前的空格数
SpacesBeforeTrailingComments: 1

# 连续的空行保留几行
MaxEmptyLinesToKeep: 1

# 保留block里面的空行
KeepEmptyLinesAtTheStartOfBlocks: false

# 每行字符的限制,0表示没有限制
ColumnLimit: 0

# []中添加空格
SpacesInSquareBrackets: false

# ()中添加空格
SpacesInParentheses : false

# @[]里面两边空格,默认true
SpacesInContainerLiterals: false

# 赋值运算符前加空格
SpaceBeforeAssignmentOperators: true

# 在空括号中加空格
SpaceInEmptyParentheses: false

# 在<>中间插入空格
SpacesInAngles: false

# 换行的时候对齐操作符
AlignOperands: true

# 允许if在同一行
AllowShortIfStatementsOnASingleLine: true

# 允许while在同一行
AllowShortLoopsOnASingleLine: false

# 允许将简单的语句块放到同一行
AllowShortBlocksOnASingleLine: true

#缩进函数名
IndentWrappedFunctionNames: false

# 形参 如果为false要么都在同一行,要么各有一行
BinPackParameters: false

# 实参 如果为false要么都在同一行,要么各有一行
BinPackArguments: false

# 大括号换行
BreakBeforeBraces: Custom
BraceWrapping:
  # class定义后面
  AfterClass: true
  # 控制语句后面
  AfterControlStatement: false
  # enum定义后面
  AfterEnum: false
  # 函数定义后面
  AfterFunction: false
  # 命名空间定义后面
  AfterNamespace: false
  # struct定义后面
  AfterStruct: false
  # union定义后面
  AfterUnion: false
  # catch之前
  BeforeCatch: false

打开根目录

open ~

4、设置快捷键:
系统偏好->键盘->快捷键->app快捷键->选择Xcode->设置快捷键按钮
快捷键按钮建议设置: control+A ,系统格式化快捷键为: control+I 方便记忆

5.png

5、查看效果:

快捷键按钮方式:重新打开Xcode->选中需要格式化的代码->按下之前设置的快捷键按钮
手动选择方式:选中需要格式化的代码->右键->Services->CodeFormat
check.png

可能出现的问题

1、clang-format, bash 命令未找到

需要修改bash_profile文件,添加运行路径。具体为vim ~/.bash_profile, 在文件内添加clang-format存放路径,保存后退出。 source ~/.bash_profile

2、Swift代码没法格式化

用来格式化Swift代码的命令行工具是 SwiftFormat,安装教程:Swift代码自动格式化

TODO:

NS_OPTIONS类型的枚举不符合预期,目前是手动调整,不知道有没有可以直接配 .clang-format的方案。

预期效果:

typedef NS_OPTIONS(NSUInteger, UIBorderSideType) {
    UIBorderSideTypeAll    = 0,
    UIBorderSideTypeTop    = 1 << 0,
    UIBorderSideTypeLeft   = 1 << 1,
    UIBorderSideTypeRight  = 1 << 2,
    UIBorderSideTypeBottom = 1 << 3,
};

实际效果:

typedef NS_OPTIONS(NSUInteger, UIBorderSideType) {
    UIBorderSideTypeAll = 0,
    UIBorderSideTypeTop = 1 << 0,
    UIBorderSideTypeLeft = 1 << 1,
    UIBorderSideTypeRight = 1 << 2,
    UIBorderSideTypeBottom = 1 << 3,
};

参考:

Xcode代码格式化 .clang-format配置与使用_CCSH的博客-CSDN博客_xcode 代码格式化

clang format 官方文档自定义参数介绍(中英文) - PaulpauL - 博客园

Clang Format在Mac上的安装与使用 - 掘金

标签: 代码规范

非特殊说明,本博所有文章均为博主原创。

评论啦~



已有 2 条评论


  1. hzw
    hzw

    赋值=对齐

    AlignConsecutiveAssignments: true 就可以了

    回复 2022-11-15 22:23
    1. 西门桃桃
      西门桃桃 博主

      感谢大佬

      回复 2024-10-15 10:42