path: root/DEVELOPMENT.md
diff options
authorcbdev <cb@cbcdn.com>2020-03-28 17:23:21 +0100
committercbdev <cb@cbcdn.com>2020-03-28 17:23:21 +0100
commit144e77a2212b2d2f0e3bd689fd7dc231d86a07a6 (patch)
tree343fda8b977f0a9ef81b933c6b528a589dced36f /DEVELOPMENT.md
parent5fdb638454ce90eb565555dfece5030a2ec4a576 (diff)
Add initial development guide
Diffstat (limited to 'DEVELOPMENT.md')
1 files changed, 40 insertions, 0 deletions
diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md
new file mode 100644
index 0000000..0e677eb
--- /dev/null
@@ -0,0 +1,40 @@
+# MIDIMonster development guide
+This document serves as a reference for contributors interested in the low-level implementation
+of the MIDIMonster. It is currently a work in progress and will be extended as problems come
+up and need solving ;)
+## Basics
+All rules are meant as guidelines. There may be situations where they need to be applied
+in spirit rather than by the letter.
+### Architectural guidelines
+* Change in functionality or behaviour requires a change in documentation.
+* There is more honor in deleting code than there is in adding code.
+* The `master` branch must build successfully. Test breaking changes in a branch.
+* Commit messages should be in the imperative voice ("When applied, this commit will: ").
+* The working language for this repository is english.
+### Code style
+* Tabs for indentations, spaces for word separation
+* Lines may not end in spaces or tabs
+* There should be no two consecutive spaces (or spaces intermixed with tabs)
+* There should be no two consecutive newlines
+* All symbol names in `snake_case` except where mandated by external interfaces
+* When possible, prefix symbol names with their "namespace" (ie. the relevant section or module name)
+* Variables should be appropriately named for what they do
+ * The name length should be (positively) correlated with usage
+ * Loop counters may be one-character letters
+ * Prefer to name unsigned loop counters `u` and signed ones `i`
+#### C specific
+* Prefer lazy designated initializers to `memset()`
+* Avoid `atoi`/`itoa`, use `strto[u]l[l]()` and `snprintf()`
+## Architecture