Mercurial > template
annotate STYLE.md @ 32:651aee870e36
Add paragraph about std::string_view
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 18 Jul 2018 13:55:49 +0200 |
parents | 5ea2876ac37a |
children | 793a60620477 |
rev | line source |
---|---|
17
314e8bb2659a
Rename STYLE_CPP.md to STYLE.md
David Demelier <markand@malikania.fr>
parents:
16
diff
changeset
|
1 PROJECT NAME CODING STYLE |
314e8bb2659a
Rename STYLE_CPP.md to STYLE.md
David Demelier <markand@malikania.fr>
parents:
16
diff
changeset
|
2 ========================= |
314e8bb2659a
Rename STYLE_CPP.md to STYLE.md
David Demelier <markand@malikania.fr>
parents:
16
diff
changeset
|
3 |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
4 General |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
5 ======= |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
6 |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
7 - Always use 4 spaces as indentation (expect Makefiles), |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
8 - Use UTF-8 charset, |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
9 - Use Unix line endings, |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
10 - Never write two blank consecutives blank lines, |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
11 |
17
314e8bb2659a
Rename STYLE_CPP.md to STYLE.md
David Demelier <markand@malikania.fr>
parents:
16
diff
changeset
|
12 C++ |
314e8bb2659a
Rename STYLE_CPP.md to STYLE.md
David Demelier <markand@malikania.fr>
parents:
16
diff
changeset
|
13 === |
0 | 14 |
15 Style | |
16 ----- | |
17 | |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
18 - Do not exceed 120 characters for lines of code, |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
19 - Do not exceed 80 characters for comments, |
0 | 20 |
21 ### Braces | |
22 | |
23 Braces follow the K&R style, they are never placed on their own lines except for | |
24 function definitions. | |
25 | |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
26 Do not put braces for single line statements. |
10 | 27 |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
28 ```cpp |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
29 if (condition) { |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
30 apply(); |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
31 add(); |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
32 } else |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
33 ok(); |
10 | 34 |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
35 if (condition) |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
36 validate(); |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
37 |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
38 if (foo) |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
39 state = long + conditional + that + requires + several + lines + |
10 | 40 to + complete; |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
41 ``` |
0 | 42 |
10 | 43 Functions require braces on their own lines. |
44 | |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
45 ```cpp |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
46 void function() |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
47 { |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
48 } |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
49 ``` |
0 | 50 |
51 And a lambda has its braces on the same lines too: | |
52 | |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
53 ```cpp |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
54 sort([&] (auto&) { |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
55 return true; |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
56 }); |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
57 ``` |
0 | 58 |
59 ### Spaces | |
60 | |
61 Each reserved keyword (e.g. `if`, `for`, `while`) requires a single space before | |
62 its argument. | |
63 | |
64 Normal function calls do not require it. | |
65 | |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
66 ```cpp |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
67 if (foo) |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
68 destroy(sizeof (int)); |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
69 ``` |
0 | 70 |
71 ### References and pointers | |
72 | |
73 References and pointers are always next to the type name and not the variable. | |
74 | |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
75 ```cpp |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
76 T& get(const std::string& name); |
0 | 77 |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
78 int* p = &x; |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
79 ``` |
0 | 80 |
81 ### Naming | |
82 | |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
83 - English names, |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
84 - Member variables have trailing underscore (e.g foo\_bar\_), |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
85 - No hungarian notation. |
0 | 86 |
87 Everything is in `underscore_case` except template parameters and macros. | |
88 | |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
89 ```cpp |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
90 #if defined(FOO) |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
91 # include <foo.hpp> |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
92 #endif |
0 | 93 |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
94 namespace baz { |
0 | 95 |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
96 class object { |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
97 private: |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
98 std::string name_; |
0 | 99 |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
100 public: |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
101 inline const std::string& name() const noexcept |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
102 { |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
103 return name_; |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
104 } |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
105 }; |
0 | 106 |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
107 template <typename Archive> |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
108 void open(const Archive& ar) |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
109 { |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
110 bool is_valid = false; |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
111 } |
0 | 112 |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
113 } // !baz |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
114 ``` |
0 | 115 |
116 ### Header guards | |
117 | |
118 Do not use `#pragma once`. | |
119 | |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
120 Header guards are usually named `PROJECT_COMPONENT_FILENAME_HPP`. |
0 | 121 |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
122 ```cpp |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
123 #ifndef FOO_COMMON_UTIL_HPP |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
124 #define FOO_COMMON_UTIL_HPP |
0 | 125 |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
126 #endif // !FOO_COMMON_UTIL_HPP |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
127 ``` |
0 | 128 |
129 ### Enums | |
130 | |
131 Enumerations constants are always defined in separate line to allow commenting | |
132 them as doxygen. | |
133 | |
134 Enum class are encouraged. | |
135 | |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
136 ```cpp |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
137 enum class color { |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
138 blue, |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
139 red, |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
140 green |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
141 }; |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
142 ``` |
0 | 143 |
16
780c138ab41d
Add a note about switch
David Demelier <markand@malikania.fr>
parents:
14
diff
changeset
|
144 ### Switch |
780c138ab41d
Add a note about switch
David Demelier <markand@malikania.fr>
parents:
14
diff
changeset
|
145 |
780c138ab41d
Add a note about switch
David Demelier <markand@malikania.fr>
parents:
14
diff
changeset
|
146 In a switch case statement, you **must** not declare variables and not indent |
780c138ab41d
Add a note about switch
David Demelier <markand@malikania.fr>
parents:
14
diff
changeset
|
147 cases. |
780c138ab41d
Add a note about switch
David Demelier <markand@malikania.fr>
parents:
14
diff
changeset
|
148 |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
149 ```cpp |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
150 switch (variable) { |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
151 case foo: |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
152 do_some_stuff(); |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
153 break; |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
154 default: |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
155 break; |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
156 } |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
157 ``` |
16
780c138ab41d
Add a note about switch
David Demelier <markand@malikania.fr>
parents:
14
diff
changeset
|
158 |
0 | 159 ### Files |
160 | |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
161 - Use `.cpp` and `.hpp` as file extensions, |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
162 - Filenames are all lowercase. |
0 | 163 |
164 ### Comments | |
165 | |
166 Avoid useless comments in source files. Comment complex things or why it is done | |
167 like this. However any public function in the .hpp **must** be documented as | |
168 doxygen without exception. | |
169 | |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
170 ```cpp |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
171 /* |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
172 * Multi line comments look like |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
173 * this. |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
174 */ |
0 | 175 |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
176 // Short comment |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
177 ``` |
0 | 178 |
2 | 179 Use `#if 0` to comment blocks of code. |
180 | |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
181 ```cpp |
2 | 182 #if 0 |
183 broken_stuff(); | |
184 #endif | |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
185 ``` |
2 | 186 |
0 | 187 ### Includes |
188 | |
189 The includes should always come in the following order. | |
190 | |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
191 1. C++ headers |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
192 2. C header |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
193 3. Third party libraries |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
194 4. Application headers in "" |
0 | 195 |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
196 ```cpp |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
197 #include <cstring> |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
198 #include <cerrno> |
0 | 199 |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
200 #include <sys/stat.h> |
0 | 201 |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
202 #include <libircclient.h> |
0 | 203 |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
204 #include "foo.h" |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
205 ``` |
0 | 206 |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
207 Note: always use C++ headers for C equivalent, stdio.h -> cstdio, etc. |
0 | 208 |
209 Programming | |
210 ----------- | |
211 | |
212 ### C language | |
213 | |
214 Do not use old C stuff like `void *`, `srand/rand`, `printf` or anything that | |
215 can be rewritten in modern C++. | |
216 | |
217 ### RTTI | |
218 | |
219 Usage of `dynamic_cast` and `typeid` are completely disallowed in any shape of | |
220 form. | |
221 | |
222 ### Arguments | |
223 | |
224 It is recommended to pass parameters by value or const reference. Usage of | |
225 non-const reference as output parameter is **discouraged** and should be avoided | |
226 in many case because it does not allow chaining of expressions like: | |
227 | |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
228 ```cpp |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
229 std::cout << reverse(upper(clean(" hello world! "))) << std::endl; |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
230 ``` |
0 | 231 |
232 If your function is designed to return a modified value passed as argument, it | |
233 is better to take it by value and modify it directly. | |
234 | |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
235 ```cpp |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
236 std::string clean(std::string input) |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
237 { |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
238 if (!input.empty() && input.back() == '\r') |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
239 input.pop_back(); |
0 | 240 |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
241 return input; |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
242 } |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
243 ``` |
0 | 244 |
245 Never pass primitive types as const value. | |
246 | |
247 ### Assertions | |
248 | |
249 Use the `assert` macro from the cassert header file to verify programming | |
250 errors. | |
251 | |
252 For example, you may use `assert` to verify that the developer access the data | |
253 between the bounds of an array: | |
254 | |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
255 ```cpp |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
256 T& operator[](unsigned index) |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
257 { |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
258 assert(index < length_); |
0 | 259 |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
260 return data_[index]; |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
261 } |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
262 ``` |
0 | 263 |
264 The `assert` macro is not meant to check that a function succeeded, this code | |
265 must not be written that way: | |
266 | |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
267 ```cpp |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
268 assert(listen(10)); |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
269 ``` |
0 | 270 |
271 ### Exceptions | |
272 | |
273 You must use exceptions to indicate an error that was unexpected such as: | |
274 | |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
275 - Failing to open a file, |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
276 - I/O unexpected errors, |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
277 - Parsing errors, |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
278 - User errors. |
0 | 279 |
280 You may use the C++ standard exceptions defined in the stdexcept header but if | |
281 you need to carry more data within your exception, you should derive from | |
282 `std::exception`. | |
283 | |
14
55bb3689093f
Add chapter about error codes
David Demelier <markand@malikania.fr>
parents:
13
diff
changeset
|
284 ### Error code |
55bb3689093f
Add chapter about error codes
David Demelier <markand@malikania.fr>
parents:
13
diff
changeset
|
285 |
55bb3689093f
Add chapter about error codes
David Demelier <markand@malikania.fr>
parents:
13
diff
changeset
|
286 You should not use error codes to indicate errors, instead use exceptions. |
55bb3689093f
Add chapter about error codes
David Demelier <markand@malikania.fr>
parents:
13
diff
changeset
|
287 Error codes are allowed in Boost.Asio though. |
55bb3689093f
Add chapter about error codes
David Demelier <markand@malikania.fr>
parents:
13
diff
changeset
|
288 |
0 | 289 ### Free functions |
290 | |
291 Basic utility functions should be defined in a namespace as a free function not | |
292 as a static member function, we're doing C++ not Java. | |
293 | |
294 Example: | |
295 | |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
296 ```cpp |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
297 namespace util { |
0 | 298 |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
299 std::string clean(std::string input); |
0 | 300 |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
301 } // !util |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
302 ``` |
0 | 303 |
304 ### Variables initialization | |
305 | |
306 Use parentheses to initialize non primitive types: | |
307 | |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
308 ```cpp |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
309 throw std::runtime_error("foo"); |
0 | 310 |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
311 my_class obj("bar"); |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
312 ``` |
0 | 313 |
314 Use brace initialization when you want to use an initializer list, type | |
315 elision: | |
316 | |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
317 ```cpp |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
318 std::vector<int> v{1, 2, 3}; |
0 | 319 |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
320 foo({1, 2}); // type deduced |
0 | 321 |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
322 return { "true", false }; // std::pair returned |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
323 ``` |
0 | 324 |
325 Use the assignment for primitive types: | |
326 | |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
327 ```cpp |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
328 int x = 123; |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
329 bool is_valid = true; |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
330 ``` |
0 | 331 |
332 ### Classes | |
333 | |
334 Classes are usually defined in the following order: | |
335 | |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
336 1. Public inner types (enums, classes), |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
337 2. Protected/private members and functions |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
338 3. Public static functions. |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
339 3. Public member functions |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
340 4. Public virtual functions. |
0 | 341 |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
342 ```cpp |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
343 class foo { |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
344 public: |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
345 enum class type { |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
346 a, |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
347 b |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
348 }; |
0 | 349 |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
350 private: |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
351 int member_{0}; |
0 | 352 |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
353 public: |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
354 void some_function(); |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
355 }; |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
356 ``` |
0 | 357 |
358 ### Structs | |
359 | |
31
5ea2876ac37a
Relax usage of structs
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
360 Use structs for objects that only need to store public data and have no |
5ea2876ac37a
Relax usage of structs
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
361 invariants. For example PODs and traits match this criteria: |
0 | 362 |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
363 ```cpp |
31
5ea2876ac37a
Relax usage of structs
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
364 struct point { |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
365 int x{0}; |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
366 int y{0}; |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
367 }; |
31
5ea2876ac37a
Relax usage of structs
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
368 |
5ea2876ac37a
Relax usage of structs
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
369 template <> |
5ea2876ac37a
Relax usage of structs
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
370 struct info_traits<point> { |
5ea2876ac37a
Relax usage of structs
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
371 template <typename Archive> |
5ea2876ac37a
Relax usage of structs
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
372 static void serialize(Archive& ar, const point& point) |
5ea2876ac37a
Relax usage of structs
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
373 { |
5ea2876ac37a
Relax usage of structs
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
374 ar.write(point.x); |
5ea2876ac37a
Relax usage of structs
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
375 ar.write(point.y); |
5ea2876ac37a
Relax usage of structs
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
376 } |
5ea2876ac37a
Relax usage of structs
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
377 }; |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
378 ``` |
0 | 379 |
380 ### Return | |
381 | |
382 The preferred style is to return early in case of errors. That makes the code | |
383 more linear and not highly indented. | |
384 | |
385 This code is preferred: | |
386 | |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
387 ```cpp |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
388 if (a_condition_is_not_valid) |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
389 return nullptr; |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
390 if (an_other_condition) |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
391 return nullptr; |
0 | 392 |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
393 auto x = std::make_shared<object>(); |
0 | 394 |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
395 x->start(); |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
396 x->save(); |
0 | 397 |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
398 return x; |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
399 ``` |
0 | 400 |
1
9bf9b4634339
Update return statement
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
401 Additional rules: |
9bf9b4634339
Update return statement
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
402 |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
403 - Do never put parentheses between the returned value, |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
404 - Do not put a else branch after a return. |
13
4d6bf8b3446d
Add chapter about auto
David Demelier <markand@malikania.fr>
parents:
12
diff
changeset
|
405 |
4d6bf8b3446d
Add chapter about auto
David Demelier <markand@malikania.fr>
parents:
12
diff
changeset
|
406 ### Auto |
4d6bf8b3446d
Add chapter about auto
David Demelier <markand@malikania.fr>
parents:
12
diff
changeset
|
407 |
4d6bf8b3446d
Add chapter about auto
David Demelier <markand@malikania.fr>
parents:
12
diff
changeset
|
408 We encorage usage of `auto`, it reduces code maintainance as you don't need to |
4d6bf8b3446d
Add chapter about auto
David Demelier <markand@malikania.fr>
parents:
12
diff
changeset
|
409 change your code when your rename types. |
4d6bf8b3446d
Add chapter about auto
David Demelier <markand@malikania.fr>
parents:
12
diff
changeset
|
410 |
25
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
411 ```cpp |
13
4d6bf8b3446d
Add chapter about auto
David Demelier <markand@malikania.fr>
parents:
12
diff
changeset
|
412 auto it = std::find_if(v.begin(), v.end(), [&] (const auto& obj) { |
4d6bf8b3446d
Add chapter about auto
David Demelier <markand@malikania.fr>
parents:
12
diff
changeset
|
413 return obj.key() == "foo"; |
4d6bf8b3446d
Add chapter about auto
David Demelier <markand@malikania.fr>
parents:
12
diff
changeset
|
414 }); |
4d6bf8b3446d
Add chapter about auto
David Demelier <markand@malikania.fr>
parents:
12
diff
changeset
|
415 |
4d6bf8b3446d
Add chapter about auto
David Demelier <markand@malikania.fr>
parents:
12
diff
changeset
|
416 for (const auto& pair : a_map) |
4d6bf8b3446d
Add chapter about auto
David Demelier <markand@malikania.fr>
parents:
12
diff
changeset
|
417 std::cout << pair.first << " = " << pair.second << std::endl; |
25
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
418 ``` |
13
4d6bf8b3446d
Add chapter about auto
David Demelier <markand@malikania.fr>
parents:
12
diff
changeset
|
419 |
4d6bf8b3446d
Add chapter about auto
David Demelier <markand@malikania.fr>
parents:
12
diff
changeset
|
420 But do not use `auto` to write code like in python, this is not acceptable: |
4d6bf8b3446d
Add chapter about auto
David Demelier <markand@malikania.fr>
parents:
12
diff
changeset
|
421 |
25
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
422 ```cpp |
13
4d6bf8b3446d
Add chapter about auto
David Demelier <markand@malikania.fr>
parents:
12
diff
changeset
|
423 auto o = my_object("foo"); |
25
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
424 ``` |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
425 |
32
651aee870e36
Add paragraph about std::string_view
David Demelier <markand@malikania.fr>
parents:
31
diff
changeset
|
426 ### String views |
651aee870e36
Add paragraph about std::string_view
David Demelier <markand@malikania.fr>
parents:
31
diff
changeset
|
427 |
651aee870e36
Add paragraph about std::string_view
David Demelier <markand@malikania.fr>
parents:
31
diff
changeset
|
428 Use `std::string_view` each time you need a string that you will not own, this |
651aee870e36
Add paragraph about std::string_view
David Demelier <markand@malikania.fr>
parents:
31
diff
changeset
|
429 includes: temporary arguments, return values, compile time constants. |
651aee870e36
Add paragraph about std::string_view
David Demelier <markand@malikania.fr>
parents:
31
diff
changeset
|
430 |
651aee870e36
Add paragraph about std::string_view
David Demelier <markand@malikania.fr>
parents:
31
diff
changeset
|
431 ```cpp |
651aee870e36
Add paragraph about std::string_view
David Demelier <markand@malikania.fr>
parents:
31
diff
changeset
|
432 const std::string_view version("1.0"); |
651aee870e36
Add paragraph about std::string_view
David Demelier <markand@malikania.fr>
parents:
31
diff
changeset
|
433 |
651aee870e36
Add paragraph about std::string_view
David Demelier <markand@malikania.fr>
parents:
31
diff
changeset
|
434 auto find(std::string_view id) -> std::optional<int> |
651aee870e36
Add paragraph about std::string_view
David Demelier <markand@malikania.fr>
parents:
31
diff
changeset
|
435 { |
651aee870e36
Add paragraph about std::string_view
David Demelier <markand@malikania.fr>
parents:
31
diff
changeset
|
436 if (auto it = foo.find(id); it != foo.end()) |
651aee870e36
Add paragraph about std::string_view
David Demelier <markand@malikania.fr>
parents:
31
diff
changeset
|
437 return it->second; |
651aee870e36
Add paragraph about std::string_view
David Demelier <markand@malikania.fr>
parents:
31
diff
changeset
|
438 |
651aee870e36
Add paragraph about std::string_view
David Demelier <markand@malikania.fr>
parents:
31
diff
changeset
|
439 return std::nullopt; |
651aee870e36
Add paragraph about std::string_view
David Demelier <markand@malikania.fr>
parents:
31
diff
changeset
|
440 } |
651aee870e36
Add paragraph about std::string_view
David Demelier <markand@malikania.fr>
parents:
31
diff
changeset
|
441 ``` |
651aee870e36
Add paragraph about std::string_view
David Demelier <markand@malikania.fr>
parents:
31
diff
changeset
|
442 |
25
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
443 CMake |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
444 ===== |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
445 |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
446 Style |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
447 ----- |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
448 |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
449 - Try to keep line shorter than 80 columns |
25
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
450 |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
451 ### Spaces |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
452 |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
453 Each programming keyword (e.g. `if`, `foreach`, `while`) requires a single space |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
454 before its argument, otherwise write opening parenthese directly after. |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
455 |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
456 ```cmake |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
457 foreach (c ${COMPONENTS}) |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
458 string(TOUPPER ${c} CMP) |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
459 |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
460 if (${WITH_${CMP}}) |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
461 add_executable(${c} ${c}.cpp) |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
462 endif () |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
463 endforeach () |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
464 ``` |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
465 |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
466 ### Line breaks |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
467 |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
468 When CMake lines goes too long, you should indent arguments at the same level, |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
469 it's also common to see named argument values indented even more. |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
470 |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
471 ```cmake |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
472 set( |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
473 FILES |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
474 ${myapp_SOURCE_DIR}/main.cpp |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
475 ${myapp_SOURCE_DIR}/foo.cpp |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
476 ${myapp_SOURCE_DIR}/bar.cpp |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
477 ) |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
478 |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
479 command_with_lot_of_arguments( |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
480 TARGET foo |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
481 INSTALL On |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
482 SOURCES |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
483 ${myapp_SOURCE_DIR}/main.cpp |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
484 ${myapp_SOURCE_DIR}/foo.cpp |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
485 ${myapp_SOURCE_DIR}/bar.cpp |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
486 COMMENT "Some comment" |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
487 ``` |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
488 |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
489 Modern CMake |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
490 ------------ |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
491 |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
492 CMake evolves over time, if you have read very old articles there is a chance |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
493 that what you have read is actually deprecated and replaced by other features. |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
494 The following list is a short summary of modern CMake features that you must |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
495 use. |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
496 |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
497 ### Imported targets |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
498 |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
499 When they are available, use imported targets rather than plain variables. They |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
500 offer complete dependency tracking with options and include directories as well. |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
501 |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
502 ```cmake |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
503 find_package(Boost COMPONENTS system) |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
504 target_link_libraries(main Boost::system) |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
505 ``` |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
506 |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
507 ### Use generator expressions |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
508 |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
509 Use generator expressions as much as you can, they offer much more flexibility |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
510 in case of multiple generators. Remember that CMake is not meant to be used only |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
511 with Makefiles. |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
512 |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
513 ```cmake |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
514 target_link_libraries( |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
515 myapp |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
516 $<$<STREQUAL:${CMAKE_SYSTEM_NAME},Windows>:shlwapi> |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
517 $<$<STREQUAL:${CMAKE_SYSTEM_NAME},Linux>:dl> |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
518 ``` |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
519 |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
520 Warning: do never test against `CMAKE_BUILD_TYPE` in any CMakeLists.txt, IDEs |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
521 like Visual Studio will mismatch what you'll put in the conditions. |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
522 |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
523 ### Avoid global scoping |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
524 |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
525 The following commands must be avoided as much as possible: |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
526 |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
527 - `link_directories`, |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
528 - `link_libraries`, |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
529 - `include_directories`, |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
530 - `add_definitions`. |
25
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
531 |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
532 They pollute the global namespace, all targets defined after these commands will |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
533 be built against those settings. Instead, you should use the per-targets |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
534 commands. |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
535 |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
536 ```cmake |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
537 target_include_directories( |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
538 mylib |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
539 PUBLIC |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
540 $<BUILD_INTERFACE:${mylib_SOURCE_DIR}> |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
541 $<INSTALL_INTERFACE:include> |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
542 ) |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
543 target_link_libraries(mylib foo) |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
544 ``` |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
545 |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
546 ### Defining sources |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
547 |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
548 You MUST never use any kind of `file(GLOB)` commands to list sources for an |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
549 executable. CMake is designed to be re-called by itself only when required, |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
550 having such a construct will not let CMake be able to detect if you have |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
551 added/removed files in your source directory. Instead, you MUST always specify |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
552 all source by hands. |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
553 |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
554 ```cmake |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
555 set( |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
556 FILES |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
557 ${myapp_SOURCE_DIR}/main.cpp |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
558 ${myapp_SOURCE_DIR}/a.cpp |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
559 ${myapp_SOURCE_DIR}/b.cpp |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
560 ) |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
561 |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
562 add_executable(myapp ${FILES}) |
9573e6c9ac97
Add CMake guide in STYLE.md
David Demelier <markand@malikania.fr>
parents:
17
diff
changeset
|
563 ``` |
27
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
564 |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
565 Markdown |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
566 ======== |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
567 |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
568 Lists |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
569 ----- |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
570 |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
571 Use hyphens for unordered lists for consistency, do not indent top level lists, |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
572 then indent by two spaces each level |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
573 |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
574 ```markdown |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
575 - unordered list 1 |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
576 - unordered list 2 |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
577 - sub unordered item |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
578 |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
579 1. unordered list 1 |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
580 2. unordered list 2 |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
581 2.1. sub unordered item |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
582 ``` |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
583 |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
584 Code blocks |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
585 ----------- |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
586 |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
587 You can use three backticks and the language specifier or just indent a block by |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
588 for leading spaces if you don't need syntax. |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
589 |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
590 ```cpp |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
591 std::cout << "hello world" << std::endl; |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
592 ``` |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
593 |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
594 And without syntax: |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
595 |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
596 ```markdown |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
597 This is simple code block. |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
598 ``` |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
599 |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
600 Tables |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
601 ------ |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
602 |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
603 Tables are supported and formatted as following: |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
604 |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
605 ```markdown |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
606 | header 1 | header 2 | |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
607 |----------|----------| |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
608 | item 1 | item 2 | |
0706d01e073f
Update markdown convention and add it to STYLE.md
David Demelier <markand@malikania.fr>
parents:
25
diff
changeset
|
609 ``` |
28
1a9a76f94955
Add alerts in markdown style
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
610 |
1a9a76f94955
Add alerts in markdown style
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
611 Alerts |
1a9a76f94955
Add alerts in markdown style
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
612 ------ |
1a9a76f94955
Add alerts in markdown style
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
613 |
1a9a76f94955
Add alerts in markdown style
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
614 It's possible to prefix a paragraph by one of the following topic, it renders a |
1a9a76f94955
Add alerts in markdown style
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
615 different block depending on the output format: |
1a9a76f94955
Add alerts in markdown style
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
616 |
1a9a76f94955
Add alerts in markdown style
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
617 - Note: |
1a9a76f94955
Add alerts in markdown style
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
618 - Warning: |
1a9a76f94955
Add alerts in markdown style
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
619 - Danger: |
1a9a76f94955
Add alerts in markdown style
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
620 |
1a9a76f94955
Add alerts in markdown style
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
621 Then, if the paragraph is too long, indent the text correctly. |
1a9a76f94955
Add alerts in markdown style
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
622 |
1a9a76f94955
Add alerts in markdown style
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
623 ```markdown |
1a9a76f94955
Add alerts in markdown style
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
624 Note: this is an information block that is too long to fit between the limits so |
1a9a76f94955
Add alerts in markdown style
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
625 it is split and indented. |
1a9a76f94955
Add alerts in markdown style
David Demelier <markand@malikania.fr>
parents:
27
diff
changeset
|
626 ``` |