SynthXEX/CONTRIBUTING.md

3 KiB

Contributing to SynthXEX

Bug reports

Please direct any bug reports to either the main repository, or the GitHub mirror.

Patches

To contribute code, first ensure you have read and adhered to the code style section.

There are two ways to contribute code patches:

  • Pull requests, which you can submit either to the main repository, or the GitHub mirror.

  • Patch files, generated by Git, can be sent to <aidenisik+git@member.fsf.org>, which I will review and possibly merge.

Code Style

If you are using AStyle, the following command will format the code correctly (run from the project root):

astyle --style=allman --add-braces --break-blocks --indent-labels --indent-switches --unpad-paren --align-pointer=name --pad-oper --indent-preproc-block --add-one-line-braces --squeeze-ws --squeeze-lines=1 --recursive "./src/*.c" "./src/*.h"

The code style used in SynthXEX is the Allman/BSD style as specified by AStyle, with the following extra specifications:

  • C++-style comments are used, rather than multiline/C89-style comments, e.g:
// This is a comment
// This is another comment
// This is yet another comment
  • All conditional statements utilise curly brackets, even when there is only one line within them, e.g:
if(condition)
{
    printf("Hello!\n");
}
  • It is acceptable to have the curly brackets on the same line as the code if it is short, e.g:
if(condition) { printf("Hello!\n"); }

if(condition)
{ printf("Hello!\n"); }
  • All brackets immediately succeed/precede the name/keyword they correspond to with no spaces, e.g:
foo(bar);
(float)(a + b);
  • All code blocks have one empty line between the start/end and any other code, e.g.:
int a = 1;

if(a == 2)
{
    printf("Hi!\n");
}

int b = 2;
  • Labels are always 1 indentation level below the current level, e.g:
if(1)
{
    if(2)
    {
        int a = 1;
    label1:
        int b = 2;
    }
}
  • Case statements are always 1 indentation level above their corresponding switch, e.g.:
switch(val)
{
    case 1:
        printf("1\n");
        break;

    default:
        printf("0\n");
        break;
}
  • Pointer operators are always attached to variables, e.g:
char *string = NULL;
int a = 0;
setA(&a);
  • Operators are always padded to be one space away from their operands, e.g:
int a = 1 + 2;
  • Commas in function calls, etc, always have one space after them, e.g:
myFunc(1, 2);
  • Preprocessor macros outside functions are indented, just like regular code, e.g:
#ifdef MACRO_ONE
    #define MACRO 1
#else
    #define MACRO 0
#endif
  • There should never be more than one blank line between code, e.g:
int a;
int b;

int c;