changelog shortlog graph tags branches changeset files file revisions raw help

Mercurial > org > docs / annotate meta/style.org

changeset 14: de53155af111
parent: 9a3d82d9072a
child: 46fb6a10d2e1
author: ellis <ellis@rwest.io>
date: Sun, 17 Dec 2023 23:28:53 -0500
permissions: -rw-r--r--
description: migrated from core
9
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
1
 {{{header(style,
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
2
 Richard Westhaver,
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
3
 ellis@rwest.io,
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
4
 The Compiler Company Styleguide)}}}
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
5
 
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
6
 As an organization we maintain a styleguide[fn:1] which lists all of
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
7
 the style guidelines we use for our code. If you are contributing to
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
8
 one of our projects, you should review and understand the relevant
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
9
 sections below.
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
10
 
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
11
 You should also review the [[file:ulang.org][ulang]] document, which may shine some light
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
12
 on code comments and developer docs.
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
13
 
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
14
 [fn:1] https://google.github.io/styleguide/ 
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
15
 
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
16
 * General Programming
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
17
 - indent-offset = 2
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
18
 - max-line-width = 80
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
19
 - page-length ~ 32
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
20
 - module-length ~ 512
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
21
 - file-size ~ 1024
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
22
 
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
23
 - start every source-file with a header comment
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
24
 - use outline headings to organize your program
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
25
 - use ulang-comments as needed for referencing bugs, notes, etc.
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
26
 - inline documentation should be declarative. your code explains your
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
27
   comments for you.
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
28
 - variables, imports, and exports belong at the top of a file
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
29
 - =main= functions belong at the bottom of a file
14
de53155af111 migrated from core
ellis <ellis@rwest.io>
parents: 9
diff changeset
30
 - use LSP wherever possible (eglot, slime)
9
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
31
 * Common Lisp
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
32
 - prefer symbol docs to comments
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
33
 - use stdin/stdout/stderr correctly - see [[https://zenodo.org/records/3414191][CDR-11]]
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
34
 - always prefer =core= libraries over vendored dependencies
14
de53155af111 migrated from core
ellis <ellis@rwest.io>
parents: 9
diff changeset
35
 - use the compiler built-ins - if a function or class is generally
9
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
36
   useful, add it to the core
14
de53155af111 migrated from core
ellis <ellis@rwest.io>
parents: 9
diff changeset
37
 - use conditions, restarts, and error handling where appropriate
de53155af111 migrated from core
ellis <ellis@rwest.io>
parents: 9
diff changeset
38
 - save type declarations and hairy optimizations for when the API is
de53155af111 migrated from core
ellis <ellis@rwest.io>
parents: 9
diff changeset
39
   polished
de53155af111 migrated from core
ellis <ellis@rwest.io>
parents: 9
diff changeset
40
 - don't be afraid of macros
9
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
41
 * Rust
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
42
 - don't make =mod.rs= files
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
43
   - use the =foo.rs=, =foo/*= pattern instead
14
de53155af111 migrated from core
ellis <ellis@rwest.io>
parents: 9
diff changeset
44
 - derive =Debug= and =Clone= wherever possible
de53155af111 migrated from core
ellis <ellis@rwest.io>
parents: 9
diff changeset
45
 - write a sensible =Display= impl
de53155af111 migrated from core
ellis <ellis@rwest.io>
parents: 9
diff changeset
46
 - use generics where appropriate: =foo<P:AsRef<Path>>(path:P){p.as_ref();}=
9
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
47
 * Emacs Lisp
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
48
 * Org-mode
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
49
 * Shell
9a3d82d9072a refactoring
ellis <ellis@rwest.io>
parents:
diff changeset
50
 * Python