[FFmpeg-devel] [PATCH] doc/developer: add examples to clarify code style
epirat07 at gmail.com
epirat07 at gmail.com
Fri Sep 13 22:30:50 EEST 2024
On 18 May 2024, at 20:22, Andrew Sayers wrote:
> I would have found this very helpful!
Thanks for the review, I just submitted a new version that hopefully
addresses most of your points.
>
> On Sat, May 18, 2024 at 07:00:50PM +0200, Marvin Scholz wrote:
>> Given the frequency that new developers, myself included, get the
>> code style wrong, it is useful to add some examples to clarify how
>> things should be done.
>> ---
>> doc/developer.texi | 57 +++++++++++++++++++++++++++++++++++++++++++++-
>> 1 file changed, 56 insertions(+), 1 deletion(-)
>>
>> diff --git a/doc/developer.texi b/doc/developer.texi
>> index 63835dfa06..d7bf3f9cb8 100644
>> --- a/doc/developer.texi
>> +++ b/doc/developer.texi
>> @@ -115,7 +115,7 @@ Objective-C where required for interacting with macOS-specific interfaces.
>>
>> @section Code formatting conventions
>>
>> -There are the following guidelines regarding the indentation in files:
>> +There are the following guidelines regarding the code style in files:
>>
>> @itemize @bullet
>> @item
>> @@ -135,6 +135,61 @@ K&R coding style is used.
>> @end itemize
>> The presentation is one inspired by 'indent -i4 -kr -nut'.
>>
>> + at subsection Examples
>> +Some notable examples to illustrate common code style in FFmpeg:
>> +
>> + at itemize @bullet
>> +
>> + at item
>> +Spaces around @code{if}/@code{do}/@code{while}/@code{for} conditions and assigments:
>
> s/assigments/assignments/
>
> Also, this might be more readable as "Space around assignments and after
> @code{if}... keywords"? On first pass, I assumed this was telling me
> `( condition )` is correct, then had to re-read when the example showed
> it wasn't.
>
>> +
>> + at example c
>> +if (condition)
>
> `condition` here differs from `cond` below, despite conveying the same meaning.
> Either word is fine so long as it's the same word in both places.
>
>> + av_foo();
>> + at end example
>> +
>> + at example c
>> +for (size_t i = 0; i < len; i++)
>
> This lightly implies we prefer `i < len` over `i != len` and `i++` over `++i`.
> Is that something people round here have strong opinions about? Maybe iterate
> over a linked list if this is a controversial question?
>
>> + av_bar(i);
>> + at end example
>> +
>> + at example c
>> +size_t size = 0;
>> + at end example
>> +
>> +However no spaces between the parentheses and condition, unless it helps
>> +readability of complex conditions, so the following should not be done:
>> +
>> + at example c
>> +// Wrong:
>
> Nitpick: if you're going to say "// Wrong" here, it might be better to introduce
> the mechanism with some "// Good"s or something above. The consistency reduces
> cognitive load on the learner, and it's a good excuse to add a little positivity
> to a nerve-wracking experience.
>
>> +if ( cond )
>> + av_foo();
>> + at end example
>> +
>> + at item
>> +No unnecessary parentheses, unless it helps readability:
>> +
>> + at example c
>> +flags = s->mb_x ? RIGHT_EDGE : LEFT_EDGE | RIGHT_EDGE;
>> + at end example
>
> Can the example use "+" or "*" instead of "|"? I've had so many bugs where
> I got the precedence wrong, I'm not sure whether this is supposed to be a good
> or bad example of readability.
>
>> +
>> + at item
>> +No braces around single-line blocks:
>> +
>> + at example c
>> +if (bits_pixel == 24)
>> + avctx->pix_fmt = AV_PIX_FMT_BGR24;
>> +else if (bits_pixel == 8)
>> + avctx->pix_fmt = AV_PIX_FMT_GRAY8;
>> +else @{
>> + av_log(avctx, AV_LOG_ERROR, "Invalid pixel format.\n");
>> + return AVERROR_INVALIDDATA;
>> +@}
>> + at end example
>> +
>> + at end itemize
>> +
>> +
>> @subsection Vim configuration
>> In order to configure Vim to follow FFmpeg formatting conventions, paste
>> the following snippet into your @file{.vimrc}:
>
> Some other things that could help (in decreasing order of importance)...
>
> * if you find a piece of code that looks wrong, should you...
> a) ignore the guide and match your style to the surroundings?
> b) follow the guide and accept the file will look inconsistent?
> c) add an extra patch to fix the formatting?
>
> (I suspect the answer is (b), but could well be wrong)
>
> * example of brace style for both functions and structs
> (as a newbie you don't know if you're about to meet one of those people
> who get all bent out of shape when they see a bracket on a line on its own
> )
>
> * prefer `foo=bar; if (foo)` over `if ((foo=bar))`
> (the latter is sadly used in the code, but is a speedbump for reviewers)
>
> * `foo *bar`, not `foo* bar`
> (I always forget this, not important if it's just me)
>
> Also, way outside the scope of this patch, but a linter that checks these things
> would be very much appreciated. There's a lot to get wrong with your first patch,
> and a program that just said "yep that's formatted correctly" might save a newbie
> enough time to learn git-send-email instead.
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
More information about the ffmpeg-devel
mailing list