## Git repositories

The Eclipse ESCET project maintains the following source code repositories:

- Main repository: `https://gitlab.eclipse.org/eclipse/escet/escet.git`

- Website repository: `https://gitlab.eclipse.org/eclipse/escet/escet-website.git`

These can also be accessed via a web interface of the Eclipse Foundation GitLab:

- Eclipse ESCET main repository

- Eclipse ESCET website repository

New website versions are deployed from the build of the main repository. Changes should therefore be made to the main repository, rather than directly to the website repository. Since the website repository does not have its own issue tracker, issues for the website should be made on the main repository as well.

The software is written in the Java programming language, as a collection of Eclipse plugins, and using the Eclipse Modeling Framework (EMF).

For ease of programming, the Eclipse IDE is recommended. See also the section on setting up a development environment.

To contribute code (e.g. patches), documentation, or anything else, see the contributing section.

The way we work with our Git repository is explained as part of our development process.

### Repository structure

In the Eclipse ESCET main source code repository (Git repository), three layers are distinguished:

- The top layer contains user-oriented languages for designing controllers. Currently there are two modeling languages in this layer, CIF and Chi.

  The third language in the top layer is ToolDef, a cross-platform scripting language to run tests, and to automate the various tools that need to be executed while designing a controller.

- The middle layer contains developer oriented support code. It has a language of its own, named SeText. This language implements an LALR(1) parser generator with a few twists to make it easy to use in a Java environment and to connect it to an Eclipse text editor.

  The other part of the middle layer is common functionality shared between the languages.

- The bottom layer is mostly configuration to attach the software to the Eclipse platform, including build and release engineering.

This document describes the structure of the top and middle layers. For the bottom layer, standard Eclipse and Maven/Tycho tools are used, which are described elsewhere.

The three layers are not further distinguished in the repository. Instead, different parts are stored in different sub-directories from the root.

### Language directories

Each language has its own subdirectory in the root, `/cif` and `/chi` for the CIF and Chi modeling languages, `/tooldef` for the ToolDef language, and `/setext` for the SeText language.

Within a language directory, a directory exists for each part of the code (often equivalent to a plugin), with the same name as the plugin. The pattern of a plugin name is `org.eclipse.escet.<language>.<plugin-name>` where the plugin-name in different directories has the same meaning. A non-exhaustive list:

Plugin name | Description
--- | ---
`documentation` | User-oriented documentation about the language, such as a user manual or a reference manual.
`documentation.utils` | Support libraries used by the documentation for generating figures.
`metamodel` | Ecore metamodel back bone of the language. Model classes for the central data structure that all tools of the language use. Often generated using modeling tools such as Sirius, but manually written classes exist as well.
`metamodel.java` | Generated Java constructor and walker classes for the Ecore metamodel data structure.
`parser` | SeText input, and generated or manually written code to parse an input file and convert it to an tree of classes that can be given to the type checker.
`typechecker` | Implementation of the type checker to check the parsed input, and annotate it with derived information, resulting in an model instance that can be used by all tools of the language.
`io` | Text file loading, parsing, and type checking, and possibly writing result specifications.
`texteditor` | Code for editing source files of the language in an text Eclipse editor, with folding, syntax highlighting, and reporting of errors and warnings in the specification.
`tests` | Collection of tests to check the tools for the language. Typically a set of input specifications, a set of expected output files, and a ToolDef script to run the tests. These tests can be seen as integration tests.
`codegen` | Code generator to convert the input specification to a runnable model.
`runtime` | Support libraries used by the runnable model.
`tooldefs` | Interface definitions to make tools of the language available for ToolDef.
`common` | Common functionality used by many tools of the language.

Other plugin names are often tools with the same name.

### Middle layer common functionality

The common code between all languages is stored in the `/common` directory, again with full name of the plugin as sub-directory names. These plugins contain:

Plugin name | Description
--- | ---
`org.eclipse.escet.common.app.framework` | Common application framework.
`org.eclipse.escet.common.app.framework.appsview.ui` | The Applications view provides a user interface to manage the active applications.
`org.eclipse.escet.common.asciidoc` | Common functionality related to AsciiDoc documentation.
`org.eclipse.escet.common.box` | Library to generate formatted code-like text.
`org.eclipse.escet.common.eclipse.ui` | Common Eclipse User Interface code.
`org.eclipse.escet.common.emf` | Common EMF code.
`org.eclipse.escet.common.emf.ecore.codegen` | Code generators from Ecore files.
`org.eclipse.escet.common.emf.ecore.validation` | Common EMF validation code.
`org.eclipse.escet.common.emf.ecore.xmi` | Common EMF XMI serialization code.
`org.eclipse.escet.common.java` | Common Java functions and classes, in particular the Lists, Sets, Maps and Strings classes.
`org.eclipse.escet.common.multivaluetrees` | A pure Java implementation of Multi-value Decision Diagrams (MDDs).
`org.eclipse.escet.common.position.common` | Common functions for (text-file) positions in source files.
`org.eclipse.escet.common.position.metamodel` | The Ecore metamodel for (text-file) positions in source files.
`org.eclipse.escet.common.raildiagrams` | Rail diagram generator. Produces syntax diagrams.
`org.eclipse.escet.common.svg` | Common SVG library for viewing and manipulating SVG trees.
`org.eclipse.escet.common.typechecker` | Common type checker functionality.