Changes between Version 17 and Version 18 of Development/CodeConventions
- Timestamp:
- 03/16/10 07:03:41 (3 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Development/CodeConventions
v17 v18 10 10 == General Rules for all Languages == 11 11 12 === Spacing === 12 13 * Tabs are 8 spaces. The reason being that when you `cat` a text file to a unix console they come out as 8 spaces. No further discussion will be entered into on this point. 13 14 14 15 * We prefer literal tabs at the start of lines instead of hard spaces. 15 16 17 18 === Comments === 16 19 * Each top-level definition should have a comment explaining what it is for. One liners are fine. 17 20 18 21 * Running comments in the bodies of functions are encouraged. Write down what you were expecting the code to do when you wrote it, so it reads like a story. Aim for 1 comment line every 5-10 code lines, depending on how complex the code is. This level of commenting would be overkill for a cookie-cutter program like a database GUI, but compilers are a completely different beast. For `n` lines of code there are potentially `n^2` bugs (at least), so we want to know exactly what each line is trying to achieve. 19 22 23 * All top-level bindings should have a type signature. Exceptions can be made for functions that are continuations of others, as they will never need to be called from outside the module they are defined in. 24 25 === Layout === 20 26 * If a function does several things in a regular way, then it should look like that in the source code. This means you should line up arguments to similar function calls. For example, use this: 21 27 {{{ … … 32 38 }}} 33 39 34 * All top-level bindings should have a type signature. Exceptions can be made for functions that are continuations of others, as they will never need to be called from outside the module they are defined in.35 40 41 42 === Naming === 36 43 * Name conversion functions like ` globOfTops :: [Top] -> Glob ` instead of ` topsToGlob :: [Top] -> Glob`. The type may be the opposite way around compared to the name, but it makes the source code easier to read. Consider ` (globOfTops someTops) ` vs ` (topsToGlob someTops)`. 37 44 38 45 * If part of a variable name reflects its type, then put that part out the front. For example, source code variables of type `Shared.Var` should be named something like `vThing`, with a `v` out the front. Sets or lists of variables should be named `vsThing` with `vs` out the front. Avoid using names like `thingVar` and `thingVars`. 46 47 === Structure === 48 * Keep the sizes of the modules small. If a module has more than about 400 lines then consider breaking it up. Modules with just 100 lines are fine. Using small modules makes them easier to digest, forces you to think about the overall structure of the code, and helps parallel builds. 49 39 50 40 51 [[br]]
