petk/normalizator

在Git仓库中标准化文件

安装: 7

依赖项: 0

建议者: 0

安全: 0

星标: 5

关注者: 3

分支: 0

开放问题: 0

类型:项目

v0.0.6 2024-05-02 19:30 UTC

This package is auto-updated.

Last update: 2024-09-14 18:52:37 UTC


README

Test workflow

用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>字符。文件通常应该至少有一个最后的换行符。

C89标准以上提到了最后的换行

一个非空源文件应以换行符结尾,该换行符不应由反斜杠字符直接 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许可证下发布。