1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/vsf-linux-mgba

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
CONTRIBUTING.md 11 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 06:59 cdb3902

Руководство по внесению вклада

Чтобы внести вклад в проект mGBA, необходимо учесть несколько моментов, чтобы упростить процесс.

Создание задач

Новые задачи следует создавать в системе отслеживания проблем GitHub проекта mGBA (http://mgba.io/i/). При создании задач, пожалуйста, укажите следующую информацию:

  • Версия сборки, которую вы используете. Для последних сборок она видна в строке заголовка. Например, 0.3-2134-4ec19aa. В старых сборках, таких как 0.2.1, этого нет, поэтому, пожалуйста, уточните версию, которую вы скачали или собрали. Если она присутствует, то содержит версию, имя ветки (если не мастер), номер коммита и усечённый хэш ревизии. В этом примере это означает, что это версия 0.3, на мастере, номер коммита 2134 и хэш ревизии 4ec19aa. Кроме того, если есть локальные изменения, которые не были зафиксированы, будет добавлено -dirty.
  • Операционная система, которую вы используете, например Windows 7 32-bit или Ubuntu 15.04 64-bit.
  • Ваш процессор и видеокарта (обычно не требуется). Например, Core i5-3570K и AMD Radeon R9 280X.

Пожалуйста, также опишите проблему как можно подробнее, включая название игр, в которых вы воспроизвели проблему, и как вам удалось войти в состояние ошибки. При необходимости сохранения состояния можно переименовать их в файлы .png и прикрепить к задаче напрямую.

Отправка запросов на включение

При отправке запроса на включение, пожалуйста, убедитесь, что вы придерживаетесь стиля кодирования, изложенного ниже, и знаете о требованиях к лицензированию. Кроме того, пожалуйста, убедитесь, что все коммиты в запросе на включение имеют согласованные сообщения коммитов, а также имя компонента, который был изменён в сообщении коммита.

Некоторые компоненты включают:

  • ARM7: ядро ARM;
  • GBA: код GBA;
    • GBA Memory: специфичный для памяти;
    • GBA Video: видео, рендеринг;
    • GBA Audio: обработка звука;
    • GBA SIO: последовательный ввод-вывод, мультиплеер, связь;
    • GBA Hardware: дополнительные устройства, такие как гироскоп, датчик освещённости;
    • GBA RR: функции перезаписи;
    • GBA Thread: абстракции уровня потоков;
    • GBA BIOS: высокоуровневый BIOS;
  • Qt: связанный с портом код Qt;
  • SDL: связанный с портом код SDL (включая используемый в других портах);
  • Video: код записи видео;
  • Util: общий служебный код;
  • Tools: различные инструменты;
  • Debugger: включённая функция отладки;
  • All: изменения, которые не затрагивают конкретные компоненты, но влияют на проект в целом.

Стиль кодирования

mGBA стремится иметь согласованную, чистую кодовую базу, поэтому при внесении кода в mGBA, пожалуйста, придерживайтесь следующих правил. Если в запросе на включение есть ошибки стиля, вас попросят исправить их, прежде чем запрос будет принят.

Именование

Имена переменных, включая параметры, должны быть в camelCase. Статические переменные файловой области видимости должны начинаться с символа подчёркивания.

Имена структур C должны начинаться с заглавной буквы, а функции, связанные с этими структурами, должны начинаться с имени класса (включая заглавную букву) и быть в camelCase после. Структуры C не должны быть typedefными.

Функции, не связанные со структурами, должны быть во всём camelCase. Статические функции, не связанные со структурами, должны начинаться с символа подчёркивания.

Значения перечислений и #define должны быть полностью заглавными с символами подчёркивания.

Хорошо:

static int _localVariable;

struct LocalStruct {
    void (*methodName)(struct LocalStruct struct, param);

    int memberName;
};

enum {
    ENUM_ITEM_1,
    ENUM_ITEM_2
};

void LocalStructCreate(struct LocalStruct* struct);

void functionName(int argument);

static void _LocalStructUse(struct LocalStruct* struct);
static void _function2(int argument2);

Классы C++ должны быть ограничены пространствами имён. Для порта Qt это пространство имён называется QGBA.

С именами классов следует обращаться аналогично структурам C. Поля должны быть префиксированы в соответствии с их областью действия:

  • m_ для нестатического члена.
  • s_ для статического члена.

Фигурные скобки

Фигурные скобки не идут на отдельных строках, кроме завершающей фигурной скобки. Между условием и фигурной скобкой должен быть один пробел. Кроме того, фигурные скобки должны использоваться даже для... ### Однострочные блоки

Хорошо:

if (условие) {
    блок;
} else if (условие2) {
    блок2;
} else {
    блок3;
}

Плохо (отдельная строка):

if (условие)
{
    блок;
}
else if (условие2)
{
    блок2;
}
else
{
    блок3;
}

Плохо (отсутствие фигурных скобок):

if (условие)
    оператор;
else if (условие2)
    оператор2;
else
    оператор3;

Плохо (отсутствует пробел):

if (условие){
    блок;
}

Пробелы

Отступ должен выполняться с помощью табуляции и соответствовать уровню фигурных скобок. Выравнивание внутри строки должно быть умеренным, но только с использованием пробелов.

Защита заголовков

Для защиты заголовков C define должен быть именем файла (включая H), все заглавные буквы, с подчёркиванием вместо знаков препинания.

Хорошо:

#ifndef FILE_NAME_H
#define FILE_NAME_H

// Заголовок

#endif

Не должно быть комментариев к #endif.

Для Qt (защита заголовков C++) define должен начинаться с QGBA_ и не включать _H, но в остальном он такой же. Это в основном по причинам наследия и может измениться в будущем.

Хорошо:

#ifndef QGBA_FILE_NAME
#define QGBA_FILE_NAME

// Заголовок

#endif

Другое

Операторы блоков, такие как if, while и for, должны иметь пробел между типом блока и круглыми скобками.

Хорошо:

while (условие) {
    блок;
}

Плохо:

while(условие) {
    блок;
}

В коде C используйте 0 вместо NULL. Это в основном по причинам наследия и может измениться в будущем. В коде C также следует использовать типы bool и значения true и false вместо 1 и 0, где это применимо. В коде C++ используйте nullptr вместо NULL или 0.

Если оператор не имеет тела, использование фигурных скобок не требуется, и можно использовать точку с запятой. Это не обязательно, но рекомендуется.

Хорошо:

while (f());

Плохо:

while (f()) {}

Для бесконечных циклов, которые имеют внутренние операторы break, предпочтительнее использовать while (true) вместо for (;;).

Лицензирование

mGBA лицензируется под Mozilla Public License version 2.0. Это влечёт за собой несколько моментов, когда дело доходит до добавления кода в mGBA.

  • Новый код для mGBA будет лицензироваться под лицензией MPL 2.0.
  • Код с лицензией GPL нельзя добавлять в основной поток mGBA, но его можно связать с mGBA при компиляции.
  • Код MIT, BSD, CC0 и т. д. можно добавить в основной поток mGBA, но предпочтительно в раздел third-party, если это применимо.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/vsf-linux-mgba.git
git@api.gitlife.ru:oschina-mirror/vsf-linux-mgba.git
oschina-mirror
vsf-linux-mgba
vsf-linux-mgba
master