aboutsummaryrefslogtreecommitdiff
path: root/contrib/style.txt
blob: ea8bfeba4977d9fdd98ec322fb14bd4e5d8d6b30 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
TypeScript style
================

Basics:
- Indent with 2 spaces.
- Keep a maximum line length of 120 characters.
- Prefer "double quotes" for strings.
- Never omit optional semicolons.
- Do not put opening braces or brackets on a new line.
- Call functions without spaces: foo(bar)
- Use 'let' instead of 'var' whenever possible.
- Declare "use strict;".
- Use rocket (=>) syntax for anonymous functions.  If an anonymous function is
  too long, make it a named function.
- Use the strict equality operator (===).
- Document functions with JSDoc comments (http://usejsdoc.org).


JavaScript version:
Stick to ES6 features.  Do not rely on any vendor-specific extensions (such as
Firefox often offers).  ES6 features not yet supported by major browsers are
okay as long as there is a well-supported and reasonable polyfill (such as
babel) available.


Names:
- Use PascalCase for classes/types, camelCase for variables, functions and
  properties, UPPER_SNAKE_CASE for constants, kebab-case for event names.
- Only capitalize the first letter of an acronym in identifiers (e.g. HttpResponseCode).


APIs:
- Prefer 'Promise' to one-shot continuations whenever possible.
- Prefer handlebars templates to poking around in the DOM.


Dependency Injection (DI):
DI is a useful pattern when components need to be replaced by mocks or have
multiple co-existing implementations.  But DI also makes code overly generic,
bureaucratic and less readable.  Only use DI if there is a definite need for it,
do not use it by default.  Inject individual dependencies via class
constructors and avoid service locators.


Misc:
- Do not use ES6 template strings for constructing HTML,
  use TSX/JSX literals instead.
- For everything not covered here, stick to this style guide:
  https://github.com/airbnb/javascript.