diff --git a/STYLEGUIDE b/STYLEGUIDE index 98e39c1..bbb7560 100644 --- a/STYLEGUIDE +++ b/STYLEGUIDE @@ -2,10 +2,7 @@ Style Guide ----------- -This document serves as a loose style guide for the repo. -Generally, you should write code that follows the local -style of the file you're in, however, there are a few -conventions to keep in mind. +This document outlines repo conventions and code style. Getting Paid @@ -26,18 +23,43 @@ message should only say 'finish [id]'. Author: Your Name start 034 - + // Intermediate commits commit SOME HASH Author: Your Name Blah blah blah - + // Final commit commit SOME HASH Author: Your Name - finish 034 + finish 034 + + +Code Style +---------- + +Generally, I don't care what style of code is used. It's +more important that you stay in line with the local style +of the file you're in. + +Things I actually care about: + + - Don't be clever. Write code that does the job; + nothing more, nothing less. + + - Comment your code. I very much disagree with the + premise that code is self-documenting. Take a step + back and write a comment (with your name) that + explains *why* you're doing *what* you're doing. + Please try to stick to this format: + @note, @todo, @temp, @allocates, @leak + + - Descriptive names. In general, it's fine to use short + names for local variables. However, you should + almost always opt for longer, more descriptive names + in every other context. Imports @@ -49,16 +71,16 @@ standalone library that doesn't rely on compiler-shipped modules (unless absolutely required). basic :: #import "Basic"; - + When importing 'jc' modules, ALWAYS namespace them and use absolute import paths. '#import,file' does not function the same as '#import' and causes issues when mixed with '#load'. '_run_all_tests.jai' is an exception to this rule. - + math :: #import "jc/math"; - - + + Modules ------- @@ -72,14 +94,31 @@ When authoring a new module, use this as a base plate: // Within module_name/module.jai #module_parameters(RUN_TESTS := false); // Should be the last parameter if others are required - + #load "file_a.jai"; #load "file_b.jai"; - + #if RUN_TESTS { test :: #import "jc/test"; } - + + +Bindings +-------- + +Binding modules should default to static linking and take +an optional '#module_parameter' to link dynamically. +Libraries should be pinned to a specific version, and all +binaries (.dll, .dylib, etc.) *must* be checked into +source control. If possible, use the release build of the +library that includes debug information. + +Bindings should stay as close as possible to the original +library. To jai-ify the bindings, create a submodule +called 'wrapper' that import and wraps the api. + +See: 'thirdparty/raylib' for example bindings. + OS-Specific Code ---------------- @@ -94,7 +133,7 @@ switch statement over multiple files. case .LINUX; case; #assert false, "unimplemented platform"; } - + If multiple files are required, use these file suffixes and conditionally '#load' them based on 'OS'.