Files
oak-editor/CONTRIBUTING.md
T
Mike-Solar bb40b4923e style: unify identifier naming per updated conventions
Automated with clang-tidy readability-identifier-naming (config added to
.clang-tidy) plus scripted passes, per the updated rules now documented
in CONTRIBUTING.md:

- types (class/struct/enum/alias/template params): PascalCase
- functions, variables, members: snake_case (incl. rational -> Rational)
- private/protected members: trailing underscore; static member
  variables likewise (instance_, available_themes_)
- constants and enum values: snake_case (kLinear -> k_linear,
  F32P -> f32p); ALL_CAPS reserved for macros
- macros: OAK_ prefix (OLIVE_ADD_TEST/OLIVE_ASSERT/OLIVE_CONFIG ->
  OAK_ADD_TEST/OAK_ASSERT/OAK_CONFIG, GL_PREAMBLE -> OAK_GL_PREAMBLE,
  include guards -> OAK_*)
- file names: all lowercase (Current/Plugin/OliveHost/OliveClip/
  OlivePluginInstance -> current/plugin/olivehost/oliveclip/
  oliveplugininstance)
- getters share the member name sans underscore, setters set_foo()
- Qt and third-party (OpenFX) virtual overrides and framework callbacks
  keep their original names (exempt in .clang-tidy)

Manual follow-ups required where automation could not reach:
- string-based QMetaObject/SIGNAL/SLOT references updated to renamed
  methods (AddTask, CreatedFile, DeleteSpecificFile, moveSelectionUp, ...)
- macro bodies referencing renamed methods (OLIVE_CONFIG,
  NODE_DEFAULT_DESTRUCTOR, MANAGEDDISPLAYWIDGET_*)
- self-shadowing locals renamed where signals/methods became same-named
  (size_changed, worker_count, selected_items, import param, filters)
- third_party OFX member/namespace usages restored (OFX::Host::*,
  _created, _clipPrefsDirty, createInstance, clearPersistentMessage)
- STL protocol aliases restored (const_iterator) with .clang-tidy
  ignore rules; qHash overloads restored

Full build and test suite pass: ctest 4/4, ~1960 gtest cases green.
2026-07-19 16:10:54 +08:00

1.9 KiB

Contributing to Oak

Thank you for your interest in contributing to Oak Video Editor!

Writing code

Code contributions are welcome. Note that the code base is rapidly changing in the current stage of development however. There is some documentation in the form of code comments, including Javadoc in header files. Feel free to reach out via an issue or pull request if you have questions about the architecture or implementation details.

Code Standards

In order to keep the code as readable and maintainable as possible, code submitted should abide by the following standards:

  • The code style generally follows the Linux Kernel Coding Style with the following project-specific exceptions and notes:
    • Indentation uses tabs, not spaces.
    • Documentation comments should use Javadoc-style (/** ... */) where appropriate.
  • Naming rules (enforced by readability-identifier-naming in .clang-tidy):
    • Types (class, struct, enum, type aliases, template parameters): PascalCase
    • Functions, variables, member variables: snake_case
    • Private/protected members: trailing underscore, class_member_variables_
    • Constants and enum values: snake_case (e.g. k_dry_run_interval, k_linear); ALL_CAPS is reserved for macros — save the fear for things that are actually dangerous
    • Macros: OAK_ALL_CAPS (project prefix), and avoid them when a constant or function will do
    • File names: all lowercase, mystring.h / mystring.cpp
    • Namespaces: short snake_case
    • Getters: same name as the private member without the trailing underscore (foo_foo()); setters: set_foo()
    • Exception: Qt and third-party (e.g. OpenFX) virtual overrides and framework callbacks keep their original names (paintEvent, getParams, ...) — renaming them would break the override
  • 100 column limit (where it doesn't impair readability)
  • Unix line endings (only LF no CRLF)