Imported Upstream version 1.46.0
[platform/upstream/nghttp2.git] / third-party / mruby / CONTRIBUTING.md
1 # How to contribute
2
3 mruby is an open-source project which is looking forward to each contribution.
4
5 ## Your Pull Request
6
7 To make it easy to review and understand your change please keep the following
8 things in mind before submitting your pull request:
9
10 * Work on the latest possible state of **mruby/master**
11 * Create a branch which is dedicated to your change
12 * Test your changes before creating a pull request (```rake test```)
13 * If possible write a test case which confirms your change
14 * Don't mix several features or bug-fixes in one pull request
15 * Create a meaningful commit message
16 * Explain your change (i.e. with a link to the issue you are fixing)
17 * Use mrbgem to provide non ISO features (classes, modules and methods) unless
18   you have a special reason to implement them in the core
19
20 ## Coding conventions
21
22 How to style your C and Ruby code which you want to submit.
23
24 ### C code
25
26 The core part (parser, bytecode-interpreter, core-lib, etc.) of mruby is
27 written in the C programming language. Please note the following hints for your
28 C code:
29
30 #### Comply with C99 (ISO/IEC 9899:1999)
31
32 mruby should be highly portable to other systems and compilers. For this it is
33 recommended to keep your code as close as possible to the C99 standard
34 (http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf).
35
36 Although we target C99, we've heard some compilers in the embedded environment
37 still requires declarations of local variables to be at the beginning of a
38 scope. Until we confirm the situation has changed, we use the old-style
39 variable declaration.
40
41 Visual C++ is also an important target for mruby (supported version is 2013 or
42 later). For this reason features that are not supported by Visual C++ may not
43 be used (e.g. `%z` of `strftime()`).
44
45 NOTE: Old GCC requires `-std=gnu99` option to enable C99 support.
46
47 #### Reduce library dependencies to a minimum
48
49 The dependencies to libraries should be kept to an absolute minimum. This
50 increases the portability but makes it also easier to cut away parts of mruby
51 on-demand.
52
53 #### Don't use C++ style comments
54
55     /* This is the preferred comment style */
56
57 Use C++ style comments only for temporary comment e.g. commenting out some code lines.
58
59 #### Insert a break after the method return value:
60
61     int
62     main(void)
63     {
64       ...
65     }
66
67 ### Ruby code
68
69 Parts of the standard library of mruby are written in the Ruby programming
70 language itself. Please note the following hints for your Ruby code:
71
72 #### Comply with the Ruby standard (ISO/IEC 30170:2012)
73
74 mruby is currently targeting to execute Ruby code which complies to ISO/IEC
75 30170:2012 (http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=59579).