# Style Guide

We use the GTK style by default.

## Random Style hints
* Declare variables at the top of the scope, in order they're used.
* Always use `g_autofree` and `g_autoptr` where possible. Do one per
  line, and make sure it's initialized to NULL.
* Include the minimum number of header files, and list them in
  alphabetical order

## FIXME messages

If you're going to leave a FIXME in the code, please put the domain in
parens. That make it easy to grep for all common areas that may need
fixing. As an example:

``` /* FIXME(css): This color is hardcoded and should be loaded from the .css file */```C

We don't use TODO or have a TODO.md file. Please file bugs for all
other issues.

Common FIXME domain reminders:
* *error*: an unhandled error, that probably needs a better message to
  the user than a g_warning.
* *refactor*: clean up an egregiously messy area of code
* *optimization*: a chunk of code is unnecessarily slow/big
* *css*: Something that should be moved to be a CSS setting
* *gtk/adwaita/libfoo*: Work around for an issue in a
  dependency. Often includes the version number it was fixed or
  introduced.
* *magichars*: A hardcoded constant in the code, that should be
  centralized or made configurable
* *mystery*: Something we don't understand in the code and couldn't
  figure out.

## Glossary

* **puzzle_id**: Identifier of puzzles in resources. This starts at 1
  instead of 0
