Estilo de código
Al contribuir con código, además de seguir las Directrices básicas de C++: siga las mismas directrices de diseño y estilo que mongodb/mongo. A continuación, se enumeran las adiciones y excepciones. Para cualquier aspecto no contemplado explícitamente aquí, consulte la Guía de estilo de C++ de Google. Ejecutar clang-format con nuestro archivo de configuración, mongo-cxx-driver/.clang-format, le ayudará a garantizar que su código cumpla con los estándares mencionados.
Mensajes de confirmación
Si una solicitud de extracción se dirige a un ticket de JIRA, en el caso de una solicitud de extracción de una sola confirmación, se debe anteponer el ID del ticket al asunto. (En el caso de una solicitud de extracción de varias confirmaciones, añadiremos el ID más adelante al fusionarla).
CXX-883 Add commit message conventions to CONTRIBUTING.md
Utiliza mayúsculas en las líneas de asunto y no coloques un punto al final. Limita el asunto a un máximo de 70 caracteres. ¡Utiliza la voz activa! Imagina este preámbulo para ajustar tu redacción:
If applied, this commit will... [your subject line]
Consulta Cómo escribir un mensaje de confirmación de Git de Chris Beams para obtener más pautas útiles a seguir.
Métodos de ciclo de vida
constructores 'usuario' predeterminados o con argumentos
declaración o eliminación de constructor de copia
declaración-o-eliminación-de-constructor-de-movimiento
declaración o eliminación del operador de asignación de copia
declaration-or-deletion-of-move-assignment-operator
declaración-de-dtor
Encabezados
Los encabezados públicos deben tener un ".hpp" sufijo. Los encabezados privados deben tener un ".hh" sufijo.
Estructura general:
Licencia
Incluir Guardia (
#pragma once)Encabezado de preludio
Encabezados del sistema
<vector>(orden alfabético)Encabezados del controlador
<path/to/header.hpp>(orden alfabético)Espacio de nombres abierto mongocxx
inline namespace v_noabi {Código
} // namespace v_noabiCerrar espacio de nombres mongocxx
Postludio del encabezado
Ejemplo:
// Copyright 2018-present MongoDB Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. namespace mongocxx { inline namespace v_noabi { // Declarations // Inline Implementations } // namespace v_noabi } // namespace mongocxx
Declaraciones de clase
Pautas:
Línea en blanco al principio y al final de la declaración de clase
Sección pública arriba / privada abajo
Primero los métodos del ciclo de vida (ver las reglas anteriores)
Pedidos de miembros privados
Amistades
Constructores privados
Métodos privados
Variables privadas
Ejemplo:
class foo { public: foo(); foo(foo&& other) noexcept; foo& operator=(foo&& other) noexcept; ~foo(); private: friend baz; class MONGOCXX_PRIVATE impl; std::unique_ptr<impl> _impl; };
En líneas
Definir fuera de la declaración de clase
Especifique la palabra clave en línea en la declaración y la definición (para mayor claridad)
Operadores relacionales
Prefiero utilizar funciones gratuitas