Skip to content

gonboy/uaiso

 
 

Repository files navigation

The Uaiso project:


            A language-unifying source code modelling engine


You can think of a source code modelling engine as a tool that understands
your software's source code. It implements the infra-structure necessary for
IDEs or text editors to provide you with features such as syntax highlighting,
semantic information, code completion, and others. Essentially, it performs a
task similar to what a compiler front-end would do.

In action:

- https://youtu.be/71aqIwv3vJs (Overall intro)
- https://youtu.be/4f-jHriOR_Y (Python)
- https://youtu.be/nUpcVBAw0DM (Go lang)
- https://youtu.be/ZwMQ_GB-Zv0 (D lang)

The videos above show a prototype running as a plugin in Qt Creator. Notice
the Uaiso doesn't depend on any specific IDE or code editor, it can be plugged
anywhere. I picked Qt Creator as a "validation platform" essentialy because I
find it beautiful (OK... I was one of the developers).


                                --------
                                  Goal
                                --------

What problem does Uaiso wanna solve?

  - Reimplementation of code modelling engines for different languages when, in
    fact, many languages share a lot of features. Uaiso offers a pragmatic
    approach based on common language principles, but still allows for any
    language to define specific behavior.

  - Uaiso is a self-standing library, independent of an IDE or text editor.


What benefits does Uaiso bring?

  - Quicker and easier startup for tool creators when adding support for new
    languages in their tools or to expand their tools to new environments.

  - Consistent development experience for end-users throughout IDEs and code
    editors, and even accross different programming languages.


The Uaiso project is in conception phase, but you can already try it out. The
programming languages being initially integrated are Python, Go, and D (Haskell
is on the way). Expect to find bugs and missing functionality, but I hope you
enjoy what's already there. Contributions are welcome.

Design overview: https://goo.gl/VBQzJW


                              -------------
                               Quick Start
                              -------------

The Uaiso project is written in Standard C++. Although you should be able to
build it cross-platform, I'm developing on OS X and I have not tested it
elsewhere. There's some code that assumes a Unix-like system, for instance the
`/` as a directory separator. I'll work on such "details" eventually.

This is a hobby project. Nevertheless, I'd like to make it easy for anyone to
build and run it. Here are the guidelines (an out-of-source build is not
possible yet because a few Python scripts still need work). Feel free to drop
me an email for questions or feedback.

$git clone --recursive git@github.com:ltcmelo/uaiso.git
$cmake --version
cmake version 2.8.10.2
$flex --version
flex 2.5.35 Apple(flex-31)
$bison --version
bison (GNU Bison) 2.7.12-4996
$python --version
Python 2.7.5
$clang --version
Apple LLVM version 6.0 (clang-600.0.54) (based on LLVM 3.5svn)
$cmake .
$make
$./UaiSoEngineTest

Note 1: The reason for using `recursive` in git clone is due to an string utils
library I'm using as a submodule. It's also written by me and it's pure C++.

Note 2: While the Python parser is hand-writen (a recursive descent one), the
D and Go parsers are Bison-based. It's typically harder to get LR parsers
working on an interactive environment. However, this decision was convenient to
me in order to "quickly" sketch a prototype back then. I plan to replace those
for LL parsers eventually - in particular for D, due to its grammar
characteristics. Nevertheless, as you can see in the videos below, it's still
possible to do error recovery at the right places so completion works decently.


                                ---------
                                 Plugins
                                ---------

Uaiso plugins live at https://github.com/ltcmelo/uaiso-plugins and are
available as a sub-module of this repository.


Leandro T. C. Melo
http://ltcmelo.com

About

A language-unifying source code modelling engine

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 44.4%
  • Go 27.8%
  • Python 17.0%
  • Yacc 7.8%
  • D 1.2%
  • Lex 0.7%
  • Other 1.1%