If you want to help but don't know where to start, here are some low-risk/isolated tasks:
$NVIM_LOG_FILE
, if it exists.cmake --system-information
for build-related issues.:help dev
.:help dev-ui
.:help dev-api-client
.ninja
for faster builds.
sudo apt-get install ninja-build
make distclean
make # Nvim build system uses ninja automatically, if available.
[WIP]
pull request as soon as possible.master
into your PR when there are conflicts or when master
introduces breaking changes.ri
git alias:
[alias]
ri = "!sh -c 't=\"${1:-master}\"; s=\"${2:-HEAD}\"; mb=\"$(git merge-base \"$t\" \"$s\")\"; if test \"x$mb\" = x ; then o=\"$t\"; else lm=\"$(git log -n1 --merges \"$t..$s\" --pretty=%H)\"; if test \"x$lm\" = x ; then o=\"$mb\"; else o=\"$lm\"; fi; fi; test $# -gt 0 && shift; test $# -gt 0 && shift; git rebase --interactive \"$o\" \"$@\"'"
This avoids unnecessary rebases yet still allows you to combine related
commits, separate monolithic commits, etc.exec make -C build unittest
between each
pick/edit/reword.Pull requests have three stages: [WIP]
(Work In Progress), [RFC]
(Request
For Comment) and [RDY]
(Ready).
[RFC]
is assumed by default, i.e. you are requesting a review.[WIP]
to the PR title if you are not requesting feedback and the work
is still in flux.[RDY]
if you are done and only waiting on merge.Follow commit message hygiene to make reviews easier and to make the VCS/git logs more valuable.
doc:
, test:
, foo.c:
,
runtime:
, ...
style
or lint
.Each pull request must pass the automated builds on Travis CI, QuickBuild and AppVeyor.
-Werror
, so compiler warnings
will fail the build.VALGRIND=1 make test
CC=clang make CMAKE_FLAGS="-DCLANG_ASAN_UBSAN=ON"
mkdir -p build/${params.get("buildType")} \
&& cd build/${params.get("buildType")} \
&& cmake -G "Unix Makefiles" -DBUSTED_OUTPUT_TYPE=TAP -DCMAKE_BUILD_TYPE=${params.get("buildType")}
-DTRAVIS_CI_BUILD=ON ../.. && ${node.getAttribute("make", "make")}
VERBOSE=1 nvim unittest-prereqs functionaltest-prereqs
View the Clang report to see potential bugs found by the Clang scan-build analyzer.
git log --oneline --no-merges --grep clang
scan-build
like this:
rm -rf build/
scan-build --use-analyzer=/usr/bin/clang make
View the PVS report to see potential bugs found by PVS Studio.
{id}
is the PVS warning-id)):
PVS/V{id}: {description}
git log --oneline --no-merges --grep PVS
./scripts/pvscheck.sh
to run PVS locally.Coverity runs against the master build. To view the defects, just request access; you will be approved.
{id}
is the CID (Coverity ID);
(example)):
coverity/{id}: {description}
git log --oneline --no-merges --grep coverity
You can run the linter locally by:
make lint
The lint step downloads the master error list and excludes them, so only lint errors related to the local changes are reported.
You can lint a single file (but this will not exclude legacy errors):
./src/clint.py src/nvim/ops.c
The repo includes a .clang-format
config file which (mostly) matches the
style-guide. You can use clang-format
to format code with the gq
operator in Nvim:
if !empty(findfile('.clang-format', ';'))
setlocal formatprg=clang-format\ -style=file
endif
ctags
binary provided by your distro, is
unmaintained and won't recognize many function signatures in Neovim source.)To help review pull requests, start with this checklist.
Reviewing can be done on GitHub, but you may find it easier to do locally.
Using hub
, you can create a new branch with the contents of a pull
request, e.g. #1820:
hub checkout https://github.com/neovim/neovim/pull/1820
Use git log -p master..FETCH_HEAD
to list all
commits in the feature branch which aren't in the master
branch; -p
shows each commit's diff. To show the whole surrounding function of a change
as context, use the -W
argument as well.