# Style guide ## Panics Panics are not allowed, especially in code that may run on a server. Calling `.unwrap()` is okay if it's guaranteed to be safe by previous checks or documented invariants. For example, if a function is documented as requiring a non-empty slice as input, it's fine to call `slice[0]` and panic. ## Markdown Try to wrap at 80 columns. We don't have a formatter yet. ## Prefer lower-level tests to end-to-end tests When possible, prefer lower-level tests that don't use the `jj` binary. End-to-end tests are much slower than similar tests that create a repo using `jj-lib` (roughly 100x slower). It's also often easier to test edge cases in lower-level tests. It can still be useful to add a test case or two to check that the lower-level functionality is correctly hooked up in the CLI. For example, the end-to-end tests for `jj log` don't need to test that all kinds of revsets are evaluated correctly (we have tests in `jj-lib` for that), but they should check that the `-r` flag is respected. Use end-to-end tests for testing the CLI commands themselves.