Handly Contributor Guide
========================

Welcome to Handly, a technology project at Eclipse,
and thanks for your interest in this project.

Project description
-------------------

Handly provides basic building blocks for handle-based models,
with an emphasis on high-level code-centric models that render Eclipse
workspace from a programming language angle. It allows creating
highly scalable, robust, and thoroughly optimized models similar in quality
to the tried-and-tested Java model of Eclipse Java development tools
while reducing programming effort, fostering software reuse, and
enabling interoperability.

Handly is designed for flexibility and can be used to create source code models
for practically any language, whether general-purpose or domain-specific;
it is compatible with any parsing technology. The model implementor has
complete control over the model's base-level API, including the ability to
implement a preexisting handle-based model API. At the same time, the provided
uniform meta-level API establishes a common language and makes it possible
for IDE components to work in a generic way with any Handly-based model.

For more information, visit the project's website

- https://www.eclipse.org/handly/

Developer resources
-------------------

Information regarding source code management and builds

- https://projects.eclipse.org/projects/technology.handly/developer

Coding standards, bugs lifecycle, and more

- https://wiki.eclipse.org/Handly/Committer_FAQ

Building locally
----------------

The build is based on Maven and Tycho and is easy to run on a local machine:

 1. Make sure you have JDK 8 and Maven 3 installed. Both should be on the path.

 2. Clone the Handly Git repository and pick the desired branch.

 3. Open a shell to the Git workspace and execute

    $ cd releng

    $ mvn clean install

Once the build completes, the `repository/target` folder in the Git workspace
will contain a repository of build artifacts.

Setting up a developer workspace
--------------------------------

Handly currently uses `JavaSE-1.8` for compilation. Please add a matching JRE.
Perfect match (i.e. JDK 1.8) is recommended to avoid build warnings.

Handly employs specific Java code formatting conventions. Please import and use
the formatter profile from `tools/formatter.xml`. Note that the current profile
is intended to be used with the new formatter available since the Eclipse Mars
(4.5) release, and may produce suboptimal results if used with previous
Eclipse versions.

Import all projects from the Git workspace (don't search for nested projects)
and set the target platform using a `.target` file provided within the
`targets` project.

There are currently two target platforms defined. The base platform
(`base.target`) defines the base API level, whereas the latest platform
(`latest.target`) defines the latest functional level. Development tends
to be done against the base platform, while continuous integration tends
to be done against the latest platform.

Handly Examples define some auxiliary Xtext-based languages. Note that for
the MWE2 generator of the language infrastructure to work correctly, the Eclipse
installation and the target platform should contain the same version of Xtext.
A simple way to ensure that is to install Eclipse using one of the provided
`.p2f` files that can be found in the Git workspace `tools` folder. These
`.p2f` files are kept consistent with their namesake `.target` files.

Contributing
------------

General process and policy for making a contribution

- https://wiki.eclipse.org/Development\_Resources/Contributing\_via\_Git

Project-specific details and further references

- https://wiki.eclipse.org/Handly/Committer_FAQ

Contributor License Agreement
-----------------------------

Before your contribution can be accepted by the project, you need to create
and electronically sign the Eclipse Foundation Contributor License Agreement
(CLA)

- https://www.eclipse.org/legal/CLA.php

For more information, see CLA FAQ

- https://www.eclipse.org/legal/clafaq.php

Contact
-------

Contact the project developers via the project's "dev" list

- https://dev.eclipse.org/mailman/listinfo/handly-dev

Search for bugs
---------------

This project uses Bugzilla to track ongoing development and issues

- https://bugs.eclipse.org/bugs/buglist.cgi?product=Handly

Create a new bug
----------------

Bug reporting FAQ

- https://wiki.eclipse.org/Bug\_Reporting\_FAQ

Be sure to search for existing bugs before you create another one

- https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Handly

Remember that contributions are always welcome!