ptlis / diff-parser
一个统一diff文件的解析器,返回一个液化的对象图。
1.1.0
2022-05-22 21:06 UTC
Requires
- php: >=8.1.0
Requires (Dev)
- phpstan/phpstan: ^1.6
- phpunit/phpunit: ^9.5.0
- squizlabs/php_codesniffer: ^3.6
This package is auto-updated.
Last update: 2024-09-12 23:26:50 UTC
README
一个统一diff文件的解析器,返回一个液化的对象图。
使用 __toString() 将其序列化回统一diff格式。
安装
使用composer安装
$ composer require ptlis/diff-parser
用法
解析diff文件
创建一个解析器
$parser = new \ptlis\DiffParser\Parser();
然后从文件路径获取一个更改集
$changeset = $parser->parseFile('path/to/git/diff', Parser::VCS_GIT);
或从变量中解析存储的补丁数据
$changeset = $parser->parse($patchData, Parser::VCS_SVN);
序列化
所有值类都实现了 __toString()
方法,以支持将组件直接序列化回统一diff格式。
例如,将 $changeset
中的数据序列化到文件 my.patch
中。
\file_put_contents('my.patch', $changeset);
对象图
用于存储更改集的树非常简单,与diff文件的组件一一对应。本质上
- 更改集是根节点,包含文件
- 文件包含块
- 块包含行
- 行是叶子节点。
更改集
从更改集中,您可以遍历已更改的文件数组
foreach ($changeset->files as $file) { // $file is an instance of ptlis\DiffParser\File }
文件
获取原始和新的文件名
$file->filename->original; // Eg 'readme.md' or '' (empty) on create $file->filename->new; // EG 'README.md' or '' (empty) on delete
获取执行的操作(创建、删除或更改)
$file->operation; // One of File::CREATED, File::CHANGED, File::DELETED
从文件中,您可以遍历更改块
foreach ($file->hunks as $hunk) { // $hunk is an instance of ptlis\DiffParser\Hunk }
块
获取块的起始行号
$hunk->startLine->original; // Eg '0' $hunk->startLine->new; // Eg '0'
获取块中受影响的行数
$hunk->affectedLines->original; // Eg '5' $hunk->affectedLines->new; // Eg '7'
从块中,您可以遍历更改的行
foreach ($hunk->lines as $line) { // $line is an instance of ptlis\DiffParser\Line }
行
获取原始和新的行号
$line->number->original; // Eg '7' or '-1' on create $line->number->new; // Eg '7' or '-1' on delete
获取操作
$line->operation; // One of Line::ADDED, Line::REMOVED, Line::UNCHANGED
获取行的值
$line->content; // Eg ' $foo = bar;'
贡献
您可以通过向问题跟踪器提交问题、改进文档或提交拉取请求来做出贡献。对于拉取请求,我更喜欢代码风格和测试覆盖率得到保持,但我愿意解决可能出现的任何小问题,以便请求可以被合并。