diff options
Diffstat (limited to 'docs/handbook/mnv/contributing.md')
| -rw-r--r-- | docs/handbook/mnv/contributing.md | 293 |
1 files changed, 293 insertions, 0 deletions
diff --git a/docs/handbook/mnv/contributing.md b/docs/handbook/mnv/contributing.md new file mode 100644 index 0000000000..6815fef2e2 --- /dev/null +++ b/docs/handbook/mnv/contributing.md @@ -0,0 +1,293 @@ +# MNV — Contributing + +## How to Contribute + +MNV welcomes patches in any form. The project's `CONTRIBUTING.md` states: + +> Patches are welcome in whatever form. Discussions about patches happen on +> the mnv-dev mailing list. + +### Preferred Channels + +1. **GitHub Pull Requests** — PRs on the `Project-Tick/Project-Tick` repository. + These trigger CI automatically and are forwarded to the mailing list. +2. **mnv-dev mailing list** — Send a unified diff as an attachment. Initial + posts are moderated. + +--- + +## Setting Up a Development Environment + +### Clone the repository + +```bash +git clone https://github.com/Project-Tick/Project-Tick.git +cd Project-Tick/mnv +``` + +### Build with debug flags + +Use the `all-interp` or `sanitize` CMake preset for development: + +```bash +cmake --preset sanitize +cmake --build build/sanitize -j$(nproc) +``` + +Or manually: + +```bash +mkdir build && cd build +cmake .. -DMNV_DEBUG=ON -DMNV_LEAK_CHECK=ON -DMNV_BUILD_TESTS=ON +cmake --build . -j$(nproc) +``` + +### Run the test suite + +```bash +cd build +ctest +``` + +Or run specific test categories: + +```bash +ctest -R json_test # Unit test +ctest -L scripts # Script tests (src/testdir/) +ctest -L indent # Indent tests +ctest -L syntax # Syntax tests +``` + +### Legacy Autoconf build for testing + +```bash +cd src +make +make test +``` + +--- + +## Contribution Guidelines + +### Always add tests + +From `CONTRIBUTING.md`: + +> Please always add a test, if possible. All new functionality should be tested +> and bug fixes should be tested for regressions: the test should fail before +> the fix and pass after the fix. + +Tests live in `src/testdir/`. Look at recent patches for examples. Use +`:help testing` inside MNV for the testing framework documentation. + +### Code style + +Follow the existing code style (see the `code-style.md` handbook page): + +- Hard tabs in C files, `ts=8 sts=4 sw=4 noet`. +- Function return type on a separate line. +- Allman braces. +- Feature guards with `#ifdef FEAT_*`. + +The CI runs `test_codestyle.mnv` which checks for style violations. +**Contributions must pass this check.** + +### Commit messages + +- Write clear, descriptive commit messages. +- Reference issue numbers where applicable. +- One logical change per commit. + +### Signed-off-by + +While not strictly required, it is recommended to sign off commits using the +Developer Certificate of Origin (DCO): + +```bash +git commit -s +``` + +This adds a `Signed-off-by:` trailer confirming you have the right to submit +the change under the project's license. + +The maintainer (`@chrisbra`) usually adds missing `Signed-off-by` trailers +when merging. + +### AI-generated code + +From `CONTRIBUTING.md`: + +> When using AI for contributions, please disclose this. Any AI-generated code +> must follow the MNV code style. In particular, test_codestyle.mnv must not +> report any failures. + +Additional rules: +- Ensure changes are properly tested. +- Do not submit a single PR addressing multiple unrelated issues. + +--- + +## License + +Contributions are distributed under the **MNV license** (see `COPYING.md` +and `LICENSE`). By submitting a change you agree to this. + +> Providing a change to be included implies that you agree with this and your +> contribution does not cause us trouble with trademarks or patents. There is +> no CLA to sign. + +--- + +## Reporting Issues + +### GitHub Issues + +Use [GitHub Issues](https://github.com/Project-Tick/Project-Tick/issues/new/choose) +for actual bugs. + +### Before reporting + +1. Reproduce with a clean configuration: + + ```bash + mnv --clean + ``` + +2. Describe exact reproduction steps. Don't say "insert some text" — instead: + `ahere is some text<Esc>`. + +3. Check the todo file: `:help todo`. + +### Appropriate places for discussion + +- Not sure if it's a bug? Use the **mnv-dev mailing list** or + [reddit.com/r/mnv](https://reddit.com/r/mnv) or + [StackExchange](https://vi.stackexchange.com/). +- Feature requests and design discussions belong on the mailing list or GitHub + issues. + +--- + +## Runtime Files (Syntax, Indent, Ftplugins) + +If you find a problem with a syntax, indent, or ftplugin file: + +1. Check the file header for the **maintainer's** name, email, or GitHub handle. +2. Also check the `MAINTAINERS` file. +3. Contact the maintainer directly. +4. The maintainer sends updates to the MNV project for distribution. + +If the maintainer does not respond, use the mailing list or GitHub issues. + +### MNV9 in runtime files + +Whether to use MNV9 script is up to the maintainer. For files maintained in +the main repository, preserve compatibility with Neovim if possible. Wrap +MNV9-specific code in a guard. + +--- + +## CI and Automated Checks + +Every pull request triggers: + +| CI System | Platform | What it checks | +|---|---|---| +| GitHub Actions | Linux, macOS | Build, tests, coverage | +| Appveyor | Windows | MSVC build, tests | +| Cirrus CI | FreeBSD | Build, tests | +| Codecov | — | Coverage reporting (noisy, can be ignored) | +| Coverity Scan | — | Static analysis | + +### CI configuration + +CI helper scripts live in the `ci/` directory: + +- `ci/config.mk.sed` — configure options for CI builds. +- `ci/config.mk.clang.sed` / `ci/config.mk.gcc.sed` — compiler-specific + variants. +- `ci/setup-xvfb.sh` — sets up Xvfb for GUI tests. +- `ci/remove_snap.sh` — removes snap packages that interfere with CI. +- `ci/pinned-pkgs` — pinned package versions for reproducibility. + +--- + +## Development Workflow + +### 1. Fork and branch + +```bash +git checkout -b fix-my-issue +``` + +### 2. Make changes and test + +```bash +cd build +cmake --build . -j$(nproc) +ctest -R relevant_test +``` + +### 3. Check code style + +Build and run the code-style test: + +```bash +cd src/testdir +make test_codestyle.mnv +``` + +### 4. Commit with sign-off + +```bash +git commit -s -m "Fix: description of the fix + +Detailed explanation if needed. +Closes #NNNN" +``` + +### 5. Push and create PR + +```bash +git push origin fix-my-issue +``` + +Open a Pull Request on GitHub. + +--- + +## Architecture for New Contributors + +New contributors should familiarize themselves with: + +| File | Purpose | +|---|---| +| `src/main.c` | Entry point — read the startup sequence | +| `src/mnv.h` | Master header — see the include hierarchy | +| `src/feature.h` | Feature tiers and optional feature defines | +| `src/structs.h` | All major data structures | +| `src/globals.h` | Global variables | +| `src/ex_docmd.c` | Ex command dispatcher | +| `src/normal.c` | Normal-mode command dispatcher | + +See the `architecture.md` handbook page for a complete subsystem map. + +The `README.md` in `src/` provides additional guidance on the source tree +layout. + +--- + +## Communication + +| Channel | Purpose | +|---|---| +| GitHub Issues | Bug reports, feature requests | +| mnv-dev mailing list | Design discussions, patch review | +| `#mnv` on Libera.Chat | Real-time chat | +| reddit.com/r/mnv | Community discussion | +| StackExchange (vi.stackexchange.com) | Q&A | + +--- + +*This document describes MNV 10.0 as of build 287 (2026-04-03).* |
