petk / normalizator
在Git仓库中标准化文件
Requires
- php: >=8.2
- ext-fileinfo: *
- ext-filter: *
- ext-intl: *
- ext-mbstring: *
- ext-phar: *
- psr/container: ^2.0
- psr/event-dispatcher: ^1.0
- psr/simple-cache: ^3.0
- symfony/console: ^7.0
Requires (Dev)
- ext-dom: *
- ext-libxml: *
- ext-xml: *
- ext-xmlwriter: *
- mikey179/vfsstream: ^1.6
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^11.1
- thecodingmachine/phpstan-safe-rule: ^1.2
README
用PHP编写的命令行工具,用于检查并修复指定文件中的尾随空白、LF或CRLF换行符、多余的尾随换行符、文件权限等问题。
特性
- 检查文件权限
- 删除尾随空白字符
- 删除多余的尾随换行符
- 删除多余的行首换行符
- 插入缺失的尾随换行符
- 删除文件中间的多余换行符
- 转换并同步EOL(行尾)字符
- 清理缩进部分前的空格
- 检查文件扩展名
- 检查文件和目录名是否包含特殊字符(空格、非ASCII字符等)
- 检查文件编码
- 检查缩进风格
安装
Normalizator是一个简单的Phar可执行文件,可以从GitHub下载
curl -OL https://github.com/petk/normalizator/releases/latest/download/normalizator.phar
或者
wget https://github.com/petk/normalizator/releases/latest/download/normalizator.phar
将其移动到/usr/local/bin
,则可以在整个系统范围内访问
chmod +x normalizator.phar mv normalizator.phar /usr/local/bin/normalizator
更新
更新normalizator到最新版本
sudo normalizator self-update
关于
许多代码项目中存在一个反复出现且永无止境的问题,即尾随空白、文件末尾缺少尾随换行符、过多冗余换行符、不同的行尾字符、误用的权限等问题。
除了多种首选的编码风格外,某些编辑器行为也各不相同,有些在保存文件时会自动修复这些问题。有些默认使用.editorconfig
文件,有些则保持文件原样。
Git还提供了几个配置选项来检测和处理这些问题。
虽然并非所有文件都必须修复这些问题,但更一致和统一的方法可以减少提交时的认知负担,并在某些文本编辑器和IDE中提供更好的开发体验。
本工具旨在为这个问题提供一个初步的解决方案,并提供一套更一致的资源代码文件,通过简单但仍然有用且足够强大的方法,使用命令行整理Git仓库、目录或路径中的所有文件。
Docker
还有一个Docker镜像可供在容器内运行此工具。
docker run -it -v path/to/your/files/to/check:/opt/app:rw petk/normalizator:latest check .
要求
要使用normalizator,系统需要安装PHP 8.2或更高版本,并包含以下PHP扩展:
- fileinfo
- filter
- intl
- mbstring
- phar
用法
检查文件(干运行)而不修改任何文件
normalizator check [OPTION...] [--] <path(s)>...
修复并覆盖文件
normalizator fix [OPTION...] [--] <path(s)>...
传递路径
路径或文件可以作为空格分隔的参数传递
normalizator check [OPTION...] [--] ~/dir/foo ~/dir/bar ~/dir/file.php ...
使用--not
选项跳过指定的路径或文件
normalizator check [OPTION...] \ --not <path-to-skip> \ --not <path-to-skip> \ ... [OPTION...] \ [--] <path>...
文件编码
对于非ASCII和非UTF-8的文件编码,选项--encoding
或简写-c
尝试将文件内容编码转换为UTF-8
normalizator check --encoding -- ~/projects/path/to/files/ # or normalizator check -c -- ~/projects/path/to/files/
另请参阅
尾随空白
Normalizator可以修剪文本文件中的尾随空格字符
normalizator check --trailing-whitespace -- ~/projects/path/to/files/ # or normalizator check -w -- ~/projects/path/to/files/
修复文件
normalizator fix -w -- ~/projects/path/to/files/
缩进风格
缩进风格可以通过以下方式检查
normalizator check --indentation -- ~/projects/path/to/files # or normalizator check -i -- ~/projects/path/to/files
缩进大小设置为4(一个制表符等于4个空格)。可以通过--indentation-size
选项更改缩进大小。例如,以下将缩进大小设置为2
normalizator fix --indentation --indentation-size=2 -- ~/projects/path/to/files
制表符前的空格
清除缩进中所有制表符前的空格
normalizator check --space-before-tab -- ~/projects/path/to/files/ # or normalizator check -s -- ~/projects/path/to/files/
EOL规范化
这规范了EOL(行结束符)的风格(LF与CRLF)
normalizator check --eol -- ~/projects/path/to/files/ # or normalizator check -e -- ~/projects/path/to/files/
根据POSIX,一行是一个或多个非<newline>
字符的序列,后跟一个终止的<newline>
字符。文件通常应该至少有一个最后的换行符。
一个非空源文件应以换行符结尾,该换行符不应由反斜杠字符直接 precede。
换行符
- LF (
\n
) (*nix和Mac,默认) - CRLF (
\r\n
) (Windows) - CR (
\r
) (旧Mac,已弃用)
如果某些文件需要特定的EOL,则可以通过eol
Git属性设置EOL字符
README.md eol=crlf
Normalizator将考虑Git属性的设置。
要为给定路径中的所有文件覆盖EOL字符
normalizator check --eol LF -- ~/projects/path/to/files
多余的leading EOL
normalizator check --leading-eol -- ~/projects/path/to/files # or normalizator check -l -- ~/projects/path/to/files
最终EOL规范化
normalizator check --final-eol -- ~/projects/path/to/files # or normalizator check -N -- ~/projects/path/to/files
可选地,您可以通过传递一个数字来设置允许的最终EOL的最大数量。如果缺少最终EOL,则将追加一个。这允许最多有2个最终EOL
normalizator check --final-eol 2 -- ~/projects/path/to/files
多余的中间EOL
修剪文本或代码中间的多余EOL
normalizator check --middle-eol -- ~/projects/path/to/files # or normalizator check -m -- ~/projects/path/to/files
权限规范化
这同步给定文件和目录的权限。符号链接不受影响。
normalizator check --permissions -- ~/projects/path/to/files/ # or normalizator check -u -- ~/projects/path/to/files/
这主要适用于*nix系统。
- 文件通常应有0644权限。
- 目录通常应有0755权限。
- 可执行文件通常应有0755权限。
- 受保护文件有0444权限。
在.git
目录中的权限
0755 └─ .git/
0755 ├─ branches/
0644 ├─ COMMIT_EDITMSG
0644 ├─ config
0755 ├─ hooks/
0755 │ ├─ applypatch-msg.sample
0755 │ ├─ commit-msg.sample
│ └─ ...
0644 ├─ index
0755 ├─ info/
0755 ├─ logs/
0755 ├─ objects/
0755 │ ├─ 06/
0444 │ │ ├─ 1d542745facb8d2307059048b0c72746daf9a0
│ │ └─ ...
0755 │ ├─ 08/
0755 │ ├─ 13/
│ └─ ...
0644 ├─ packed-refs
0755 ├─ refs/
└─ ...
在umask为002(Ubuntu)的系统上,这些权限会少2。因此,它们稍微宽松一些,默认为
- 文件:0664
- 目录:0775
- 可执行文件:0755
- 受保护文件仍然是0444
文件扩展名规范化
用于规范化文件扩展名
normalizator check --extension -- ~/projects/path/to/files/ # or normalizator check -x -- ~/projects/path/to/files/
这将调整文件扩展名,例如从.JPEG
到.jpg
等。
文件名规范化
用于规范化文件和目录的名称
normalizator check --name -- ~/projects/path/to/files/ # or normalizator check -a -- ~/projects/path/to/files/
这将修正文件和目录的名称,以便它们不包含可能在某些情况下引起问题的空格或特殊字符。
文档
许可证和贡献
欢迎通过GitHub上的仓库分支进行贡献。此存储库在MIT许可证下发布。