项目作者: xaizek

项目描述 :
Mainly a syntax-aware diff that also provides a number of additional tools.
高级语言: C++
项目地址: git://github.com/xaizek/zograscope.git
创建时间: 2017-11-23T14:04:24Z
项目社区:https://github.com/xaizek/zograscope

开源协议:GNU Affero General Public License v3.0

下载


zograscope, 2017 - 2024

Screenshot

Clone recursively, there are submodules:

  1. git clone --recursive https://github.com/xaizek/zograscope.git
  1. Description (Status;
    1. [Supported languages](#supported-languages);
    2. [Configuration](#configuration))
  2. Tools
  3. Building and Installing
    (Dependencies)
  4. Documentation
  5. License
  6. Credits
    (References)

Name

“A zograscope is an optical device for enhancing the sense of depth perception
from a flat picture.” (wiki)

Description

zograscope is built around syntax-aware diff and includes a number of
additional tools.

The nature of syntax-aware diff requires knowledge of structure of the code,
which can be used to build other simple tools that can benefit from this
information. Competing with real language front-ends in the level of accuracy
is not possible, but making some things that are one step further than regular
text-processing utilities seems feasible and the result might be even more
practical than some of the more elaborate tools which end up requiring
complicated setup process.

Status

The project is work in progress, but is useful in its current state.

Code isn’t perfect and isn’t extensively documented as initial version was more
of an experiment, but this situation gets better.

Documentation

See the manual page.

Tools

zs-diff

A terminal-based syntax-aware diff.

zs-find

Grep-like tool that finds elements of source code structure.

zs-gdiff

A Qt5 GUI version of syntax-aware diff.

zs-hi

Simple syntax highlighter for xterm-256color palette.

zs-stats

Counter of lines of code.

zs-tui

TUI interface with underdefined scope of functionality.

Building and Installing

  1. # if Qt5 is available (use `qmake` if it corresponds to Qt5 on your machine)
  2. echo 'QT5_PROG := qmake-qt5' >> config.mk
  3. # if libgit2 is present
  4. echo 'HAVE_LIBGIT2 := yes' >> config.mk
  5. # if libsrcml is present
  6. echo 'HAVE_LIBSRCML := yes' >> config.mk
  7. # if cursesw is present
  8. echo 'HAVE_CURSESW := yes' >> config.mk
  9. make release check

This will build release version and run tests. The executables will be named
release/zs-*.

There is no data, so just making them available in the $PATH will work.
However, it’s possible to install conventionally (/usr prefix by default):

  1. make install

DESTDIR and PREFIX can be set to modify destination location. On invoking
make uninstall same values of these values should be specified.

Dependencies

  • GNU Make
  • C++11-capable compiler (GCC 4.9 has some issues, GCC 5.3 works fine)
  • flex
  • GNU Bison v3+
  • Boost, tested with 1.58, but older versions might work too
  • (optional, run- or build-time, for C++) srcml (v0.9.5 and v1.0.0 were
    tested)
  • (optional, for gdiff tool) qt5
  • (optional, for gdiff tool) libgit2
  • (optional, for tui tool) curses with support of wide characters
  • (optional) pandoc for regenerating man pages

For Debian-based distributions

If you are using Debian or one of its derivatives, you can install the
dependencies as follows:

  1. # install make and build tools
  2. sudo apt install -y build-essential
  3. # installing dependencies
  4. sudo apt install -y libboost-filesystem-dev libboost-iostreams-dev
  5. sudo apt install -y libboost-program-options-dev libboost-system-dev
  6. sudo apt install -y libarchive13
  7. sudo apt install -y bison flex
  8. # installing srcml
  9. wget http://131.123.42.38/lmcrs/beta/srcML-Ubuntu18.04.deb
  10. sudo apt install ./srcML-Ubuntu18.04.deb

You can also check out the CI build script in case
dependencies change in the future.

License

AGPLv3

Version 3 of the GNU Affero General Public License.

Credits

dtl library is used for finding edit distance.

pmr implementation from C++17 with a small addition is employed for
custom allocators.

TinyXML2 is used for parsing XML.

tree-sitter is used for parsing of some languages.

Catch2 is used for tests.

References

Change Distilling: Tree Differencing for Fine-Grained Source Code Change
Extraction
.
Beat Fluri, Michael Würsch, Martin Pinzger, and Harald C. Gall.
2007.

Change Detection in Hierarchically Structured Information.
Sudarshan Chawathe, Hector Garcia-molina and Jennifer Widom.
1996.

Simple fast algorithms for the editing distance between trees and related
problems
.
Kaizhong Zhang and Dennis Shasha.
1989.