This project aims at providing a solution for source code edition, providing services decoupled from any user interface, with an effort of abstraction of the underlying models.
Please read the introduction if you never did it and don't know what the project is all about.
Reading the meta-documentation (disclaimer: this is not complete) is:
- advised before reading documentation
- mandatory before writing documentation
File system layout
- project related:
- package related:
public/: a web application to demonstrate or test the backend
node_modules/: all third-party libraries used by the application
node_modules/: can be installed from the
package.jsondata with the use of npm
As mentioned, the goal is to implement a generic solution to handle source code edition, whatever the language, whatever the UI used behind (i.e. the tool(s)).
If you want to implement a client using this backend, please read this tutorial.
We call the application serving source edition features (processing): the backend.
A frontend is a client of this backend (therefore acting as a server application), and they communicate through standard means.
Here is a quick description of the stack:
- backend: a Node.js based application, providing services used by editors and IDEs
- API: a classical programming interface for the backend, used by the JSON-RPC (Remote Procedure Call protocol using JSON) layer (which is the end point of the communication interface - see below - for the backend)
- communication interface: JSON-RPC through HTTP (default listening port: 3000)
- frontend: any IDE or editor with extension capability, using the backend through the communication interface
This project aims at providing everything except the last part: indeed, a frontend is a consumer of the project.
List of known frontends
Ideas for new frontends
- Sublime Text
- a custom/standard frontend (IDE for instance)
- ... and any other specific tools not even doing edition (but analysis for instance).
I would first give an advice to apply everywhere: READ CAREFULLY THE DOCS.
To be able to develop the project or even use the product you need to:
- Install Node.js - developed with latest version, tested with version 8, 10 and latest one
nodebinary must in in the
- Install npm (it comes with the installer of Node.js, portable versions are discontinued)
Tested on Microsoft Windows 7 Enterprise 64-bit SP1.
Install the node modules, by launching from this current directory the command (it might take some time):
Also, some components inside the package need to be generated, so run from anywhere the command:
npm run build
- make sure the port 3000 is free on your system
- execute the following command in a system shell:
npm start(in this current directory)
- (you can check it works if http://localhost:3000/ping sends
You can also run the set of tests, and you MUST DO IT when you develop, before requesting any integration of your work.
For that, simply run the npm script:
To avoid rebuilding the grammars manually anytime you change them, or any other file that needs to be rebuilt, you can use the provided watch script. Run it from the root of the package, like this:
npm run watch
However, for now it doesn't handle restarting the whole application (the server) when a change is made in its code, because this is a bit heavy and requires some subtle logic to keep it handy.
But you can use the native npm script to restart the application:
This is possible due to the fact that a
stop script has been added in addition to the
start one. So you can also do:
to shut the server down, instead of manually sending a kill signal.
All folders inside this project have a main documentation file like this one, where they describe everything needed to understand it, and to contribute to it. So please refer to them.
Sub-sections below discuss about development at the whole project scale.
You can update the package by modifying the content of the
For that you'll need to know the npm
What can be done among others:
- check required modules
- remove unnecessary modules
- maybe refine version constraints
- update the description, tags, etc.
Interesting external libraries: