webkit
2cdf99a9e3038c7e01b3c37e8ad903ecbe5eecf1
https://github.com/WebKit/webkit
|
```
```cpp
[](names-setter-getter) Precede setters with the word "set". Use bare words for getters. Setter and getter names should match the names of the variables being set/gotten.
[](names-out-argument) Precede getters that return values through out arguments with the word "get".
[](names-verb) Use descriptive verbs in function names.
[](names-variable-name-in-function-decl) Leave meaningless variable names out of function declarations. A good rule of thumb is if the parameter type name contains the parameter name (without trailing numbers or pluralization), then the parameter name isn't needed. Usually, there should be a parameter name for bools, strings, and numerical types.
[](names-enum-to-bool) Prefer enums to bools on function parameters if callers are likely to be passing constants, since named constants are easier to read at the call site. An exception to this rule is a setter function, where the name of the function already makes clear what the boolean is.
[](names-objc-methods) Objective-C method names should follow the Cocoa naming guidelines — they should read like a phrase and each piece of the selector should start with a lowercase letter and use intercaps.
[](names-enum-members) Enum members should use InterCaps with an initial capital letter.
[](names-const-to-define) Prefer const
to #define
. Prefer inline functions to macros.
[](names-define-constants) #defined
constants should use all uppercase names with words separated by underscores.
[](names-define-non-const) Macros that expand to function calls or other non-constant computation: these should be named like functions, and should have parentheses at the end, even if they take no arguments (with the exception of some special macros like ASSERT). Note that usually it is preferable to use an inline function in such cases instead of a macro.
[](header-guards) Use #pragma once
instead of #define
and #ifdef
for header guards.
[](names-protectors-this) Ref and RefPtr objects meant to protect this
from deletion should be named "protectedThis".
[](names-protectors) Ref and RefPtr objects meant to protect variables other than this
from deletion should be named either "protector", or "protected" combined with the capitalized form of the variable name.
[](#punctuation-member-init) Constructors for C++ classes should initialize all of their members using C++ initializer syntax. Each member (and superclass) should be indented on a separate line, with the colon or comma preceding the member on that line.
[](#punctuation-vector-index) Prefer index over iterator in Vector iterations for terse, easier-to-read code.
[](#pointers-non-cpp) Pointer types in non-C++ code Pointer types should be written with a space between the type and the *
(so the *
is adjacent to the following identifier if any).
[](#pointers-cpp) Pointer and reference types in C++ code Both pointer types and reference types should be written with no space between the type name and the *
or &
.
[](#pointers-out-argument) An out argument of a function should be passed by reference except rare cases where it is optional in which case it should be passed by pointer.
[](include-config-h) All implementation files must include
config.h
first. Header files should never include config.h
.
[](include-primary) All implementation files must include
the primary header second, just after config.h
. So for example, Node.cpp
should include Node.h
first, before other files. This guarantees that each header's completeness is tested. This also assures that each header can be compiled without requiring any other header files be included first.
[](include-others) Other include
statements should be in sorted order (case sensitive, as done by the command-line sort tool or the Xcode sort selection command). Don't bother to organize them in a logical order.
[](include-system) Includes of system headers must come after includes of other headers.
[](#using-in-headers) In header files, do not use "using" statements in namespace (or global) scope.
[](#using-wtf) In header files in the WTF sub-library, however, it is acceptable to use "using" declarations at the end of the file to import one or more names in the WTF namespace into the global scope.
[](#using-in-cpp) In C++ implementation files, do not use "using" declarations of any kind to import names in the standard template library. Directly qualify the names at the point they're used instead.
[](#using-nested-namespaces) In implementation files, if a "using namespace" statement is for a nested namespace whose parent namespace is defined in the file, put the statement inside that namespace definition.
[](#using-position) In implementation files, put all other "using" statements at the beginning of the file, before any namespace definitions and after any "include" statements.
[](types-unsigned) Omit "int" when using "unsigned" modifier. Do not use "signed" modifier. Use "int" by itself instead.
[](#classes-explicit) Use a constructor to do an implicit conversion when the argument is reasonably thought of as a type conversion and the type conversion is fast. Otherwise, use the explicit keyword or a function returning the type. This only applies to single argument constructors.
[](#singleton-static-member) Use a static member function named "singleton()" to access the instance of the singleton.
[](#comments-eol) Use only one space before end of line comments and in between sentences in comments.
[](#comments-sentences) Make comments look like sentences by starting with a capital letter and ending with a period (punctation). One exception may be end of line comments like this if (x == y) // false for NaN
.
[](#comments-fixme) Use FIXME: (without attribution) to denote items that need to be addressed in the future.
[](#override-methods) The base level declaration of a virtual method inside a class must be declared with the virtual
keyword. All subclasses of that class must either specify the override
keyword when overriding the virtual method or the final
keyword when overriding the virtual method and requiring that no further subclasses can override it. You never want to annotate a method with more than one of the virtual
, override
, or final
keywords.