summaryrefslogtreecommitdiff
path: root/CONTRIBUTING.md
diff options
context:
space:
mode:
authorLeon Henrik Plickat <leonhenrik.plickat@stud.uni-goettingen.de>2020-09-24 18:01:28 +0200
committerLeon Henrik Plickat <leonhenrik.plickat@stud.uni-goettingen.de>2020-09-24 18:01:28 +0200
commit9ff4f4959b8d78104fa4defb3c4cea9606e3c484 (patch)
treeac80aef7e1caff0d0af491ea4816ca63706a8116 /CONTRIBUTING.md
downloadwlclock-9ff4f4959b8d78104fa4defb3c4cea9606e3c484.tar.gz
wlclock-9ff4f4959b8d78104fa4defb3c4cea9606e3c484.tar.bz2
Init
Diffstat (limited to 'CONTRIBUTING.md')
-rw-r--r--CONTRIBUTING.md196
1 files changed, 196 insertions, 0 deletions
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..4169bb4
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,196 @@
+# Contributing to wlclock
+This file explains how you can contribute to wlclock.
+
+For larger contributions, especially for radical changes, I highly recommend you
+to ask me whether I will include your commit *before* you start investing time
+into it. Also please respect the coding style, even if you do not like it.
+
+
+## Communication
+You can ask questions and start discussions on the [mailing list](mailto:~leon_plickat/public-inbox@lists.sr.ht)
+or if you find me on IRC (my nick is "leon-p" and you can often find me on
+`#sway@freenode.net`).
+
+
+## Sending Patches
+You can send your patches via email to the mailing list. See
+[this](https://git-send-email.io/) helpful link to learn how to correctly send
+emails with git. Alternatively you can also manually attach a git patch file to
+a mail, but beware that this is more work for both you and me.
+
+All code review will happen on the mailing list as well.
+
+Write good commit messages!
+
+If you found this project on [GitHub](https://github.com/Leon-Plickat/wlclock),
+you can use that platforms contribution workflow and bug tracking system, but
+beware that I may be slow to respond to anything but email and that development
+officially takes place over at [sourcehut](https://sr.ht/~leon_plickat/wlclock/),
+the main hosting platform for this project.
+
+
+## Licensing and Copyright
+wlclock is licensed under the GPLv3, which applies to any contributions as
+well. I will not accept contributions under a different license, even if you
+create new files. The one single exception to this are Wayland protocol
+extensions.
+
+You are strongly invited to add your name to the copyright header of the files
+you changed and if you made an important contribution also to the authors
+sections in the man page and README. A Free Software project is proud of every
+contributor.
+
+
+## Style
+This section describes the coding style of wlclock. Try to follow it closely.
+
+Yes, it is not K&R. Cry me a river.
+
+Indent with tabs exclusively (looking at you, Emacs users).
+
+Lines should not exceed 80 characters. It is perfectly fine if a few lines are a
+few characters longer, but generally you should break up long lines.
+
+Braces go on the next line with struct declarations being the only exception.
+If only a single operation follows a conditional or loop, braces should not be
+used.
+
+ static void function (void)
+ {
+ struct Some_struct some_struct = {
+ .element_1 = 1,
+ .element_2 = 2
+ };
+
+ if ( val == 1 )
+ {
+ function_2();
+ function_3();
+ }
+ else
+ function_4();
+ }
+
+For switches, indent the case labels once and the following code twice.
+
+ switch (variable)
+ {
+ case 1:
+ /* do stuff... */
+ break;
+ }
+
+Conditionals are only separated by a space from their surrounding parenthesis
+if they contain more than just a single variable.
+
+ if (condition)
+ {
+ /* do stuff... */
+ }
+ else if ( variable == value )
+ {
+ /* do stuff... */
+ }
+
+An exception to this are `for` loops, where a space is only but always inserted
+after each semicolon.
+
+ for (int a = 0; a < 10; a--)
+ {
+ /* do stuff... */
+ }
+
+Logical operators in in-line conditionals or variable declarations / changes do
+not necessarily require parenthesis.
+
+ bool variable = a == b;
+ int another_variable = a > b ? 4 : 5;
+
+Use `/* comment */` for permanent comments and `// comment` for temporary
+comments.
+
+Sometimes it makes sense to align variable declarations. But only sometimes.
+
+ type name_3 = value;
+ type_1 name_acs = value;
+ type_scsdc name_23 = value;
+ type_abc name_advdfv = value;
+
+You can combine multiple declarations and calculations with commas. Just be
+careful that the code is still readable.
+
+ int a, b;
+ a = 1 + 2, b = a * 3;
+
+Name your bloody variables! With very, very few exceptions, a variable name
+should at least be three characters long. When someone sees your variable, they
+should pretty much immediately know what information is stored in it without
+needing to read the entire function. Variable names should generally be lower
+case, but exceptions are perfectly fine if justified.
+
+ DoNotUseCamelCase. Underscores_are_more_readable.
+
+If the data stored in your variable is complex / does complex things /
+influences complex things, document that.
+
+Variables usually should have a lower case name, although exceptions are fine if
+justified. The very first letter of a struct type or enum type name must be
+capitalised. Members of an enum must be fully caps.
+
+ enum My_fancy_enum
+ {
+ FANCY_1,
+ FANCY_2,
+ FANCY_3
+ }
+
+ struct Fancy_struct
+ {
+ int variable;
+ }
+
+ int another_variable;
+ struct Fancy_struct fs;
+
+`switch`, `while` and `for` may be in-lined after an `if` or `else` to
+reduce indentation complexity, but only if readability is not compromised and
+80 characters are not excessively exceeded. Under the same conditions, `case`
+blocks may be in-lined, if they only contains a single operation.
+
+ if (condition) switch (mode)
+ {
+ case MODE_1: do_stuff_1(); break;
+ case MODE_2: do_stuff_2(); break;
+ case MODE_3: do_stuff_3(); returned;
+ }
+ else while (stuff)
+ {
+ /* Do things... */
+ }
+
+`if` may be in-lined after `while`, `for` and `else` to reduce indentation
+complexity, but only if readability is not compromised and 80 characters are not
+excessively exceeded.
+
+ while (variable) if (condition)
+ {
+ /* Do stuff... */
+ }
+
+ for (int a = b; a > c; a += b) if (condition)
+ {
+ /* Do stuff... */
+ }
+
+ if (condition)
+ {
+ /* Do stuff... */
+ }
+ else if (condition)
+ {
+ /* Do stuff... */
+ }
+
+Never in-line variable declaration or changes, function calls or `return`,
+`goto`, `break` and friends.
+