Merge in DNS/adguard-home from 2271-cover-with-tests to master Updates #2271. Squashed commit of the following: commit db6440efe05171bc15367a2996521848ca348053 Merge: db7fa726bbf4c256c7
Author: Eugene Burkov <e.burkov@adguard.com> Date: Mon Nov 16 19:23:09 2020 +0300 Merge branch 'master' into 2271-cover-with-tests commit db7fa726bb91b08ec7aaa6c0c818c88b5feb87cd Author: Eugene Burkov <e.burkov@adguard.com> Date: Mon Nov 16 18:26:51 2020 +0300 all: clean dependencies sum commit b8dc6078c4bcc0de1b7e9073832de122f6fe38a4 Author: Eugene Burkov <e.burkov@adguard.com> Date: Mon Nov 16 16:46:00 2020 +0300 testutil: improve code quality commit 001b7194682b1f00aa54dc5a28236faed5a5b02d Author: Eugene Burkov <e.burkov@adguard.com> Date: Mon Nov 16 16:29:49 2020 +0300 testutil: enhance functionality commit f6ccd91a4df6c56778eab8ae50e88e3818b20dd3 Merge: 43fa2eefb6358240e9
Author: Eugene Burkov <e.burkov@adguard.com> Date: Mon Nov 16 15:57:37 2020 +0300 Merge branch 'master' into 2271-cover-with-tests commit 43fa2eefbc10ef361603cacc1ca12092b12a057a Author: Eugene Burkov <e.burkov@adguard.com> Date: Mon Nov 16 14:55:15 2020 +0300 querylog: replace fake log with real in tests commit b95bee7565a14a02c80c78131b3ced224663dd8a Author: Eugene Burkov <e.burkov@adguard.com> Date: Mon Nov 16 12:38:59 2020 +0300 dnsfilter: replace thoughtless declaration with idiomatic one commit a210b1586092e7ae91a9e67c972fa2d2f6baded6 Author: Eugene Burkov <e.burkov@adguard.com> Date: Fri Nov 13 19:00:25 2020 +0300 all: refresh golibs dependencies commit 4ff97bd1ade6c80e274ff5716e44df4eba55bdd9 Author: Eugene Burkov <e.burkov@adguard.com> Date: Fri Nov 13 18:38:47 2020 +0300 all: remove std log commit 542dbda10fefce9f46d15489712b163d919b1291 Author: Eugene Burkov <e.burkov@adguard.com> Date: Fri Nov 13 13:46:39 2020 +0300 querylog: improve test logic and readability commit 796d402385925e8e62a1b4c7bf56e4ceec22418c Author: Eugene Burkov <e.burkov@adguard.com> Date: Thu Nov 12 19:06:42 2020 +0300 all: improve code quality commit e81894c11ef15b0453e8e5297f1349936a32f9dd Author: Eugene Burkov <e.burkov@adguard.com> Date: Thu Nov 12 18:32:30 2020 +0300 all: cover with tests commit 252d81fc8a50a91b02cf0f6f35cc22178a2a4d90 Author: Eugene Burkov <e.burkov@adguard.com> Date: Thu Nov 12 17:32:01 2020 +0300 all: cover with tests
4.0 KiB
AdGuardHome Developer Guidelines
As of 2020-11-12, this document is still a work-in-progress. Some of the rules aren't enforced, and others might change. Still, this is a good place to find out about how we want our code to look like.
Git
-
Follow the commit message header format:
pkg: fix the network error logging issue
Where
pkg
is the package where most changes took place. If there are several such packages, just writeall
. -
Keep your commit messages to be no wider than eighty (80) columns.
-
Only use lowercase letters in your commit message headers.
Go
-
Avoid
init
and use explicit initialization functions instead. -
Avoid
new
, especially with structs. -
Document everything, including unexported top-level identifiers, to build a habit of writing documentation.
-
Don't put variable names into any kind of quotes.
-
Don't use naked
return
s. -
Don't use underscores in file and package names, unless they're build tags or for tests. This is to prevent accidental build errors with weird tags.
-
Don't write code with more than four (4) levels of indentation. Just like Linus said, plus an additional level for an occasional error check or struct initialization.
-
Eschew external dependencies, including transitive, unless absolutely necessary.
-
No
goto
. -
No shadowing, since it can often lead to subtle bugs, especially with errors.
-
Prefer constants to variables where possible. Reduce global variables. Use constant errors instead of
errors.New
. -
Put comments above the documented entity, not to the side, to improve readability.
-
Use
gofumpt --extra -s
.TODO(a.garipov): Add to the linters.
-
Use linters.
-
Use named returns to improve readability of function signatures.
-
When a method implements an interface, start the doc comment with the standard template:
// Foo implements the Fooer interface for *foo. func (f *foo) Foo() { // … }
-
Write logs and error messages in lowercase only to make it easier to
grep
logs and error messages without using the-i
flag. -
Write slices of struct like this:
ts := []T{{ Field: Value0, // … }, { Field: Value1, // … }, { Field: Value2, // … }}
Text, Including Comments
-
Text should wrap at eighty (80) columns to be more readable, to use a common standard, and to allow editing or diffing side-by-side without wrapping.
The only exception are long hyperlinks.
-
Use U.S. English, as it is the most widely used variety of English in the code right now as well as generally.
-
Use double spacing between sentences to make sentence borders more clear.
-
Use the serial comma (a.k.a. Oxford comma) to improve comprehension, decrease ambiguity, and use a common standard.
-
Write todos like this:
// TODO(usr1): Fix the frobulation issue.
Or, if several people need to look at the code:
// TODO(usr1, usr2): Fix the frobulation issue.
Markdown
- TODO(a.garipov): Define our Markdown conventions.
YAML
-
TODO(a.garipov): Find a YAML formatter or write our own.
-
All strings, including keys, must be quoted. Reason: the NO-rway Law.
-
Indent with two (2) spaces.
-
No extra indentation in multiline arrays:
'values': - 'value-1' - 'value-2' - 'value-3'
-
Prefer single quotes for string to prevent accidental escaping, unless escaping is required.