]> git.proxmox.com Git - pve-eslint.git/blame - eslint/docs/src/rules/curly.md
import 8.41.0 source
[pve-eslint.git] / eslint / docs / src / rules / curly.md
CommitLineData
8f9d1d4d
DC
1---
2title: curly
8f9d1d4d
DC
3rule_type: suggestion
4---
5
6
eb39fafa
DC
7
8JavaScript allows the omission of curly braces when a block contains only one statement. However, it is considered by many to be best practice to _never_ omit curly braces around blocks, even when they are optional, because it can lead to bugs and reduces code clarity. So the following:
9
10```js
11if (foo) foo++;
12```
13
14Can be rewritten as:
15
16```js
17if (foo) {
18 foo++;
19}
20```
21
22There are, however, some who prefer to only use braces when there is more than one statement to be executed.
23
24## Rule Details
25
26This rule is aimed at preventing bugs and increasing code clarity by ensuring that block statements are wrapped in curly braces. It will warn when it encounters blocks that omit curly braces.
27
28## Options
29
30### all
31
32Examples of **incorrect** code for the default `"all"` option:
33
8f9d1d4d
DC
34::: incorrect
35
eb39fafa
DC
36```js
37/*eslint curly: "error"*/
38
39if (foo) foo++;
40
41while (bar)
42 baz();
43
44if (foo) {
45 baz();
46} else qux();
47```
48
8f9d1d4d
DC
49:::
50
eb39fafa
DC
51Examples of **correct** code for the default `"all"` option:
52
8f9d1d4d
DC
53::: correct
54
eb39fafa
DC
55```js
56/*eslint curly: "error"*/
57
58if (foo) {
59 foo++;
60}
61
62while (bar) {
63 baz();
64}
65
66if (foo) {
67 baz();
68} else {
69 qux();
70}
71```
72
8f9d1d4d
DC
73:::
74
eb39fafa
DC
75### multi
76
77By default, this rule warns whenever `if`, `else`, `for`, `while`, or `do` are used without block statements as their body. However, you can specify that block statements should be used only when there are multiple statements in the block and warn when there is only one statement in the block.
78
79Examples of **incorrect** code for the `"multi"` option:
80
8f9d1d4d
DC
81::: incorrect
82
eb39fafa
DC
83```js
84/*eslint curly: ["error", "multi"]*/
85
86if (foo) {
87 foo++;
88}
89
90if (foo) bar();
91else {
92 foo++;
93}
94
95while (true) {
96 doSomething();
97}
98
99for (var i=0; i < items.length; i++) {
100 doSomething();
101}
102```
103
8f9d1d4d
DC
104:::
105
eb39fafa
DC
106Examples of **correct** code for the `"multi"` option:
107
8f9d1d4d
DC
108::: correct
109
eb39fafa
DC
110```js
111/*eslint curly: ["error", "multi"]*/
112
113if (foo) foo++;
114
115else foo();
116
117while (true) {
118 doSomething();
119 doSomethingElse();
120}
121```
122
8f9d1d4d
DC
123:::
124
eb39fafa
DC
125### multi-line
126
127Alternatively, you can relax the rule to allow brace-less single-line `if`, `else if`, `else`, `for`, `while`, or `do`, while still enforcing the use of curly braces for other instances.
128
129Examples of **incorrect** code for the `"multi-line"` option:
130
8f9d1d4d
DC
131::: incorrect
132
eb39fafa
DC
133```js
134/*eslint curly: ["error", "multi-line"]*/
135
136if (foo)
137 doSomething();
138else
139 doSomethingElse();
140
141if (foo) foo(
142 bar,
143 baz);
144```
145
8f9d1d4d
DC
146:::
147
eb39fafa
DC
148Examples of **correct** code for the `"multi-line"` option:
149
8f9d1d4d
DC
150::: correct
151
eb39fafa
DC
152```js
153/*eslint curly: ["error", "multi-line"]*/
154
155if (foo) foo++; else doSomething();
156
157if (foo) foo++;
158else if (bar) baz()
159else doSomething();
160
161do something();
162while (foo);
163
164while (foo
165 && bar) baz();
166
167if (foo) {
168 foo++;
169}
170
171if (foo) { foo++; }
172
173while (true) {
174 doSomething();
175 doSomethingElse();
176}
177```
178
8f9d1d4d
DC
179:::
180
eb39fafa
DC
181### multi-or-nest
182
183You can use another configuration that forces brace-less `if`, `else if`, `else`, `for`, `while`, or `do` if their body contains only one single-line statement. And forces braces in all other cases.
184
185Examples of **incorrect** code for the `"multi-or-nest"` option:
186
8f9d1d4d
DC
187::: incorrect
188
eb39fafa
DC
189```js
190/*eslint curly: ["error", "multi-or-nest"]*/
191
192if (!foo)
193 foo = {
194 bar: baz,
195 qux: foo
196 };
197
198while (true)
199 if(foo)
200 doSomething();
201 else
202 doSomethingElse();
203
204if (foo) {
205 foo++;
206}
207
208while (true) {
209 doSomething();
210}
211
212for (var i = 0; foo; i++) {
213 doSomething();
214}
eb39fafa
DC
215```
216
8f9d1d4d
DC
217:::
218
eb39fafa
DC
219Examples of **correct** code for the `"multi-or-nest"` option:
220
8f9d1d4d
DC
221::: correct
222
eb39fafa
DC
223```js
224/*eslint curly: ["error", "multi-or-nest"]*/
225
226if (!foo) {
227 foo = {
228 bar: baz,
229 qux: foo
230 };
231}
232
233while (true) {
234 if(foo)
235 doSomething();
236 else
237 doSomethingElse();
238}
239
240if (foo)
241 foo++;
242
243while (true)
244 doSomething();
245
246for (var i = 0; foo; i++)
247 doSomething();
56c4a2cb
DC
248```
249
8f9d1d4d
DC
250:::
251
56c4a2cb
DC
252For single-line statements preceded by a comment, braces are allowed but not required.
253
254Examples of additional **correct** code for the `"multi-or-nest"` option:
255
8f9d1d4d
DC
256::: correct
257
56c4a2cb
DC
258```js
259/*eslint curly: ["error", "multi-or-nest"]*/
260
261if (foo)
262 // some comment
263 bar();
eb39fafa
DC
264
265if (foo) {
266 // some comment
267 bar();
268}
269```
270
8f9d1d4d
DC
271:::
272
eb39fafa
DC
273### consistent
274
275When using any of the `multi*` options, you can add an option to enforce all bodies of a `if`,
276`else if` and `else` chain to be with or without braces.
277
278Examples of **incorrect** code for the `"multi", "consistent"` options:
279
8f9d1d4d
DC
280::: incorrect
281
eb39fafa
DC
282```js
283/*eslint curly: ["error", "multi", "consistent"]*/
284
285if (foo) {
286 bar();
287 baz();
288} else
289 buz();
290
291if (foo)
292 bar();
293else if (faa)
294 bor();
295else {
296 other();
297 things();
298}
299
300if (true)
301 foo();
302else {
303 baz();
304}
305
306if (foo) {
307 foo++;
308}
309```
310
8f9d1d4d
DC
311:::
312
eb39fafa
DC
313Examples of **correct** code for the `"multi", "consistent"` options:
314
8f9d1d4d
DC
315::: correct
316
eb39fafa
DC
317```js
318/*eslint curly: ["error", "multi", "consistent"]*/
319
320if (foo) {
321 bar();
322 baz();
323} else {
324 buz();
325}
326
327if (foo) {
328 bar();
329} else if (faa) {
330 bor();
331} else {
332 other();
333 things();
334}
335
336if (true)
337 foo();
338else
339 baz();
340
341if (foo)
342 foo++;
343
344```
345
8f9d1d4d
DC
346:::
347
eb39fafa
DC
348## When Not To Use It
349
350If you have no strict conventions about when to use block statements and when not to, you can safely disable this rule.