project: rewrite HACKING guides
Now I don't have to pass all this tribal knowledge every single time.
This commit is contained in:
@@ -1,30 +0,0 @@
|
|||||||
Code formating and ordering
|
|
||||||
===========================
|
|
||||||
|
|
||||||
+ The source file will keep and order of methods. The order will be as
|
|
||||||
following:
|
|
||||||
1. Private functions
|
|
||||||
2. vfuncs implementations
|
|
||||||
3. interface init
|
|
||||||
4. class_init and init
|
|
||||||
5. Public API will go in the end
|
|
||||||
|
|
||||||
+ Methods naming will be according to:
|
|
||||||
1. Private methods will have no prefix
|
|
||||||
2. vfuncs and public API will have the right prefix
|
|
||||||
|
|
||||||
+ The methods prototype will always be placed at the top of the source, in the
|
|
||||||
same order as their implementation below.
|
|
||||||
|
|
||||||
+ Lines will have 120 chars of width. I've been to long of just 80
|
|
||||||
|
|
||||||
+ Line splitting will work accordingly to Gtk+ code style, adding the following:
|
|
||||||
1. Pure mathematic calculation can extend over the 120 pixel line
|
|
||||||
|
|
||||||
Contributing guidelines
|
|
||||||
=======================
|
|
||||||
|
|
||||||
+ Fill a bug, attach a patch, wait for review (ping the maintainers if you think
|
|
||||||
we took too long)
|
|
||||||
+ If you patch touch any Meson-related files at all in any non trivial way,
|
|
||||||
ensure **make distcheck** pass before posting the patch
|
|
||||||
+138
@@ -0,0 +1,138 @@
|
|||||||
|
# Style
|
||||||
|
|
||||||
|
GNOME Calendar has a coding style based on GTK Coding Style, but with a few more
|
||||||
|
rules. Please read them carefully and, if in doubt, ask a maintainer for directions.
|
||||||
|
|
||||||
|
## General
|
||||||
|
|
||||||
|
The most important rule is: **see the surrounding code, and copy its style**.
|
||||||
|
|
||||||
|
Another rule that applies to function declarations is that all parameters are
|
||||||
|
aligned by the last '*'. There are plenty of examples below.
|
||||||
|
|
||||||
|
## Header (.h) files
|
||||||
|
|
||||||
|
* The '*' and the type come together, without any spaces in between.
|
||||||
|
* Function name starts at column 22.
|
||||||
|
* Parenthesis after function name is at column 66
|
||||||
|
* The last '*' in parameters are at column 86
|
||||||
|
|
||||||
|
As an example, this is how a function should look like:
|
||||||
|
|
||||||
|
```c
|
||||||
|
GcalManager* gcal_manager_foo_bar (GcalManager *self,
|
||||||
|
GError **example);
|
||||||
|
```
|
||||||
|
|
||||||
|
## Source code
|
||||||
|
|
||||||
|
The source file keeps an order of methods. The order will be as following:
|
||||||
|
|
||||||
|
1. GPL header
|
||||||
|
2. Structures
|
||||||
|
3. Function prototypes
|
||||||
|
4. G_DEFINE_TYPE()
|
||||||
|
5. Enums
|
||||||
|
6. Static variables
|
||||||
|
7. Auxiliary methods
|
||||||
|
8. Signal callbacks
|
||||||
|
9. Interface implementations
|
||||||
|
10. Parent class overrides
|
||||||
|
11. class_init and init
|
||||||
|
12. Public API
|
||||||
|
|
||||||
|
### Structures
|
||||||
|
|
||||||
|
The structures must have the last pointer asterisk at column 22. Non-pointer fields
|
||||||
|
start at column 23. For example:
|
||||||
|
|
||||||
|
```c
|
||||||
|
struct _GcalQuickAddPopover
|
||||||
|
{
|
||||||
|
GtkPopover parent;
|
||||||
|
|
||||||
|
GtkWidget *add_button;
|
||||||
|
GtkWidget *calendars_listbox;
|
||||||
|
GtkWidget *calendar_name_label;
|
||||||
|
GtkWidget *color_image;
|
||||||
|
GtkWidget *stack;
|
||||||
|
GtkWidget *summary_entry;
|
||||||
|
GtkWidget *title_label;
|
||||||
|
|
||||||
|
/* Internal data */
|
||||||
|
GDateTime *date_start;
|
||||||
|
GDateTime *date_end;
|
||||||
|
|
||||||
|
GtkWidget *selected_row;
|
||||||
|
|
||||||
|
gboolean clock_format_24h;
|
||||||
|
|
||||||
|
GcalManager *manager;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
### Function Prototypes
|
||||||
|
|
||||||
|
Function prototypes must be formatted just like in header files.
|
||||||
|
|
||||||
|
### Auxiliary Methods
|
||||||
|
|
||||||
|
Auxiliary method names must have a verb in the dictionary form, and should always
|
||||||
|
perform an action over something. They don't have the gcal_foo prefix. For example:
|
||||||
|
|
||||||
|
```c
|
||||||
|
static void
|
||||||
|
do_something_on_data (Foo *data,
|
||||||
|
Bar *bar)
|
||||||
|
{
|
||||||
|
/* ... */
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Signal Callbacks
|
||||||
|
|
||||||
|
Signal callback names must have the name of the signal in the past. They don't have
|
||||||
|
the gcal_foo prefix as well, but have a _cb suffix. For example:
|
||||||
|
|
||||||
|
```c
|
||||||
|
static void
|
||||||
|
size_allocated_cb (GtkWidget *widget,
|
||||||
|
GtkAllocation *allocation,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
/* ... */
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Line Splitting
|
||||||
|
|
||||||
|
Line splitting works following the GTK code style, but legibility comes over above
|
||||||
|
all. If a function call looks unbalanced following the GTK style, it is fine to
|
||||||
|
slightly escape the rules.
|
||||||
|
|
||||||
|
For example, this feels extremelly unbalanced:
|
||||||
|
|
||||||
|
```c
|
||||||
|
foo_bar_do_somthing_sync (a,
|
||||||
|
1,
|
||||||
|
object,
|
||||||
|
data,
|
||||||
|
something
|
||||||
|
cancellable,
|
||||||
|
&error);
|
||||||
|
```
|
||||||
|
|
||||||
|
Notice the empty space before the arguments, and how empty and odd it looks. In
|
||||||
|
comparison, it will look better if written like this:
|
||||||
|
|
||||||
|
```c
|
||||||
|
foo_bar_do_somthing_sync (a, 1, object, data,
|
||||||
|
something
|
||||||
|
cancellable,
|
||||||
|
&error);
|
||||||
|
```
|
||||||
|
|
||||||
|
# Contributing guidelines
|
||||||
|
|
||||||
|
See CONTRIBUTIONS.md file for the contribution guidelines, and the Code of Conduct
|
||||||
|
that contributors are expected to follow.
|
||||||
Reference in New Issue
Block a user