[Spice-devel] [PATCH spice-server] style: Update style to include some C++ element

Christophe de Dinechin dinechin at redhat.com
Thu Feb 8 14:33:19 UTC 2018



> On 8 Feb 2018, at 14:53, Lukáš Hrázký <lhrazky at redhat.com> wrote:
> 
> On Wed, 2018-02-07 at 10:10 +0100, Christophe de Dinechin wrote:
>> Frediano Ziglio writes:
>> 
>>> These style are used by other SPICE projects like spice-streaming-agent.
> 
> "This style is used ..."
> 
>>> See discussion "Coding style and naming conventions for C++" at
>>> https://lists.freedesktop.org/archives/spice-devel/2018-January/041562.html.
> 
> I'm not sure if referring to ML discussion is a good idea, but if you
> think so, not objecting... :)
> 
>>> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
>>> ---
>>> docs/spice_style.txt | 38 +++++++++++++++++++++++++++++++++++++-
>>> 1 file changed, 37 insertions(+), 1 deletion(-)
>>> 
>>> diff --git a/docs/spice_style.txt b/docs/spice_style.txt
>>> index eb0e30ef..0e0028e9 100644
>>> --- a/docs/spice_style.txt
>>> +++ b/docs/spice_style.txt
>>> @@ -1,7 +1,7 @@
>>> Spice project coding style and coding conventions
>>> =================================================
>>> 
>>> -Copyright (C) 2009-2016 Red Hat, Inc.
>>> +Copyright (C) 2009-2018 Red Hat, Inc.
>>> Licensed under a Creative Commons Attribution-Share Alike 3.0
>>> United States License (see http://creativecommons.org/licenses/by-sa/3.0/us/legalcode).
>>> 
>>> @@ -379,3 +379,39 @@ Also in source (no header) files you must include `config.h` at the beginning so
>>> 
>>> #include "spice_server.h"
>> 
>> (Not in your patch) Re-reading the part about headers, it has everything
>> completely backwards! I suggest we re-discuss this.
>> 
>>> ----
>>> +
>>> +C++
>>> +---
>>> +C++ follows C style if not specified otherwise.
>> 
>> I would add
>> 
>> The C++11 dialect is assumed by default. No attempts will be made to
>> restrict the code to older variants of C++. Using constructs allowed in
>> later variants of C++ will be allowed either:
>> 
>> - After the default C++ compiler for building the oldest supported RHEL
>>  version fully supports the corresponding variant of C++
>> 
>> - Under the appropriate preprocessor conditions, if the previous
>>  condition is not met and C++11 alternatives would have significant
>>  drawbacks
>> 
>> 
>>> +
>>> +Method names
>>> +~~~~~~~~~~~~
>>> +
>>> +Method names should use lower case and separate words with
>>> +underscores.
>> 
>> What about classes? I see below that you selected camelcase for classes,
>> but that is inconsistent with standard C++ classes such as 'string', or
>> with most types in C (e.g. ptrdiff_t, struct stat, etc)
>> 
>> Since it seems that consistency with C and with the standard C++ library
>> was the primary rationale for using snake-case, I would go for
>> snake-case for classes as well.
>> 
>> (Frankly, I really could not care less, I'm just trying to be consistent)
>> 
>>> +
>>> +
>>> +Namespaces
>>> +~~~~~~~~~~
>>> +
>>> +Namespaces should use lower case and separate words with underscores.
>>> +Namespace blocks should not increase indentation.
>>> +Namespaces can be nested and closure can be collapsed but for
>> 
>> I would not use the word "closure" here, which has a specific meaning in
>> computer science (as in lambda variable capture). What about:
>> 
>> Namespaces can be nested. Namespace closing brackets for nested
>> namespaces can be placed together on the same line, but for readability
>> reasons the closure should specify the namespace with a comment.
> 
> Agreed.
> 
>>> +readability reasons the closure should specify the namespace with a
>>> +comment.
>>> +
>>> +[source,cpp]
>>> +----
>>> +namespace spice {
>>> +namespace streaming_agent {
>> 
>> There is a style inconsistency regarding the placement of the opening
>> brace relative to other first-column opening braces (function and
>> class). So I would suggest that all top-level opening braces be on a
>> line of their own, as for 'class' below and for functions.
> 
> I'm not a fan, but if you guys decided you want to waste some lines on
> lonely opening braces :), please amend the patch.

I’m more concerned about being able to clang-format a region than about discussing brace placement.
The “Linux” placement style on this:

namespace a {
namespace b {

class foo {
    class bar {
        foo() {
            if (a) { b; c; }
            if (b) {
                c();
                d();
                e();
            }
        }
    };
};

}}

will give that:

namespace a
{
namespace b
{

class foo
{
    class bar
    {
        foo()
        {
            if (a) {
                b;
                c;
            }
            if (b) {
                c();
                d();
                e();
            }
        }
    };
};
}
}

Don’t break automated tools gratuitously. If you know how to get clang-format to do what you want, I don’t care.


> 
>>> +
>>> +class ClassInsideNamespace
>>> +{
>>> +...
>>> +};
>>> +
>>> +}} // namespace spice::streaming_agent
>>> +----
>>> +
>>> +You should not import an entire namespace but use qualified names
>>> +instead.
>> 
>> The C++ terminology is "using namespace" and not "import". So I would
>> rephrase as:
>> 
>> The "using namespace" construct should never be used in headers. It should
>> be used sparingly in source files, and only within the body of short
>> functions.
>> 
>> Preferred alternatives to "using namespace" include:
>> - using declarations
>>        using spice::streaming_agent::some_class;
>> - namespace aliases
>>        namespace ssa = spice::streaming_agent;
> 
> Agreed as well.
> 
>> --
>> Cheers,
>> Christophe de Dinechin (IRC c3d)
>> _______________________________________________
>> Spice-devel mailing list
>> Spice-devel at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/spice-devel



More information about the Spice-devel mailing list