chopsticks/CONTRIBUTING.md
m1ngsama 8a36b41d66
Clarify the "no Node.js dependencies" rule (#71)
The original rule was easy to misread as "no npm tools anywhere",
which conflicts with install.sh installing prettier/eslint/etc. The
real boundary is the Vim runtime: no coc.nvim or Node-backed
completion engines. External CLIs that ALE shells out to are fine.

Update the README pointer line to match.

Closes #70
2026-05-16 22:59:40 +08:00

2 KiB

Contributing

Rules

  1. No Node.js in the Vim runtime. Plugins must work with pure VimScript — no coc.nvim or other Node-backed completion engines. External CLIs (prettier, eslint, markdownlint, stylelint, tsc) installed via npm are fine; ALE shells out to them as optional system tools, not as part of the Vim runtime.
  2. Startup matters. Run vim -u .vimrc -i NONE --startuptime /tmp/s.log -es -N -c qa! before and after. If your change adds >1ms, it needs a good reason.
  3. Works on TTY. Test over SSH. If it breaks in a terminal without true color, fix it or gate it behind g:is_tty.
  4. Native-first keymaps. Enhance Vim's native behavior instead of replacing it. Do not override built-in motions, operators, text objects, or help-oriented keys for discoverability alone; prefer leader-prefixed or otherwise non-conflicting ergonomic mappings.
  5. One module, one concern. Don't put git config in lsp.vim.

Adding a plugin

  1. Add the Plug line to modules/plugins.vim
  2. If it's not needed at startup, lazy-load it: Plug 'foo/bar', { 'on': 'FooCommand' }
  3. Put config in the appropriate module
  4. Check new mappings against native Vim behavior before adding them
  5. Update the cheat sheet in modules/tools.vim if you add keybindings
  6. Run scripts/test.sh vim locally after installing plugins
  7. Test on both macOS and Linux when changing terminal or package-manager behavior

Local tests

scripts/test.sh --help
scripts/test.sh quick
scripts/test.sh vim

scripts/test.sh quick runs shell, docs, installer, and bootstrap checks without requiring Vim plugins. scripts/test.sh vim expects plugins to be installed under ~/.vim/plugged. Use STARTUP_LIMIT_MS=150 scripts/test.sh vim to match CI's startup threshold.

Reporting bugs

Open an issue. Include:

  • OS and Vim version
  • Whether you're on SSH/TTY
  • Steps to reproduce

Code style

  • Named augroups with autocmd!
  • No comments explaining what — only why
  • exists('g:plugs["..."]') guards for plugin-dependent config
  • Test with scripts/test.sh vim