www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Scope guards style guide

reply Elias Batek (0xEAB) <desisma heidel.beer> writes:
*The D Style*[0] doesn’t specify how scope guards should be 
written AFAICT.

```
scope(exit) action;

scope (exit) action;

scope(exit)
     action;

scope (exit)
     action;
```


Currently, Phobos mixes all variants.

- `scope\(exit\).+\n`: 316 matches in 42 files
- `scope \(exit\).+\n`: 14 matches in 6 files
- `scope\(exit\)\n`: 38 matches in 12 files
- `scope \(exit\)\n`: 11 matches in 6 files

(Numbers might be slightly different for `~master`.)

**Is there any official recommendation on which style to use in 
which situation?**

The first variant seems to be preferred in practice.
Nevertheless, it differs from `version (…)` statements that have 
a space in between.

[0] https://dlang.org/dstyle.html
Mar 30
next sibling parent Elias Batek (0xEAB) <desisma heidel.beer> writes:
On Sunday, 30 March 2025 at 21:47:22 UTC, Elias Batek (0xEAB) 
wrote:
 Currently, Phobos mixes all variants.
Updates results: - `scope\((?:(?:exit)|(?:failure)|(?:success))\).+$` 387 matches in 46 files - `scope \((?:(?:exit)|(?:failure)|(?:success))\).+$`: 18 matches in 9 files - `scope\((?:(?:exit)|(?:failure)|(?:success))\)$`: 59 matches in 15 files - `scope \((?:(?:exit)|(?:failure)|(?:success))\)$`: 15 matches in 7 files (Match counts for `~master` might be slightly different.)
Mar 30
prev sibling parent Jonathan M Davis <newsgroup.d jmdavisprog.com> writes:
On Sunday, March 30, 2025 3:47:22 PM MDT Elias Batek (0xEAB) via Digitalmars-d
wrote:
 *The D Style*[0] doesn’t specify how scope guards should be
 written AFAICT.

 ```
 scope(exit) action;

 scope (exit) action;

 scope(exit)
      action;

 scope (exit)
      action;
 ```


 Currently, Phobos mixes all variants.

 - `scope\(exit\).+\n`: 316 matches in 42 files
 - `scope \(exit\).+\n`: 14 matches in 6 files
 - `scope\(exit\)\n`: 38 matches in 12 files
 - `scope \(exit\)\n`: 11 matches in 6 files

 (Numbers might be slightly different for `~master`.)

 **Is there any official recommendation on which style to use in
 which situation?**

 The first variant seems to be preferred in practice.
 Nevertheless, it differs from `version (…)` statements that have
 a space in between.

 [0] https://dlang.org/dstyle.html
Well with regards to scope(exit) action; vs scope(exit) action; that's pretty much the same as if (cond) action; vs if (cond) action; and we don't say anything about that in the style guide either. I expect that putting it on the next line is more common with if statements, but there probably are some cases where it goes on the same line. Either way, we clearly haven't felt the need to get picky about it with if, so I don't know that it's worth getting picky about it with scope. As for scope(exit) vs scope (exit), in most places, the guide wants a space between the keyword and the parens, but for assert, it doesn't. So, I guess that it's a question of whether it's more like assert or more like other keywords. Honestly, the logic of it never made sense to me. I don't put spaces between keywords and parens in my own code, and I see no value in it, but Andrei wanted to have the spaces because they weren't functions. Personally, I fail to see why that matters, but clearly it does with how he thinks about things. And that's why the style guide is the way that it is. scope(exit) could arguably viewed as a single keyword, since it kind of is in term of how it's used, but it isn't actually. It could also be viewed as needing a space simply because we require that for keywords in general. But I don't know why assert is different. Maybe Andrei thinks of it more like a function, and scope(exit) certainly doesn't fit that thought process. Personally, I'd favor not having the space, just because I think that all of those spaces are unnecessary cruft, but we require them all over the place for other stuff. So, I don't know. Probably the most consistent thing would be to require the space simply because it's required for all of the other keywords except assert. - Jonathan M Davis
Mar 30