ptlis/diff-parser

一个统一diff文件的解析器,返回一个液化的对象图。

1.1.0 2022-05-22 21:06 UTC

README

一个统一diff文件的解析器,返回一个液化的对象图。

使用 __toString() 将其序列化回统一diff格式。

CircleCI codecov Latest Stable Version

安装

使用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;'

贡献

您可以通过向问题跟踪器提交问题、改进文档或提交拉取请求来做出贡献。对于拉取请求,我更喜欢代码风格和测试覆盖率得到保持,但我愿意解决可能出现的任何小问题,以便请求可以被合并。