开发配置

Git 换行符

1
2
# 提交检出均不转换
git config --global core.autocrlf false

.gitattributes - 对个别文件或目录定义不同的合并策略,让 Git 知道怎样比较非文本文件,在你提交或签出前让 Git 过滤内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 对任何文件, 文件的行尾自动转换(如果是文本文件, 则在文件入 Git 库时, 行尾自动转换为 LF; 如果已经在入 Git 库中的文件的行尾为 CRLF, 则该文件在入 Git 库时, 不再转换为 LF)
# * text=auto

# 对于 .txt 文件, 标记为文本文件, 并进行行尾规范化
# *.txt text

# 对于 .jpg 文件, 标记为非文本文件, 不进行任何的行尾转换
# *.jpg -text

# 对于 .vcproj 文件, 标记为文本文件, 在文件入 Git 库时进行规范化, 即行尾转换为 LF, 但是在检出到工作目录时, 行尾自动转换为 CRLF
# *.vcproj text eol=crlf

# 对于 .sh 文件, 标记为文本文件, 在文件入 Git 库时进行规范化, 即行尾为 LF, 但是在检出到工作目录时, 行尾也不会转换为 CRLF (即保持 LF )
# *.sh text eol=lf

# 对于 .py 文件, 只针对工作目录中的文件, 行尾为 LF
# *.py eol=lf

# GitHub 是根据项目里文件数目最多的文件类型, 识别项目类型. 后端项目难免会包含前端的资源, 有时候就会被标记成前端语言, 因为项目里 css 等文件比较多, 被误识别成 css 项目, 可以通过忽略文件的方式来达到指定语言
# 忽略目录下的文件的语言
# public/* linguist-vendored

# 在文件比较分散的情况下, 可以按文件的类型进行忽略
# *.css linguist-vendored
# *.scss linguist-vendored
# *.js linguist-vendored

# 当你的项目是作为一个扩展发布在 packagist.org 上的时候, 使用者需要的可能只是你的 src 文件夹和 composer.json 文件, 而不需要其他的一些文件, 它的作用就是会忽略这些文件
# 当使用 composer 安装你的软件包(扩展包)的时候, --prefer-dist 会从 github 或 cvs 下载一个 zip 包, 并将其解压缩. 使用 .gitattributes 文件, 可以通过添加 export-ignore 属性来忽略不需要下载的文件.
# 在使用 composer 安装扩展的时候, .travis.yml 文件是不会下载下来的.
# 适用于 Github 和 Bitbucket
# .travis.yml export-ignore

* text=auto
*.css linguist-vendored
*.scss linguist-vendored
*.js linguist-vendored
CHANGELOG.md export-ignore

.gitkeep - 如果一个目录为空, 是无法纳入到 git 版本控制中的, 所以创建了一个随意命名(最好还是按业界通用做法命名为 .gitkeep) 的隐藏文件来保证目录不为空

IDE 配置(这里以 PHPSTORM 为例)

1
2
3
4
5
6
7
8
9
10
11
# 设置换行符
Settings -> Editor -> Code Style
General -> Line separator:Unix and macOS (\n)
# 设置编码 UTF-8
Settings -> Editor -> File Encodings
[Global,Project,properties files] -> UTF-8
BOM -> with NO BOM
# 设置 Tab 为 4 个空格
Settings -> Editor -> Code Style -> PHP
取消 Use tab character 勾选
Tab size 设置为 4

.editorconfig - 定义编码规范 (编辑器配置文件, 比如缩进大小、换行模式等)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 通配符
# * 匹配除 / 之外的任意字符串
# ** 匹配任意字符串
# ? 匹配任意单个字符
# [name] 匹配 name 中的任意一个单一字符
# [!name] 匹配不存在 name 中的任意一个单一字符
# {s1,s2,s3} 匹配给定的字符串中的任意一个(逗号分割)
# {num1..num2} 匹配 num1 到 num2 之间的任意一个整数(num1 和 num2 可以为正整数也可以为负整数)

# root 表明是最顶层的配置文件,发现设为 true 时,才会停止查找 .editorconfig 文件
# charset 编码 latin1、utf-8、utf-8-bom、utf-16be、utf-16le
# indent_style 缩进风格 tab、space
# indent_size 缩进风格为 space 时, 缩进的字符数
# tab_width 缩进为 tab 时, 缩进的宽度
# end_of_line 换行符的类型 lf、cr、crlf
# trim_trailing_whitespace 是否将行尾空格自动删除
# insert_final_newline 是否使文件以一个空白行结尾

root = true

[*]
charset = utf-8
indent_style = space
indent_size = 4
end_of_line = lf
trim_trailing_whitespace = true
insert_final_newline = true

[*.md]
trim_trailing_whitespace = false

[*.{yml,yaml}]
indent_size = 2

squizlabs/PHP_CodeSniffer 代码检查工具(全局安装)

1
2
3
4
5
6
7
8
9
10
11
12
13
composer global require "squizlabs/php_codesniffer=*"
# 查看全局 vendor 目录
composer global config bin-dir --absolute

# Linux 环境 - 设置 phpcs、phpcbf 软链
ln -s /root/.composer/vendor/bin/phpcs /usr/local/bin
ln -s /root/.composer/vendor/bin/phpcbf /usr/local/bin

# Windows 环境 - 设置 phpcs、phpcbf 环境变量

# 设置默认代码标准
phpcs --config-set default_standard PSR12
phpcbf --config-set default_standard PSR12

PHPSTORM 推荐插件

1
2
3
4
5
6
7
8
9
# 翻译插件 - Translation

# 验证和格式化JSON字符串 - Json Parser

# 字符串操作(大小写 & 驼峰转换等) - String Manipulation

# 代码风格规范 - Editorconfig

# env 函数提示 - .env file support

.php_cs - 代码格式修复工具 PHP-CS-Fixer 配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# https://github.com/squizlabs/PHP_CodeSniffer

# https://blog.csdn.net/xiaoxiong_web/article/details/78788449
<?php
$header = <<<'EOF'

EOF;

$finder = PhpCsFixer\Finder::create()
->exclude('tests/Fixtures') // 排除文件
->in(__DIR__);

return PhpCsFixer\Config::create()
->setRiskyAllowed(true)
->setRules([
'@PSR2' => true,
'@Symfony:risky' => true,
'array_syntax' => ['syntax' => 'short'],
'combine_consecutive_unsets' => true, // 多个unset,合并成一个
// one should use PHPUnit methods to set up expected exception instead of annotations
'general_phpdoc_annotation_remove' => ['expectedException', 'expectedExceptionMessage', 'expectedExceptionMessageRegExp'], //phpdocs中应该省略已经配置的注释
//'header_comment' => array('header' => $header), // 添加,替换或者删除 header 注释
'heredoc_to_nowdoc' => true, // 删除配置中多余的空行和/或者空行。
'no_extra_consecutive_blank_lines' => ['break', 'continue', 'extra', 'return', 'throw', 'use', 'parenthesis_brace_block', 'square_brace_block', 'curly_brace_block'],
'no_unreachable_default_argument_value' => false, // 在函数参数中,不能有默认值在非缺省值之前的参数.有风险
'no_useless_else' => true, // 删除无用的eles
'no_useless_return' => true, // 删除函数末尾无用的return
'no_empty_phpdoc' => true, // 删除空注释
'no_empty_statement' => true, // 删除多余的分号
'no_leading_namespace_whitespace' => true, // 删除namespace声明行包含前导空格
'no_spaces_inside_parenthesis' => true, // 删除括号后内两端的空格
'no_trailing_whitespace' => true, // 删除非空白行末尾的空白
'no_unused_imports' => true, // 删除未使用的use语句
'no_whitespace_before_comma_in_array' => true, // 删除数组声明中,每个逗号前的空格
'no_whitespace_in_blank_line' => true, // 删除空白行末尾的空白
'ordered_class_elements' => false, // class elements排序
'ordered_imports' => false, // use 排序
'phpdoc_add_missing_param_annotation' => true, // 添加缺少的 Phpdoc @param参数
'phpdoc_trim' => true,
// 'phpdoc_trim_consecutive_blank_line_separation' => true, // 删除在摘要之后和PHPDoc中的描述之后,多余的空行
'phpdoc_order' => true,
'psr4' => true,
// 'strict_comparison' => true, // 严格比较,会修改代码有风险
//'strict_param' => true,
'ternary_operator_spaces' => true, // 标准化三元运算的格式
'ternary_to_null_coalescing' => true, // 尽可能使用null合并运算符??. 需要PHP> = 7.0
'whitespace_after_comma_in_array' => true, // 在数组声明中,每个逗号后必须有一个空格
'trim_array_spaces' => true, // 删除数组首或尾随单行空格
'align_multiline_comment' => [ // 每行多行 DocComments 必须有一个星号(PSR-5),并且必须与第一行对齐
'comment_type' => 'phpdocs_only'
],
'array_indentation' => true, // 数组的每个元素必须缩进一次
])
->setFinder($finder);
0%