定制 daniillgolovin/difrences-files 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

daniillgolovin/difrences-files

最新稳定版本:1.0.1

Composer 安装命令:

composer create-project daniillgolovin/difrences-files

包简介

Generate diff

README 文档

README

Maintainability Test Coverage linter and tests

Описание

«Вычислитель отличий» — программа, определяющая разницу между двумя структурами данных. Это популярная задача, для решения которой существует множество онлайн сервисов, например JSON Diff. Подобный механизм используется при выводе тестов или при автоматическом отслеживании изменений в конфигурационных файлах.

В рамках данного проекта реализовано создание AST (англ. Abstract Syntax Tree) - абстрактного синтаксического дерева, на основании которого имеющиеся форматеры (stylish, plain, json) выводят различия как плоских, так и вложенных файлов (используется рекурсия).

Особенности

  • Доступны следующие форматы для чтения: JSON, YAML.
  • Реализованы следующие форматеры: stylish (по умолчанию), plain, json.
  • Возможность использовать как библиотеку, так и как CLI команду. `

Установка

⚠️ Перед установкой проекта проверьте наличие установленных php, composer!

Для работы с проектом необходимо выполнить следующие действия по его установке:

  1. Склонируйте репозиторий, используя одну из следующих консольных команд:
# HTTPS
>> git clone https://github.com/DaniillGolovin/Difference-Generator.git
# SSH
>> git clone git@github.com:DaniillGolovin/Difference-Generator.git
  1. Осуществите установку проекта:
>> make install
  1. Запустите команду на примере тех, которые указаны ниже.

Для глобальной установки выполните команду:

$ composer global require daniillgolovin/difrences-files

Использование

CLI команда

Данный проект можно использовать как утилиту командной строки. Подробности использования описания в helper:

>> gendiff -h
gendiff -h

Generate diff

Usage:
  gendiff (-h|--help)
  gendiff (-v|--version)
  gendiff [--format <fmt>] <firstFilePath> <secondFilePath>

Options:
  -h --help                    Show this screen
  -v --version                 Show version
  --format <fmt>               Report format [default: stylish] Examples: stylish, plain, json

Формат stylish

Данный форматер выводит разницу между двумя файлами, учитывая следующие особенности:

  • Если свойство было добавлено и удалено либо изменило свое значение, то указываются знаки + и - соответственно.
  • В остальных случаях свойство либо не изменилось, либо в обоих файлах имеет в качестве значения объект (является вложенным).
Пример
>> gendiff file1.json file2.json
{
  - follow: false
    host: hexlet.io
  - proxy: 123.234.53.22
  - timeout: 50
  + timeout: 20
  + verbose: true
}
Различия между плоскими файлами (JSON) формат (STYLISH)

asciicast

Различия между плоскими файлами (YAML) формат (STYLISH)

asciicast

Различия между вложенными файлами (JSON) формат (STYLISH)

asciicast

Различия между вложенными файлами (YAML) формат (STYLISH)

asciicast

Формат plain

Данный форматер выводит разницу между двумя файлами, учитывая следующие особенности:

  • Если свойство имеет "сложное значение" (объект, массив), то выводится [complex value].
  • Если свойство является вложенным, то оно не учитывается: сохраняется лишь путь до него, который используется при выводе остальных "плоских" свойств, находящийся внутри оного.
  • Если свойство не было изменено, то оно не выводится.
Пример
>> gendiff file5.json file6.json --format plain
Property 'common.follow' was added with value: false
Property 'common.setting2' was removed
Property 'common.setting3' was updated. From true to null
Property 'common.setting4' was added with value: 'blah blah'
Property 'common.setting5' was added with value: [complex value]
Property 'common.setting6.doge.wow' was updated. From '' to 'so much'
Property 'common.setting6.ops' was added with value: 'vops'
Property 'group1.baz' was updated. From 'bas' to 'bars'
Property 'group1.nest' was updated. From [complex value] to 'str'
Property 'group2' was removed
Property 'group3' was added with value: [complex value]
Различия между плоскими файлами (JSON) формат (PLAIN)

asciicast

Различия между плоскими файлами (YAML) формат (PLAIN)

asciicast

Различия между вложенными файлами (JSON) формат (PLAIN)

asciicast

Различия между вложенными файлами (YAML) формат (PLAIN)

asciicast

Формат json

Данный форматер выводит разницу между двумя файлами, учитывая следующие особенности:

  • Если свойство не является вложенным или "сложным" то указывается его имя, дескриптор, старое значение, новое значение, дети в формате: { state: 'СОСТОЯНИЕ', type: 'ТИП', oldValue: 'ЗНАЧЕНИЕ в file1' oldValue: 'ЗНАЧЕНИЕ в file2' children: 'ДЕТИ' }.
Пример
>> gendiff file1.yaml file2.yaml --format json
{
  {
    "key":"follow",
    "type":"removed",
    "oldValue":null,
    "newValue":false
    },
  }
  {
    "key":"host",
    "type":"not updated",
    "oldValue":"hexlet.io",
    "newValue":"hexlet.io"
  },
  {
    "key":"proxy","type":"removed",
    "oldValue":null,
    "newValue":"123.234.53.22"
  },
  {
      "key":"timeout",
      "type":"updated",
      "oldValue":50,
      "newValue":20
  },
  {
      "key":"verbose",
      "type":"added",
      "oldValue":null,
      "newValue":true
  }
}
Различия между плоскими файлами (JSON) формат (JSON)

asciicast

Различия между плоскими файлами (YAML) формат (JSON)

asciicast

Различия между вложенными файлами (JSON) формат (JSON)

asciicast

Различия между вложенными файлами (YAML) формат (JSON)

asciicast

Структура проекта

..
├── Makefile
├── README.md
├── bin
│   └── gendiff
├── composer.json
├── composer.lock
├── coverage.txt
├── file.txt
├── phpunit.xml
├── src
│   ├── Differ.php
│   ├── Formatters
│   │   ├── Json.php
│   │   ├── Plain.php
│   │   └── Stylish.php
│   ├── Formatters.php
│   └── Parsers.php
└── tests
    ├── GenDiffTest.php
    └── fixtures
        ├── diff.txt
        ├── diffJson.txt
        ├── diffPlain.txt
        ├── diffStylish.txt
        ├── file1.json
        ├── file1.yml
        ├── file2.json
        ├── file2.yml
        ├── fileNest1.json
        ├── fileNest1.yml
        ├── fileNest2.json
        └── fileNest2.yml

5 directories, 27 files

统计信息

  • 总下载量: 23
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2024-07-08