## Before you start

If you’re here, you are probably thinking about contributing to our plugin, and we are grateful for that.

To be sure that your contributions will be welcome and won’t just be seen as a workload increase for everybody else and rejected, please read the following advice and information.

##### What you will learn by reading that page:

- The plugin coding conventions
- The plugin License
- How to test the code
- The plugin architecture
- How to start contributing
- Should you write custom or built-in linting rules?

### Coding conventions

We use Checkstyle and PMD to harmonize the code and the Javadoc. You can get a list of the latest enabled rules there:

- Checkstyle config
- PMD config

Please use the following formatter and clean_up files to configure Eclipse (no support for IntelliJ yet, but contributions would be welcome if you maintain them):

- Formatter configuration file
- Clean-up configuration file

The project relies on SLF4J and the Logback implementation (Hi Ceki!) for logging, except for the mojos which uses Maven’s own system.

In order to keep the build logs smooth and short, please turn off the test logs before submitting your merge requests.

This can be achieved by adding the following `logback-test.xml` to your `src/test/resources`:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration xmlns="http://ch.qos.logback/xml/ns/logback"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://ch.qos.logback/xml/ns/logback http://ch.qos.logback/xml/ns/logback/logback.xsd">

        <statusListener class="ch.qos.logback.core.status.NopStatusListener" />

        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>%d{"MMM dd, yyyy HH:mm:ss"} %c %M%n%-5level: %msg%n</pattern>
            </encoder>
        </appender>

        <root level="off">
            <appender-ref ref="STDOUT" />
        </root>

    </configuration>

Finally, you can use our XML catalog to configure the XML validation in your IDE.

### Licensing

The project uses the GPLv3 license. You should understand it and not include any incompatible licenses before submitting merge requests.

### Testing your code

The project makes extensive use of automated tests and is shipping with some testbeds dependencies which you should use to make your tests easier to write to maintain.

You can learn more about these testbeds on the testing page.

### Project architecture

The project architecture and organisation is described on the architecture page.

### How to start

If you want to report an issue or an enhancement request, please read the following page before you do so.

If you want to contribute but don’t know what to do, you can have a look at our issues tracker.

You can then clone the master and create your branch to make your changes:

    $ git clone https://gitlab.com/thewonderlemming1/c4plantuml-maven-plugin.git
    $ git branch YOUR_FEATURE_OR_ISSUE_FIX_NAME
    $ git checkout YOUR_FEATURE_OR_ISSUE_FIX_NAME

You’re all set!

### Should you write built-in linting rules or custom ones?

##### If you think that your rule is not too specific…

and would benefit to others and you are willing to give it to everybody, then you can choose to write a built-in linting rule. You can have a look at that page to learn how to do that.

##### If your rule is very specific to your business…

has dependencies to non-open systems/libraries or if you don’t want to bother following the coding conventions then you can simply write a custom linting rule. You can have a look at that page to learn how to do that.