changelog shortlog graph tags branches changeset files file revisions raw help

Mercurial > org > meta / annotate style.org

changeset 1: d119ae1ce0d5
parent: e8da1c55dcbe
child: a4e233714062
author: Richard Westhaver <ellis@rwest.io>
date: Sun, 11 Aug 2024 14:47:55 -0400
permissions: -rw-r--r--
description: ulang
0
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
1
 #+title: The Compiler Company Styleguide
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
2
 #+author: Richard Westhaver
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
3
 #+email: ellis@rwest.io
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
4
 #+setupfile: ../../clean.theme
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
5
 As an organization we maintain a styleguide[fn:1] which lists all of
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
6
 the style guidelines we use for our code. If you are contributing to
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
7
 one of our projects, you should review and understand the relevant
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
8
 sections below.
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
9
 
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
10
 You should also review the [[file:ulang.org][ulang]] document, which may shine some light
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
11
 on code comments and developer docs.
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
12
 
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
13
 [fn:1] https://google.github.io/styleguide/ 
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
14
 
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
15
 * General Programming
1
Richard Westhaver <ellis@rwest.io>
parents: 0
diff changeset
16
 :PROPERTIES:
Richard Westhaver <ellis@rwest.io>
parents: 0
diff changeset
17
 :ID:       5cee979a-3732-45ed-87f5-cadf591cac42
Richard Westhaver <ellis@rwest.io>
parents: 0
diff changeset
18
 :END:
0
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
19
 - indent-offset = 2
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
20
 - max-line-width = 80
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
21
 - page-length ~ 32
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
22
 - module-length ~ 512
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
23
 - file-size ~ 1024
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
24
 
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
25
 - start every source-file with a header comment
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
26
 - use outline headings to organize your program
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
27
 - use ulang-comments as needed for referencing bugs, notes, etc.
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
28
 - inline documentation should be declarative. your code explains your
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
29
   comments for you.
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
30
 - variables, imports, and exports belong at the top of a file
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
31
 - =main= functions belong at the bottom of a file
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
32
 - use LSP wherever possible (eglot, slime)
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
33
 * Common Lisp
1
Richard Westhaver <ellis@rwest.io>
parents: 0
diff changeset
34
 :PROPERTIES:
Richard Westhaver <ellis@rwest.io>
parents: 0
diff changeset
35
 :ID:       d4c25810-ce35-411e-a371-67ab7e814260
Richard Westhaver <ellis@rwest.io>
parents: 0
diff changeset
36
 :END:
0
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
37
 - prefer symbol docs to comments
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
38
 - use stdin/stdout/stderr correctly - see [[https://zenodo.org/records/3414191][CDR-11]]
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
39
 - always prefer =core= libraries over vendored dependencies
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
40
 - use the compiler built-ins - if a function or class is generally
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
41
   useful, add it to the core
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
42
 - use conditions, restarts, and error handling where appropriate
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
43
 - save type declarations and hairy optimizations for when the API is
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
44
   polished
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
45
 - don't be afraid of macros
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
46
 ** Systems
1
Richard Westhaver <ellis@rwest.io>
parents: 0
diff changeset
47
 :PROPERTIES:
Richard Westhaver <ellis@rwest.io>
parents: 0
diff changeset
48
 :ID:       2a323c4c-362c-429f-9849-587e2a7311f5
Richard Westhaver <ellis@rwest.io>
parents: 0
diff changeset
49
 :END:
0
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
50
 - define systems using keyword symbols
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
51
 - use slash instead of dash for path separation in system names: =:foo/bar=
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
52
 - define your test system in the same file with a name of: =:foo/tests=
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
53
 - where possible, avoid collisions with systems in Quicklisp
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
54
 ** Packages
1
Richard Westhaver <ellis@rwest.io>
parents: 0
diff changeset
55
 :PROPERTIES:
Richard Westhaver <ellis@rwest.io>
parents: 0
diff changeset
56
 :ID:       f735b4b5-4818-408b-a244-e2fb506c7ded
Richard Westhaver <ellis@rwest.io>
parents: 0
diff changeset
57
 :END:
0
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
58
 - declare packages in a file named =pkg.lisp=
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
59
 - when multiple packages are being declared, consider a wrapper
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
60
   package
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
61
   - declare with ~UIOP:DEFINE-PACKAGE~ and ~:USE-REEXPORT~
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
62
 - package names are either the same as their system name or have the
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
63
   system name as their root path.
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
64
 - use ~:NICKNAMES~ to declare alternative names for your package
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
65
 ** CLOS
1
Richard Westhaver <ellis@rwest.io>
parents: 0
diff changeset
66
 :PROPERTIES:
Richard Westhaver <ellis@rwest.io>
parents: 0
diff changeset
67
 :ID:       5068e164-764a-4843-be8f-126754938ef9
Richard Westhaver <ellis@rwest.io>
parents: 0
diff changeset
68
 :END:
0
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
69
 - prefer =:default-initargs= over =:initform=.
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
70
 * Rust
1
Richard Westhaver <ellis@rwest.io>
parents: 0
diff changeset
71
 :PROPERTIES:
Richard Westhaver <ellis@rwest.io>
parents: 0
diff changeset
72
 :ID:       8e414073-36b6-45d4-9a11-e6de8a0a65e9
Richard Westhaver <ellis@rwest.io>
parents: 0
diff changeset
73
 :END:
0
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
74
 - always prefer =core= libraries to vendored dependencies
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
75
 - don't make =mod.rs= files
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
76
   - use the =foo.rs=, =foo/*= pattern instead
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
77
 - derive =Debug= and =Clone= always
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
78
 - write a sensible =Display= impl
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
79
 - derive default methods for =Default=, =Hash=, =Copy=, etc where possible
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
80
 - use generics where appropriate: =foo<P:AsRef<Path>>(path:P){p.as_ref();}=
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
81
 * Emacs Lisp
1
Richard Westhaver <ellis@rwest.io>
parents: 0
diff changeset
82
 :PROPERTIES:
Richard Westhaver <ellis@rwest.io>
parents: 0
diff changeset
83
 :ID:       8b17f8a3-74f2-44cd-a5ce-7df540e2544c
Richard Westhaver <ellis@rwest.io>
parents: 0
diff changeset
84
 :END:
0
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
85
 * Org-mode
1
Richard Westhaver <ellis@rwest.io>
parents: 0
diff changeset
86
 :PROPERTIES:
Richard Westhaver <ellis@rwest.io>
parents: 0
diff changeset
87
 :ID:       ea4fa698-7a46-46d6-a7a0-5b497119edf2
Richard Westhaver <ellis@rwest.io>
parents: 0
diff changeset
88
 :END:
0
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
89
 * Shell
1
Richard Westhaver <ellis@rwest.io>
parents: 0
diff changeset
90
 :PROPERTIES:
Richard Westhaver <ellis@rwest.io>
parents: 0
diff changeset
91
 :ID:       10904e36-e4ac-4841-b602-d4dc68a54c71
Richard Westhaver <ellis@rwest.io>
parents: 0
diff changeset
92
 :END:
0
e8da1c55dcbe init meta
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
93
 * Python
1
Richard Westhaver <ellis@rwest.io>
parents: 0
diff changeset
94
 :PROPERTIES:
Richard Westhaver <ellis@rwest.io>
parents: 0
diff changeset
95
 :ID:       5b402ced-2329-4a16-b512-76859157a9d6
Richard Westhaver <ellis@rwest.io>
parents: 0
diff changeset
96
 :END: