pax_global_header00006660000000000000000000000064135605141450014516gustar00rootroot0000000000000052 comment=b99dad7b4c6418978a21977262809021fab8d356 neovim-0.4.3/000077500000000000000000000000001356051414500130175ustar00rootroot00000000000000neovim-0.4.3/.builds/000077500000000000000000000000001356051414500143575ustar00rootroot00000000000000neovim-0.4.3/.builds/openbsd.yml000066400000000000000000000014261356051414500165370ustar00rootroot00000000000000# sourcehut CI: https://builds.sr.ht/~jmk/neovim image: openbsd/6.5 packages: - autoconf-2.69p2 - automake-1.15.1 - cmake - gettext-0.19.8.1p3 - gettext-tools-0.19.8.1 - gmake - libtool - ninja-1.8.2p0 - unzip-6.0p11 sources: - https://github.com/neovim/neovim tasks: - build: | export AUTOCONF_VERSION=2.69 export AUTOMAKE_VERSION=1.15 cd neovim mkdir .deps cd .deps cmake -G Ninja ../third-party/ cmake --build . --config Debug cd .. mkdir build cd build cmake -G Ninja -DMIN_LOG_LEVEL=3 .. cmake --build . --config Debug ./bin/nvim --version - test: | export LC_CTYPE=en_US.UTF-8 # functional tests cd neovim/build # cmake --build . --config Debug --target functionaltest # oldtests cd .. gmake oldtest neovim-0.4.3/.clang-format000066400000000000000000000010531356051414500153710ustar00rootroot00000000000000BasedOnStyle: Google Language: Cpp ColumnLimit: 80 IndentWidth: 2 TabWidth: 2 UseTab: Never IndentCaseLabels: true BreakBeforeBraces: Linux AlignEscapedNewlinesLeft: false AllowShortFunctionsOnASingleLine: false AlignTrailingComments: true SpacesBeforeTrailingComments: 2 PenaltyReturnTypeOnItsOwnLine: 200 AllowAllParametersOfDeclarationOnNextLine: false AllowShortIfStatementsOnASingleLine: false AllowShortLoopsOnASingleLine: false BinPackParameters: false BreakBeforeBinaryOperators: true BreakBeforeTernaryOperators: true ContinuationIndentWidth: 4 neovim-0.4.3/.editorconfig000066400000000000000000000003201356051414500154670ustar00rootroot00000000000000root = true [*] indent_style = space indent_size = 2 tab_width = 8 end_of_line = lf insert_final_newline = true charset = utf-8 [{Makefile,**/Makefile,runtime/doc/*.txt}] indent_style = tab indent_size = 8 neovim-0.4.3/.flake8000066400000000000000000000000361356051414500141710ustar00rootroot00000000000000[flake8] max-line-length = 88 neovim-0.4.3/.gitattributes000077500000000000000000000000301356051414500157060ustar00rootroot00000000000000*.h linguist-language=C neovim-0.4.3/.github/000077500000000000000000000000001356051414500143575ustar00rootroot00000000000000neovim-0.4.3/.github/FUNDING.yml000066400000000000000000000000631356051414500161730ustar00rootroot00000000000000custom: https://salt.bountysource.com/teams/neovim neovim-0.4.3/.github/ISSUE_TEMPLATE/000077500000000000000000000000001356051414500165425ustar00rootroot00000000000000neovim-0.4.3/.github/ISSUE_TEMPLATE/bug_report.md000066400000000000000000000007511356051414500212370ustar00rootroot00000000000000--- name: Bug report about: Report a problem in Nvim title: '' labels: bug --- - `nvim --version`: - `vim -u DEFAULTS` (version: ) behaves differently? - Operating system/version: - Terminal name/version: - `$TERM`: ### Steps to reproduce using `nvim -u NORC` ``` nvim -u NORC # Alternative for shell-related problems: # env -i TERM=ansi-256color "$(which nvim)" ``` ### Actual behaviour ### Expected behaviour neovim-0.4.3/.github/ISSUE_TEMPLATE/feature_request.md000066400000000000000000000006471356051414500222760ustar00rootroot00000000000000--- name: Feature request about: Request an enhancement for Nvim title: '' labels: enhancement --- - `nvim --version`: - `vim -u DEFAULTS` (version: ) behaves differently? - Operating system/version: - Terminal name/version: - `$TERM`: ### Steps to reproduce using `nvim -u NORC` ``` nvim -u NORC ``` ### Actual behaviour ### Expected behaviour neovim-0.4.3/.gitignore000066400000000000000000000017171356051414500150150ustar00rootroot00000000000000# Tools .ropeproject/ compile_commands.json # Visual Studio /.vs/ # Build/deps dir /build/ /cmake-build-debug/ /dist/ /.deps/ /tmp/ *.mo .*.sw? *~ *.pyc *.o *.so tags /src/nvim/po/vim.pot /src/nvim/po/*.ck # Generated by tests with $NVIM_LOG_FILE set. /.nvimlog # Generated by scripts/vim-patch.sh /.vim-src/ # Generated by old (Vim) tests. /src/nvim/testdir/del /src/nvim/testdir/test*.out /src/nvim/testdir/test*.res /src/nvim/testdir/test.log /src/nvim/testdir/messages /src/nvim/testdir/viminfo /src/nvim/testdir/test.ok /src/nvim/testdir/*.failed /src/nvim/testdir/X* /src/nvim/testdir/valgrind.* /src/nvim/testdir/.gdbinit /runtime/indent/testdir/*.out # Generated by src/nvim/testdir/runnvim.sh. /src/nvim/testdir/*.tlog # Generated by unit tests. /test/includes/post/ # Generated by luacheck during `make lualint' .luacheckcache # local make targets local.mk # runtime/doc /runtime/doc/*.html /runtime/doc/tags.ref /runtime/doc/errors.log # CLion /.idea/ neovim-0.4.3/.luacheckrc000066400000000000000000000006531356051414500151300ustar00rootroot00000000000000-- vim: ft=lua tw=80 -- Ignore W211 (unused variable) with preload files. files["**/preload.lua"] = {ignore = { "211" }} -- Don't report unused self arguments of methods. self = false -- Rerun tests only if their modification time changed. cache = true ignore = { "631", -- max_line_length "212/_.*", -- unused argument, for vars with "_" prefix } -- Global objects defined by the C code read_globals = { "vim", } neovim-0.4.3/.travis.yml000066400000000000000000000115641356051414500151370ustar00rootroot00000000000000dist: xenial language: c env: global: # Set "false" to force rebuild of third-party dependencies. - CACHE_ENABLE=true # Build directory for Neovim. - BUILD_DIR="$TRAVIS_BUILD_DIR/build" # Build directory for third-party dependencies. - DEPS_BUILD_DIR="$HOME/nvim-deps" # Install directory for Neovim. - INSTALL_PREFIX="$HOME/nvim-install" # Log directory for Clang sanitizers and Valgrind. - LOG_DIR="$BUILD_DIR/log" # Nvim log file. - NVIM_LOG_FILE="$BUILD_DIR/.nvimlog" # Default CMake flags. - CMAKE_FLAGS="-DTRAVIS_CI_BUILD=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX:PATH=$INSTALL_PREFIX -DBUSTED_OUTPUT_TYPE=nvim -DDEPS_PREFIX=$DEPS_BUILD_DIR/usr -DMIN_LOG_LEVEL=3" - DEPS_CMAKE_FLAGS="-DUSE_BUNDLED_GPERF=OFF" # Additional CMake flags for 32-bit builds. - CMAKE_FLAGS_32BIT="-DCMAKE_SYSTEM_LIBRARY_PATH=/lib32:/usr/lib32:/usr/local/lib32 -DCMAKE_IGNORE_PATH=/lib:/usr/lib:/usr/local/lib -DCMAKE_TOOLCHAIN_FILE=$TRAVIS_BUILD_DIR/cmake/i386-linux-gnu.toolchain.cmake" # Environment variables for Clang sanitizers. - ASAN_OPTIONS="detect_leaks=1:check_initialization_order=1:log_path=$LOG_DIR/asan" - TSAN_OPTIONS="log_path=$LOG_DIR/tsan" - UBSAN_OPTIONS="print_stacktrace=1 log_path=$LOG_DIR/ubsan" # Environment variables for Valgrind. - VALGRIND_LOG="$LOG_DIR/valgrind-%p.log" - CACHE_NVIM_DEPS_DIR="$HOME/.cache/nvim-deps" # If this file exists, the cache is valid (compile was successful). - CACHE_MARKER="$CACHE_NVIM_DEPS_DIR/.travis_cache_marker" # default target name for functional tests - FUNCTIONALTEST=functionaltest - CI_TARGET=tests # Environment variables for ccache - CCACHE_COMPRESS=1 - CCACHE_SLOPPINESS=time_macros,file_macro - CCACHE_BASEDIR="$TRAVIS_BUILD_DIR" # Default since 3.3, but Travis (Xenial) has 3.2.4; required with newer gcc/clang. - CCACHE_CPP2=1 anchors: envs: &common-job-env # Do not fall back to cache for "master" for PR on "release" branch: # adds the target branch to the cache key. FOR_TRAVIS_CACHE=v1-$TRAVIS_BRANCH addons: apt: packages: &common-apt-packages - apport - autoconf - automake - build-essential - clang - cmake - cscope - gcc-multilib - gdb - gperf - language-pack-tr - libc6-dev-i386 - libtool-bin - locales - ninja-build - pkg-config - unzip - valgrind - xclip homebrew: update: false packages: - ccache - ninja jobs: include: - stage: baseline name: clang-asan os: linux compiler: clang # Use Lua so that ASAN can test our embedded Lua support. 8fec4d53d0f6 env: - CLANG_SANITIZER=ASAN_UBSAN - CMAKE_FLAGS="$CMAKE_FLAGS -DPREFER_LUA=ON" - *common-job-env - name: gcc-coverage (gcc 9) os: linux compiler: gcc-9 env: - GCOV=gcov-9 - CMAKE_FLAGS="$CMAKE_FLAGS -DUSE_GCOV=ON" - GCOV_ERROR_FILE="/tmp/libgcov-errors.log" - *common-job-env addons: apt: sources: - sourceline: 'ppa:ubuntu-toolchain-r/test' packages: - *common-apt-packages - gcc-9 - if: branch = master AND commit_message !~ /\[skip.lint\]/ name: lint os: linux env: - CI_TARGET=lint - *common-job-env - stage: second stage name: "macOS: clang" os: osx compiler: clang osx_image: xcode10.2 # macOS 10.14 env: - *common-job-env - name: gcc-functionaltest-lua os: linux compiler: gcc env: - FUNCTIONALTEST=functionaltest-lua - CMAKE_FLAGS="$CMAKE_FLAGS -DPREFER_LUA=ON" - DEPS_CMAKE_FLAGS="$DEPS_CMAKE_FLAGS -DUSE_BUNDLED_LUAJIT=OFF" - *common-job-env - name: gcc-32bit os: linux # Travis creates a cache per compiler. Set a different value here to # store 32-bit dependencies in a separate cache. compiler: gcc env: - BUILD_32BIT=ON # Minimum required CMake. - CMAKE_URL=https://cmake.org/files/v2.8/cmake-2.8.12-Linux-i386.sh - *common-job-env - name: clang-tsan os: linux compiler: clang env: - CLANG_SANITIZER=TSAN - *common-job-env fast_finish: true before_install: ci/before_install.sh install: ci/install.sh before_script: ci/before_script.sh script: ci/script.sh before_cache: ci/before_cache.sh branches: only: - master - /^release-\d+\.\d+$/ cache: apt: true ccache: true directories: - "$CACHE_NVIM_DEPS_DIR" git: quiet: true notifications: webhooks: urls: - https://webhooks.gitter.im/e/b5c38c99f9677aa3d031 neovim-0.4.3/BACKERS.md000066400000000000000000000351111356051414500144140ustar00rootroot00000000000000# Bountysource Backers Thank you to everyone who backed our [Bountysource fundraiser](https://www.bountysource.com/teams/neovim/fundraiser)! ### Your name and URL in BACKERS.md. - [Bob Breznak](http://brez.io) - [Tim Uruski](http://timuruski.net) - @mikker (http://brnbw.com) - Aaron J. [@metaxis](http://twitter.com/metaxis) Peterson - Adam George http://www.adamgeorge.com - Adam Lindberg (http://alind.io) - Adam McLain http://twitter.com/adammclain - Adam Piper http://ahri.net - Adrian Philipp http://adrian-philipp.com - Alexander Quine - Alexandru Dabija - Alexis Hildebrandt http://surryhill.net - Andrew M. Farrell http://amfarrell.com - Anton Beloglazov http://beloglazov.info/ - Arthur Axel fREW Schmidt - https://blog.afoolishmanifesto.com - Ben Thouret http://benjamin.thouret.com - Benedikt Böhm http://bb.xnull.de - bfredl, http://bfredl.github.io - Brandon Smith, http://reardencode.com - Brandon Wang, http://brandonwang.me - Brennen Bearnes http://p1k3.com - Brock Wilcox (awwaiid) http://thelackthereof.org/ - Cameron Eagans http://cweagans.net - Carl Myers http://cmyers.org/ - Carlos Alves http://www.carlosalves.info - Chris Chernesky, http://www.tinderglow.com - Chris Hartjes - Christoffer Holmstedt (http://www.christofferholmstedt.se) - Ciaran Downey - Craig Bane http://standardizedways.co.uk - Dane Summers http://pinedesk.biz - Daniel Collin https://twitter.com/daniel_collin - Daniel Rogers http://remotecodelist.com - Darshan Sawardekar http://pressing-matters.io - David Gabriel http://wiki.dest-unreachable.net - Deepak Kumar www.kreatio.com - Derek Rodger http://devslant.com - ebene fünf GmbH www.ebenefuenf.de - Ehtesh Choudhury - Emil Hernvall http://emilhernvall.github.io/ - Eric Siegel https://github.com/esiegel - Ethan Schoonover http://ethanschoonover.com - FFunction http://ffctn.com - Frank http://duckpun.ch - Gabriele Lana http://github.com/gabrielelana - Gavin Rogers http://praxeology.co.uk - Geoff Greer https://floobits.com/ - Glenn Strauss https://github.com/gstrauss/ - Gustav Buchholtz http://grod.se - Henri Bourcereau http://bourcereau.fr - http://jaredforsyth.com - http://www.1bsyl.com - Johann Dahm (http://johanndahm.com) - Ian Farmer http://farmernet.net - iauns - http://www.noobtube.com - Jacob Jewell www.immersiveapplications.com - James A. Overton http://james.overton.ca - James Tomasino - http://jamestomasino.com - Jamiel Almeida http://slashfoo.com - Jan Christoph Ebersbach http://www.e-jc.de/ - Jason Peacock http://jasonpeacock.com - Jason Weathered http://jasoncodes.com/ - Javier Maestro - Jeff Craig http://blog.foxxtrot.net/ - Jeremy Huffman http://jeremyhuffman.com - Jeremy Morrell http://rathercurio.us - Jesper Kjeldgaard (thejspr) - http://thejspr.com - Jim Hester (http://jimhester.com) - Joe Moon http://joe.xoxomoon.com - Johan Simonsson, http://fun-tech.se - John P. Kiffmeyer (http://jpk.is) - John Szakmeister http://www.szakmeister.net/ - John W. Long http://wiseheartdesign.com Twitter: @johnwlong GitHub: @jlong - Jon Yurek http://thoughtbot.com - jonaias http://jonaias.info - Josh Davis, http://joshldavis.com - Joshua Levesque (www.jandyco.com) - Justin M. Keyes https://github.com/justinmk - Justin Russell http://jrussell.me - kbussell - Kevin Sjöberg, http://kevinsjoberg.com - Kevin Sumner http://kevinsumner.com - Kevin Wu http://kevinformatics.com - Ley Missailidis, http://polymet.is - Loa https://github.com/loa - Lowe Schmidt http://loweschmidt.se - Marcello Barnaba http://sindro.me/ - Marcin Kulik - http://ku1ik.com - Marius Rieder http://www.durchmesser.ch/ - Mark Allen [@bytemeorg](http://twitter.com/bytemeorg) - Mark Percival http://markpercival.us - Mark Sprevak - Martin Ansdell-Smith https://ansdell.net/ - Martin Kopischke http://martin.kopischke.net - masukomi http://masukomi.org - Matt Greer -- http://mattgreer.org - MetaCosm | #Vim on Freenode - Michael Ulm www.mulm.at - Mikael Jansson http://mikaelj.se - Mikkel Høgh http://mikkel.hoegh.org/ - Ming Liu http://ming.codes - Holger Peters http://www.holger-peters.de - Alexander Myshov http://myshov.com/ - Darren Cheng http://sanguinerane.com/ - Felix Rath www.0fx.eu - Hong Xu http://www.topbug.net - Slava Kim https://www.meteor.com - Nate Soares (So8res) http://so8r.es - neektza http://pltconfusion.com - Niclas Nilsson, http://niclasnilsson.se - Nikolay Bachiyski http://extrapolate.me/ - Nikush Patel http://nikush.co.uk - Norman Köhring https://koehr.in - Osamu Komagata - Øystein E. Krog https://github.com/oysteinkrog - Pablo Brasero Moreno http://pablobm.com - Peter Souter http://www.petersouter.co.uk - Phil Levchenko (http://philslair.com) - Pierre Douyon https://github.com/pgdouyon - Prateek Rungta - Przemysław Pietrzkiewicz, http://ppi.sh - Rasmus Mattsson http://zzm.se - Reed Esau https://github.com/reedes - Richard Harding https://bmark.us - Rob Warner http://grailbox.com - Runar Balstad Jensen, http://stdout.no/ - Ryan Paul http://seg.phault.net - Saad Malik - https://github.com/saamalik - Saggi Malachi - http://sagg.im - Scott Wessels (http://www.usgn.net) - Sean DuBois (Sean-Der) http://siobud.com - Sebastian Vetter (http://www.roadside-developer.com) - Simen Endsjø, http://simendsjo.me - Stanley Chan (Happy-Dude) - Stefan Penner - Steve Vermeulen https://github.com/svermeulen - Steven Myint (https://github.com/myint) - Tae Sandoval Murgan - The Kompanee http://thekompanee.com - Thomas Cannon - Tim Oxley http://campjs.com/ - Timo Schmiade - Timothy Dahlin - Tiziano Santoro - Toban Wiebe http://tobanwiebe.com - Tobias Sjösten http://vvv.tobiassjosten.net/ - Tom Cammann http://github.com/takac - Val Markovic http://val.markovic.io/ - Víðir Valberg Guðmundsson http://rabotnik.coop - Weiyi Lou http://parlseygardens.net - Wesley Moore http://wezm.net/ - Woody Peterson, http://www.bitsofsignal.com - Zach Kelling, http://zeekay.io ### Your name in BACKERS.md. - @a13xb - @d1eg0 - @derkha - @georgebashi - @tmcw - @xpayn - Adam Baxter (voltagex) - Adam Miller (maxamillion) - Adam Sunderland/iterion - Adon Metcalfe (adonm) - Adrian Duyzer - Aidan Stein - ak47 - Aketzu - Alessandro Gangemi - Alessandro Pagnin - Alessandro Proscia - Alex Genco (alexgenco) - Alex Heeton - Alex Roper - Alex Soto (apsoto@gmail.com) - Alexander Flatter - Alexander Jeurissen - Alexander Shabalin - Alexander Woerndle - Alexandru Keszeg - Allan Hudgins - Ami Chayun - Amit Beka - Anders Fuzz - Andre Azzolini - Andre da Palma - André Santos/andrefs - Andrea Michi - Andreas Heider - Andreas Lappe - andrej ocenas / aocenas - Andrew Arminio @5thWall - Andrew DeMaria ~ muff1nman - Andrew Fallows - Andrew Fecheyr (@andruby) - Andrew Hartford - Andrey Tarantsov - Andrey Yurovsky - Andy Dirnberger - Andy Gayton - Andy Lindeman - Andy Webster - AngelLeliel - Anton Egorov / satyrius - Anton Shemerey - Arnaud Bétrémieux - Arne Ehrlich - Arseny Zarechnev - Arvind Deshpande - Astro Jetson Jr - Attila Maczak - Avétis KAZARIAN (avetisk) - BarryKay - bbinet - BenBergman - Bengt Lüers - Benjamin Bryant - Bèr 'berkes' Kessels - Bernd Homuth - Bheesham Persaud - Bilal Quadri - Bjorn Tipling - Bojan Zivanovic - Boris Searles - Braden Bruington - Brandon Liu/thenovices - Brandon Mathis - @imathis - Brett Ritter - Brian Shaver (shakerlxxv) - Bryan Grohman - Bryn Edwards - Calin Iorgulescu - calind - Cameron Wood / cewood - Chris Lopes - Chris Lord - Chris Porter - Chris Sims (@jcsims) - Christian Anton / fibbs - Christian Delahousse cdelahousse - Christian Lange - Christian Wellenbrock - Christophe Badoit - Christopher Lübbemeier - Christopher Mullins - Chungha Kim - ckromero - Claas-Thido Pfaff - Claes Mogren - Clayton Drazner - claytron - Colin Cooper - corytheboyd - Cristián Alberto Arenas Ulloa / NiñoScript - Cyril LEPAGNOT/cyrill62 - D3 Designs - DAddYE (github: DAddYE) - Dan Webb - Daniel C. Henning / danielsdesk - Daniel Egeberg - Daniel Egger - Daniel Hodan/czertbytes - Daniel Latzer - Daniel Riti - Daniel Weisser - Daniele Polencic - Dave Dixon - David Collie - David Galeano - David Newell - David Rappo, Bountysource.com - David Rasch - David Stensland - terite - Davit Samvelyan - Dean Morin - deffi420 - defrex - Deraen - Dewdrops - Dick Seabrook - Dominik Ritter - Don Browne - Donald Walker - Donna Martz - dpc - dperson - dvidsilva - Edan Maor - Eddy Garcia - Edward Ash/cazador481 - Elias Tandel Barrionovo - Elijah Mirecki - Elliot Winkler (github: mcmire) - Enric Lluelles - Eric Fode - Erik Goldman - Erik Johnson Github: terminalmage Twitter: @terminalmage - Erik Nordlund - Ethan Erchinger/erchn - Evan Tatarka - Ewoud van Raamsdonk - fd0 - Federico Galassi - Félix Archambault - Ferdinand Salis-Samaden - Florian Bartels - Florian Sachs - foca - forbesmyester - Frédéric de Villamil - Fredrik Rambris - Dapeng Li (luislee818) - Janko Marohnić (janko-m) - Jun Wu - Maurice van der Pot (Griffon26) - Ory Band (oryband) - Garrett Dawson - Gaveen Prabhasara - George Nikolopoulos - github username "alandyer" - Giuseppe Rota - gkalas - Gökhan Kocak - goodgravy - Göran Gustafsson (GLEG) - Graham Jans - Greg Marcil - Gregory Byrd/GByrd - Gustavo Barron / Cicloid - Gyuri Horák - Harald Hvaal - Harm Aarts - Harry Glaser - Håvard Grimelid - hencjo - Henning Hasemann - Henry "Ingvij" Kupty - henry4k - Heryandi - Hontvári József Levente - IKEDA, Yoshifumi - Ilia Choly - iliis - Ilya Katz - Indrek Juhkam / indrekj - irwand - Islam Sharabash / ibash - Ivar Vasara - Jack Stouffer - Jacqueline Leykam - Jakob Landbo - James Herdman - James Magness - James Murty / jmurty - James Nguyen - James Orr - James Pickard - James Seward - Jamie Hillman - Jan Larres - Jan Weitz - Janko Luin - Jannik Nielsen / bitkid - Jared Tyler Miller - Jason Imison - Jason Long / @jasonlong - Jason Stillwell/dragonfax - Jasu - javaguirre - Jedidiah Hurt - Jeff Schornick - Jen Patrick - Jens Hausherr - Jess Brown / Jess - Jesse Cooke/@jc00ke - Jessica Frazelle/ jfrazelle - Jesus Alvarez - Jez Allan - Jimmie Elvenmark - Jiří Koten - JJ Murre - joe di castro - Joe Malin/633squadron - Joel Meyer - Joey Trapp - Johan Klokkhammer Helsing - John Cant - John K. Paul - John Krueger - John Netherdrake - John Schmidt / schmee - John Whitley/@jwhitley - Jon Anhold - Jon Gosting - Jonas Rollsby - Jonathan Buschmann - Jonathan Gibert - Jonathan Jacobs - Jonathan Kinred - Jorge Gallegos (kad) - Joris Morger - Josemar Luedke - Joshua Brookover - Joshua Travis - Jouko Karvonen - jstemmer - Juan Campa - Juan Hernández Babón / jhbabon - juanolon - Justin Carter Moy - Justin Force - Kamil Slowikowski - Karl Ove Hufthammer - Kazuo Teramoto - Kevin Goslar - Kevin Hamer - Kevin Watters - Kevin Zimmerman / zim44 - kryft - Krzysztof Adamski - Lachlan Brad Easton - Lance Ulmer - Larry Riedel (Larry@Riedel.org) - Lasse Immonen (lasse.immonen@gmail.com) - Léo Unbekandt / Soulou - Leszek Swirski - Levi Brown - lhl - linduxed - Lluis Satorre Gonzalez - lobachevsky - Louis Pilfold - Lucas Stephanou/lucasts - Lucas Werkmeister - Luke Sampson - Luke van der Hoeven / @plukevdh - Maciej Litwiniuk (@mlitwiniuk) - Mads Navntoft Noe - Maik Derstappen / MrTango - Manuel Salvadores - Marcus Huntemann/mapclyps - Marcus Martin/nymaen - Markus Dobler - Mat Moore - Mate Nagy - Mathias Fußenegger - Matt Moretti - Matthew Machuga - Matthew Sunderland - Matthias Bilger - Matthias Lehmann - Maximilian Gerlach - Meryn Stol - Michael 'manveru' Fellinger - Michael "beefsack" Alexander - Michael Iles - Michael Irwin/mdi - Michael Kebe - Michael Lerch - Michael R. Jones - Michael Sanders/msanders - Michael Schall / schallm - Michail Denchev - Michał Bartoszkiewicz - Mickaël FORTUNATO - Miguel Santesmases - Mihir Pendse - Mike Bissett/paran01d - Mike Sergio - Mike Wadsten - mikedillion - Mikkel Oscar Lyderik Larsen - Miles Edland / edlandm - Miles Frain - Mirko Grönroos - Moritz Lotze - Morten Nygaard Åsnes - MrException - Julian Churchill (julianchurchill) - Nakul Dhotre - Corey Farwell (frewsxcv) - Tarrant Rollins (tarrant) - Naseer Ahmed - Nate Jones - Nate Soares (So8res) - Nate Straz - Neil Kirsopp - Nelson Chen/nelsonjchen - Nicholas Firth-McCoy (nfm) - Nick Sloan - Nickolas Means - Nicolai Ruckel - Niko Kivelä - nop - Nuno Frade - Olaf Heinemann - Ole Reifschneider - Oliver Caldwell - Olivier Lechevalier - orangain - orestis - pablasso - Pascal Hartig - Patrick Berkeley - Patrick Bihan-Faou, TeamBox SARL - Patrick Stapfer - Paul R Alexander - Pavel Afanasyev - Pawel Grzech - Paweł Nowak - Pedro Rodriguez T - Per Modin - Peter Edge - Peter Fern - Philipe Farias/philipefarias - Philipp Millar - Piotr Mitoraj - Prithvi Prabhu (prithvi) - Qingping Hou / houqp - Quasar Jarosz - queria - Rachid Zarouali / Xinity - Radek Szymczyszyn - Randy Topliffe / Taar - Ranko Radonić - Raphael Henrique Ribas - Ravi Joseph Pinto - rekab - Renato Zannon - Richard "RichiH" Hartmann - Richard Mihalovič - Richard Sotarsh Clark - Rio Kierkels - rob allen - Rob Bevan - Rob Miller @robmil - Rob O'Dwyer - Rodolfo Borges (aka bart9h) - Rodrigo Souto - Roland Szabo - Romans Malinovskis - Roshan George - Rostepher - runar - Russ Adams / rustushki - Ryan Phillips - Ryan Pierce/ fission1110 - Ryan Schmitt - Ryan Tarpine - Sadik Gokhan Caglar - Sam Stokes - Sanpi - Santiago Suarez Ordoñez - saxman7000 - Scott D'Aquila - Scott Mathson - Sean Copenhaver (@copenhas) - Sean McCleary - Sean M. Collins (sc68cal) - Sean Tegtmeyer - seanbell - Sebastian Geiger - Sergey Alexandrov - Shane Delmore - shawndumas - shazow - Silvan Jegen - Simon Ratner (simonratner) - Song Gao - Stanimir Angelov Mladenov - Stanislav B. - zbstof - Stefan Gojan (hoschi) - Stefan Hoffmann / stefan991 - Stefan Wienert - Steffen Rademacker - Stephen Oney/soney - Steve "ryz" Haßenpflug - Steven Daniel Webb - Steven Sloss - Sven Opitz - Sverre Rabbelier - Szymon Ząbkiewicz - Taichi Nakamura - Takayuki Soga - Teasp00n - Terin Stock - @terinjokes - Thai Pangsakulyanont (dtinth) - Thameera Senanayaka - Theo Belaire - Thomas Ferris Nicolaisen - Thomas Hirsch - Thomas Maffia/Szerated - Thomas Pani - Thomas Thune Hansen - Thorbjørn Lindeijer - Thunder Hu - Thys Meintjes - Tim Anema - Tim Matthews - Timo Kröger - Tolstyak - Tom Panning - Tom Wadley - Tony Kemp - tonyo112 - Tori "TicViking" Hamblin - treppo - Truman Ellis - Tuomas Vähänen - Tyler Briles/MrBri - Tyler Brock - Tyler Mandry - Ulf Fischer/ulf - Vangelis Tsoumenis - Vítězslav Homolka - Vladimir Chernis - Vojtech Jasny - vvakame - Vytis Valentinavičius - Wade Berrier - warrenv - whateverhuis - Will Binns-Smith - Xavier Antoviaque (xavier@antoviaque.org) - xsb - Yann Villessuzanne - yko - Youta Harada(cohalz) - Yrjö Peussa - Yusuke Kanda(@uskanda) - Yuval Langer - zerowidth - Ziling Zhao - Zsolt Botykai ### Anonymous Supporters There were also 307 other people who didn't claim any level of reward but contributed to the fundraiser. Thank you all for the support! neovim-0.4.3/BSDmakefile000066400000000000000000000001731356051414500150510ustar00rootroot00000000000000.DONE: @echo "Please use GNU Make (gmake) to build neovim" .DEFAULT: @echo "Please use GNU Make (gmake) to build neovim" neovim-0.4.3/CMakeLists.txt000066400000000000000000000562751356051414500155760ustar00rootroot00000000000000# CMAKE REFERENCE # intro: https://codingnest.com/basic-cmake/ # best practices (3.0+): https://gist.github.com/mbinna/c61dbb39bca0e4fb7d1f73b0d66a4fd1 # Version should match the tested CMAKE_URL in .travis.yml. cmake_minimum_required(VERSION 2.8.12) project(nvim C) # Point CMake at any custom modules we may ship list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") # We don't support building in-tree. include(PreventInTreeBuilds) set_property(GLOBAL PROPERTY USE_FOLDERS ON) # Prefer our bundled versions of dependencies. if(DEFINED ENV{DEPS_BUILD_DIR}) set(DEPS_PREFIX "$ENV{DEPS_BUILD_DIR}/usr" CACHE PATH "Path prefix for finding dependencies") else() set(DEPS_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/.deps/usr" CACHE PATH "Path prefix for finding dependencies") # When running from within CLion or Visual Studio, # build bundled dependencies automatically. if(NOT EXISTS ${DEPS_PREFIX} AND (DEFINED ENV{CLION_IDE} OR DEFINED ENV{VisualStudioEdition})) message(STATUS "Building dependencies...") set(DEPS_BUILD_DIR ${PROJECT_BINARY_DIR}/.deps) file(MAKE_DIRECTORY ${DEPS_BUILD_DIR}) execute_process( COMMAND ${CMAKE_COMMAND} -G ${CMAKE_GENERATOR} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} -DCMAKE_C_FLAGS_DEBUG=${CMAKE_C_FLAGS_DEBUG} -DCMAKE_C_FLAGS_MINSIZEREL=${CMAKE_C_FLAGS_MINSIZEREL} -DCMAKE_C_FLAGS_RELWITHDEBINFO=${CMAKE_C_FLAGS_RELWITHDEBINFO} -DCMAKE_C_FLAGS_RELEASE=${CMAKE_C_FLAGS_RELEASE} -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM} ${PROJECT_SOURCE_DIR}/third-party WORKING_DIRECTORY ${DEPS_BUILD_DIR}) execute_process( COMMAND ${CMAKE_COMMAND} --build ${DEPS_BUILD_DIR} --config ${CMAKE_BUILD_TYPE}) set(DEPS_PREFIX ${DEPS_BUILD_DIR}/usr) endif() endif() if(CMAKE_CROSSCOMPILING AND NOT UNIX) list(INSERT CMAKE_FIND_ROOT_PATH 0 ${DEPS_PREFIX}) list(INSERT CMAKE_PREFIX_PATH 0 ${DEPS_PREFIX}/../host/bin) else() list(INSERT CMAKE_PREFIX_PATH 0 ${DEPS_PREFIX}) set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:${DEPS_PREFIX}/lib/pkgconfig") endif() # used for check_c_compiler_flag include(CheckCCompilerFlag) if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") # CMake tries to treat /sw and /opt/local as extension of the system path, but # that doesn't really work out very well. Once you have a dependency that # resides there and have to add it as an include directory, then any other # dependency that could be satisfied from there must be--otherwise you can end # up with conflicting versions. So, let's make them more of a priority having # them be included as one of the first places to look for dependencies. list(APPEND CMAKE_PREFIX_PATH /sw /opt/local) # Work around some old, broken detection by CMake for knowing when to use the # isystem flag. Apple's compilers have supported this for quite some time # now. if(CMAKE_COMPILER_IS_GNUCC) set(CMAKE_INCLUDE_SYSTEM_FLAG_C "-isystem ") endif() endif() if(WIN32 OR CMAKE_SYSTEM_NAME STREQUAL "Darwin") # Enable fixing case-insensitive filenames for Windows and Mac. set(USE_FNAME_CASE TRUE) endif() option(ENABLE_LIBINTL "enable libintl" ON) option(ENABLE_LIBICONV "enable libiconv" ON) if (MINGW) # Disable LTO by default as it may not compile # See https://github.com/Alexpux/MINGW-packages/issues/3516 # and https://github.com/neovim/neovim/pull/8654#issuecomment-402316672 option(ENABLE_LTO "enable link time optimization" OFF) else() option(ENABLE_LTO "enable link time optimization" ON) endif() message(STATUS "CMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}") # Build type. if(NOT CMAKE_BUILD_TYPE) message(STATUS "CMAKE_BUILD_TYPE not specified, default is 'Debug'") set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build" FORCE) else() message(STATUS "CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}") endif() if(CMAKE_BUILD_TYPE MATCHES Debug) set(DEBUG 1) else() set(DEBUG 0) endif() # Set available build types for CMake GUIs. # Other build types can still be set by -DCMAKE_BUILD_TYPE=... set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") # If not in a git repo (e.g., a tarball) these tokens define the complete # version string, else they are combined with the result of `git describe`. set(NVIM_VERSION_MAJOR 0) set(NVIM_VERSION_MINOR 4) set(NVIM_VERSION_PATCH 3) set(NVIM_VERSION_PRERELEASE "") # for package maintainers # API level set(NVIM_API_LEVEL 6) # Bump this after any API change. set(NVIM_API_LEVEL_COMPAT 0) # Adjust this after a _breaking_ API change. set(NVIM_API_PRERELEASE false) file(TO_CMAKE_PATH ${CMAKE_CURRENT_LIST_DIR}/.git FORCED_GIT_DIR) include(GetGitRevisionDescription) get_git_head_revision(GIT_REFSPEC NVIM_VERSION_COMMIT) if(NVIM_VERSION_COMMIT) # is a git repo git_describe(NVIM_VERSION_MEDIUM) # `git describe` annotates the most recent tagged release; for pre-release # builds we must replace that with the unreleased version. string(REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.[0-9]+" "v${NVIM_VERSION_MAJOR}.${NVIM_VERSION_MINOR}.${NVIM_VERSION_PATCH}" NVIM_VERSION_MEDIUM ${NVIM_VERSION_MEDIUM}) endif() set(NVIM_VERSION_BUILD_TYPE "${CMAKE_BUILD_TYPE}") # NVIM_VERSION_CFLAGS set further below. set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # Minimize logging for release-type builds. if(NOT CMAKE_C_FLAGS_RELEASE MATCHES DMIN_LOG_LEVEL) set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DMIN_LOG_LEVEL=3") endif() if(NOT CMAKE_C_FLAGS_MINSIZEREL MATCHES DMIN_LOG_LEVEL) set(CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} -DMIN_LOG_LEVEL=3") endif() if(NOT CMAKE_C_FLAGS_RELWITHDEBINFO MATCHES DMIN_LOG_LEVEL) set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -DMIN_LOG_LEVEL=3") endif() # Log level (MIN_LOG_LEVEL in log.h) if("${MIN_LOG_LEVEL}" MATCHES "^$") message(STATUS "MIN_LOG_LEVEL not specified, default is 1 (INFO)") else() if(NOT MIN_LOG_LEVEL MATCHES "^[0-3]$") message(FATAL_ERROR "invalid MIN_LOG_LEVEL: " ${MIN_LOG_LEVEL}) endif() message(STATUS "MIN_LOG_LEVEL=${MIN_LOG_LEVEL}") endif() # Default to -O2 on release builds. if(CMAKE_C_FLAGS_RELEASE MATCHES "-O3") message(STATUS "Replacing -O3 in CMAKE_C_FLAGS_RELEASE with -O2") string(REPLACE "-O3" "-O2" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}") endif() if(CMAKE_COMPILER_IS_GNUCC) check_c_compiler_flag(-Og HAS_OG_FLAG) else() set(HAS_OG_FLAG 0) endif() # # Build-type: RelWithDebInfo # if(HAS_OG_FLAG) set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -Og -g") endif() # We _want_ assertions in RelWithDebInfo build-type. if(CMAKE_C_FLAGS_RELWITHDEBINFO MATCHES DNDEBUG) string(REPLACE "-DNDEBUG" "" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}") endif() # gcc 4.0+ sets _FORTIFY_SOURCE=2 automatically. This currently # does not work with Neovim due to some uses of dynamically-sized structures. # https://github.com/neovim/neovim/issues/223 include(CheckCSourceCompiles) # Include the build type's default flags in the check for _FORTIFY_SOURCE, # otherwise we may incorrectly identify the level as acceptable and find out # later that it was not when optimizations were enabled. CFLAGS is applied # even though you don't see it in CMAKE_REQUIRED_FLAGS. set(INIT_FLAGS_NAME CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE}) string(TOUPPER ${INIT_FLAGS_NAME} INIT_FLAGS_NAME) if(${INIT_FLAGS_NAME}) set(CMAKE_REQUIRED_FLAGS "${${INIT_FLAGS_NAME}}") endif() # Include because some toolchains define _FORTIFY_SOURCE=2 in # internal header files, which should in turn be #included by . check_c_source_compiles(" #include #if defined(_FORTIFY_SOURCE) && _FORTIFY_SOURCE > 1 #error \"_FORTIFY_SOURCE > 1\" #endif int main(void) { return 0; } " HAS_ACCEPTABLE_FORTIFY) if(NOT HAS_ACCEPTABLE_FORTIFY) message(STATUS "Unsupported _FORTIFY_SOURCE found, forcing _FORTIFY_SOURCE=1") # Extract possible prefix to _FORTIFY_SOURCE (e.g. -Wp,-D_FORTIFY_SOURCE). STRING(REGEX MATCH "[^\ ]+-D_FORTIFY_SOURCE" _FORTIFY_SOURCE_PREFIX "${CMAKE_C_FLAGS}") STRING(REPLACE "-D_FORTIFY_SOURCE" "" _FORTIFY_SOURCE_PREFIX "${_FORTIFY_SOURCE_PREFIX}" ) if(NOT _FORTIFY_SOURCE_PREFIX STREQUAL "") message(STATUS "Detected _FORTIFY_SOURCE Prefix=${_FORTIFY_SOURCE_PREFIX}") endif() # -U in add_definitions doesn't end up in the correct spot, so we add it to # the flags variable instead. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_FORTIFY_SOURCE_PREFIX}-U_FORTIFY_SOURCE ${_FORTIFY_SOURCE_PREFIX}-D_FORTIFY_SOURCE=1") endif() # Remove --sort-common from linker flags, as this seems to cause bugs (see #2641, #3374). # TODO: Figure out the root cause. if(CMAKE_EXE_LINKER_FLAGS MATCHES "--sort-common" OR CMAKE_SHARED_LINKER_FLAGS MATCHES "--sort-common" OR CMAKE_MODULE_LINKER_FLAGS MATCHES "--sort-common") message(STATUS "Removing --sort-common from linker flags") string(REGEX REPLACE ",--sort-common(=[^,]+)?" "" CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}") string(REGEX REPLACE ",--sort-common(=[^,]+)?" "" CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}") string(REGEX REPLACE ",--sort-common(=[^,]+)?" "" CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS}") # If no linker flags remain for a -Wl argument, remove it. # '-Wl$' will match LDFLAGS="-Wl,--sort-common", # '-Wl ' will match LDFLAGS="-Wl,--sort-common -Wl,..." string(REGEX REPLACE "-Wl($| )" "" CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}") string(REGEX REPLACE "-Wl($| )" "" CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}") string(REGEX REPLACE "-Wl($| )" "" CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS}") endif() check_c_source_compiles(" #include int main(void) { void *trace[1]; backtrace(trace, 1); return 0; } " HAVE_EXECINFO_BACKTRACE) check_c_source_compiles(" int main(void) { int a = 42; __builtin_add_overflow(a, a, &a); __builtin_sub_overflow(a, a, &a); return 0; } " HAVE_BUILTIN_ADD_OVERFLOW) if(MSVC) # XXX: /W4 gives too many warnings. #3241 add_compile_options(/W3) add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE) add_definitions(-DWIN32) else() add_compile_options(-Wall -Wextra -pedantic -Wno-unused-parameter -Wstrict-prototypes -std=gnu99 -Wshadow -Wconversion -Wmissing-prototypes) check_c_compiler_flag(-Wimplicit-fallthrough HAS_WIMPLICIT_FALLTHROUGH_FLAG) if(HAS_WIMPLICIT_FALLTHROUGH_FLAG) add_compile_options(-Wimplicit-fallthrough) endif() # On FreeBSD 64 math.h uses unguarded C11 extension, which taints clang # 3.4.1 used there. if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" AND CMAKE_C_COMPILER_ID MATCHES "Clang") add_compile_options(-Wno-c11-extensions) endif() endif() if(MINGW) # Use POSIX compatible stdio in Mingw add_definitions(-D__USE_MINGW_ANSI_STDIO) endif() if(WIN32) # Windows Vista is the minimum supported version add_definitions(-D_WIN32_WINNT=0x0600) endif() # OpenBSD's GCC (4.2.1) doesn't have -Wvla check_c_compiler_flag(-Wvla HAS_WVLA_FLAG) if(HAS_WVLA_FLAG) add_compile_options(-Wvla) endif() if(UNIX) # -fstack-protector breaks non Unix builds even in Mingw-w64 check_c_compiler_flag(-fstack-protector-strong HAS_FSTACK_PROTECTOR_STRONG_FLAG) check_c_compiler_flag(-fstack-protector HAS_FSTACK_PROTECTOR_FLAG) if(HAS_FSTACK_PROTECTOR_STRONG_FLAG) add_compile_options(-fstack-protector-strong) elseif(HAS_FSTACK_PROTECTOR_FLAG) add_compile_options(-fstack-protector --param ssp-buffer-size=4) endif() endif() check_c_compiler_flag(-fdiagnostics-color=auto HAS_DIAG_COLOR_FLAG) if(HAS_DIAG_COLOR_FLAG) if(CMAKE_GENERATOR MATCHES "Ninja") add_compile_options(-fdiagnostics-color=always) else() add_compile_options(-fdiagnostics-color=auto) endif() endif() option(TRAVIS_CI_BUILD "Travis/QuickBuild CI, extra flags will be set" OFF) if(TRAVIS_CI_BUILD) message(STATUS "Travis/QuickBuild CI build enabled") add_compile_options(-Werror) if(DEFINED ENV{BUILD_32BIT}) # Get some test coverage for unsigned char add_compile_options(-funsigned-char) endif() endif() option(LOG_LIST_ACTIONS "Add list actions logging" OFF) add_definitions(-DINCLUDE_GENERATED_DECLARATIONS) if(CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_ID STREQUAL "Clang") if(CMAKE_SYSTEM_NAME STREQUAL "SunOS") set(NO_UNDEFINED "-Wl,--no-undefined -lsocket") elseif(NOT CMAKE_SYSTEM_NAME STREQUAL "Darwin") set(NO_UNDEFINED "-Wl,--no-undefined") endif() set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${NO_UNDEFINED}") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${NO_UNDEFINED}") # For O_CLOEXEC, O_DIRECTORY, and O_NOFOLLOW flags on older systems # (pre POSIX.1-2008: glibc 2.11 and earlier). #4042 # For ptsname(). #6743 add_definitions(-D_GNU_SOURCE) endif() if(CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND CMAKE_SIZEOF_VOID_P EQUAL 8) # Required for luajit. set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pagezero_size 10000 -image_base 100000000") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -image_base 100000000") set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -image_base 100000000") endif() include_directories("${PROJECT_BINARY_DIR}/config") include_directories("${PROJECT_SOURCE_DIR}/src") find_package(LibUV 1.28.0 REQUIRED) include_directories(SYSTEM ${LIBUV_INCLUDE_DIRS}) find_package(Msgpack 1.0.0 REQUIRED) include_directories(SYSTEM ${MSGPACK_INCLUDE_DIRS}) find_package(LibLUV 1.30.0 REQUIRED) include_directories(SYSTEM ${LIBLUV_INCLUDE_DIRS}) # Note: The test lib requires LuaJIT; it will be skipped if LuaJIT is missing. option(PREFER_LUA "Prefer Lua over LuaJIT in the nvim executable." OFF) if(PREFER_LUA) find_package(Lua 5.1 REQUIRED) set(LUA_PREFERRED_INCLUDE_DIRS ${LUA_INCLUDE_DIR}) set(LUA_PREFERRED_LIBRARIES ${LUA_LIBRARIES}) # Passive (not REQUIRED): if LUAJIT_FOUND is not set, nvim-test is skipped. find_package(LuaJit) else() find_package(LuaJit REQUIRED) set(LUA_PREFERRED_INCLUDE_DIRS ${LUAJIT_INCLUDE_DIRS}) set(LUA_PREFERRED_LIBRARIES ${LUAJIT_LIBRARIES}) endif() list(APPEND CMAKE_REQUIRED_INCLUDES "${MSGPACK_INCLUDE_DIRS}") check_c_source_compiles(" #include int main(void) { return MSGPACK_OBJECT_FLOAT32; } " MSGPACK_HAS_FLOAT32) list(REMOVE_ITEM CMAKE_REQUIRED_INCLUDES "${MSGPACK_INCLUDE_DIRS}") if(MSGPACK_HAS_FLOAT32) add_definitions(-DNVIM_MSGPACK_HAS_FLOAT32) endif() option(FEAT_TUI "Enable the Terminal UI" ON) if(FEAT_TUI) find_package(UNIBILIUM 2.0 REQUIRED) include_directories(SYSTEM ${UNIBILIUM_INCLUDE_DIRS}) list(APPEND CMAKE_REQUIRED_INCLUDES "${UNIBILIUM_INCLUDE_DIRS}") list(APPEND CMAKE_REQUIRED_LIBRARIES "${UNIBILIUM_LIBRARIES}") check_c_source_compiles(" #include int main(void) { return unibi_num_from_var(unibi_var_from_num(0)); } " UNIBI_HAS_VAR_FROM) list(REMOVE_ITEM CMAKE_REQUIRED_INCLUDES "${UNIBILIUM_INCLUDE_DIRS}") list(REMOVE_ITEM CMAKE_REQUIRED_LIBRARIES "${UNIBILIUM_LIBRARIES}") if(UNIBI_HAS_VAR_FROM) add_definitions(-DNVIM_UNIBI_HAS_VAR_FROM) endif() find_package(LibTermkey 0.18 REQUIRED) include_directories(SYSTEM ${LIBTERMKEY_INCLUDE_DIRS}) endif() find_package(LIBVTERM 0.1 REQUIRED) include_directories(SYSTEM ${LIBVTERM_INCLUDE_DIRS}) if(WIN32) find_package(Winpty 0.4.3 REQUIRED) include_directories(SYSTEM ${WINPTY_INCLUDE_DIRS}) endif() option(CLANG_ASAN_UBSAN "Enable Clang address & undefined behavior sanitizer for nvim binary." OFF) option(CLANG_MSAN "Enable Clang memory sanitizer for nvim binary." OFF) option(CLANG_TSAN "Enable Clang thread sanitizer for nvim binary." OFF) if((CLANG_ASAN_UBSAN AND CLANG_MSAN) OR (CLANG_ASAN_UBSAN AND CLANG_TSAN) OR (CLANG_MSAN AND CLANG_TSAN)) message(FATAL_ERROR "Sanitizers cannot be enabled simultaneously") endif() if((CLANG_ASAN_UBSAN OR CLANG_MSAN OR CLANG_TSAN) AND NOT CMAKE_C_COMPILER_ID MATCHES "Clang") message(FATAL_ERROR "Sanitizers are only supported for Clang") endif() if(ENABLE_LIBINTL) # LibIntl (not Intl) selects our FindLibIntl.cmake script. #8464 find_package(LibIntl REQUIRED) include_directories(SYSTEM ${LibIntl_INCLUDE_DIRS}) endif() if(ENABLE_LIBICONV) find_package(Iconv REQUIRED) include_directories(SYSTEM ${Iconv_INCLUDE_DIRS}) endif() # Determine platform's threading library. Set CMAKE_THREAD_PREFER_PTHREAD # explicitly to indicate a strong preference for pthread. set(CMAKE_THREAD_PREFER_PTHREAD ON) find_package(Threads REQUIRED) # Place targets in bin/ or lib/ for all build configurations set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) foreach(CFGNAME ${CMAKE_CONFIGURATION_TYPES}) string(TOUPPER ${CFGNAME} CFGNAME) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CFGNAME} ${CMAKE_BINARY_DIR}/bin) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CFGNAME} ${CMAKE_BINARY_DIR}/lib) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CFGNAME} ${CMAKE_BINARY_DIR}/lib) endforeach() # Find Lua interpreter include(LuaHelpers) set(LUA_DEPENDENCIES lpeg mpack bit) if(NOT LUA_PRG) foreach(CURRENT_LUA_PRG luajit lua5.1 lua5.2 lua) # If LUA_PRG is set find_program() will not search unset(LUA_PRG CACHE) unset(LUA_PRG_WORKS) find_program(LUA_PRG ${CURRENT_LUA_PRG}) if(LUA_PRG) check_lua_deps(${LUA_PRG} "${LUA_DEPENDENCIES}" LUA_PRG_WORKS) if(LUA_PRG_WORKS) break() endif() endif() endforeach() else() check_lua_deps(${LUA_PRG} "${LUA_DEPENDENCIES}" LUA_PRG_WORKS) endif() if(NOT LUA_PRG_WORKS) message(FATAL_ERROR "Failed to find a Lua 5.1-compatible interpreter") endif() message(STATUS "Using Lua interpreter: ${LUA_PRG}") # Setup busted. find_program(BUSTED_PRG NAMES busted busted.bat) find_program(BUSTED_LUA_PRG busted-lua) if(NOT BUSTED_OUTPUT_TYPE) set(BUSTED_OUTPUT_TYPE "nvim") endif() find_program(LUACHECK_PRG luacheck) find_program(FLAKE8_PRG flake8) find_program(GPERF_PRG gperf) include(InstallHelpers) file(GLOB MANPAGES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} man/nvim.1) install_helper( FILES ${MANPAGES} DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) # # Go down the tree. # add_subdirectory(src/nvim) get_directory_property(NVIM_VERSION_CFLAGS DIRECTORY src/nvim DEFINITION NVIM_VERSION_CFLAGS) add_subdirectory(test/includes) add_subdirectory(config) add_subdirectory(test/functional/fixtures) # compile test programs add_subdirectory(runtime) get_directory_property(GENERATED_HELP_TAGS DIRECTORY runtime DEFINITION GENERATED_HELP_TAGS) if(WIN32) install_helper( FILES ${DEPS_PREFIX}/share/nvim-qt/runtime/plugin/nvim_gui_shim.vim DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/nvim-qt/runtime/plugin) endif() # Setup some test-related bits. We do this after going down the tree because we # need some of the targets. if(BUSTED_PRG) get_property(TEST_INCLUDE_DIRS DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES) # When running tests from 'ninja' we need to use the # console pool: to do so we need to use the USES_TERMINAL # option, but this is only available in CMake 3.2 set(TEST_TARGET_ARGS) if(NOT (${CMAKE_VERSION} VERSION_LESS 3.2.0)) list(APPEND TEST_TARGET_ARGS "USES_TERMINAL") endif() set(UNITTEST_PREREQS nvim-test unittest-headers) set(FUNCTIONALTEST_PREREQS nvim printargs-test shell-test streams-test ${GENERATED_HELP_TAGS}) if(NOT WIN32) list(APPEND FUNCTIONALTEST_PREREQS tty-test) endif() set(BENCHMARK_PREREQS nvim tty-test) # Useful for automated build systems, if they want to manually run the tests. add_custom_target(unittest-prereqs DEPENDS ${UNITTEST_PREREQS}) set_target_properties(unittest-prereqs PROPERTIES FOLDER test) add_custom_target(functionaltest-prereqs DEPENDS ${FUNCTIONALTEST_PREREQS}) add_custom_target(benchmark-prereqs DEPENDS ${BENCHMARK_PREREQS}) check_lua_module(${LUA_PRG} "ffi" LUA_HAS_FFI) if(LUA_HAS_FFI) add_custom_target(unittest COMMAND ${CMAKE_COMMAND} -DBUSTED_PRG=${BUSTED_PRG} -DLUA_PRG=${LUA_PRG} -DWORKING_DIR=${CMAKE_CURRENT_SOURCE_DIR} -DBUSTED_OUTPUT_TYPE=${BUSTED_OUTPUT_TYPE} -DTEST_DIR=${CMAKE_CURRENT_SOURCE_DIR}/test -DBUILD_DIR=${CMAKE_BINARY_DIR} -DTEST_TYPE=unit -P ${PROJECT_SOURCE_DIR}/cmake/RunTests.cmake DEPENDS ${UNITTEST_PREREQS} ${TEST_TARGET_ARGS}) set_target_properties(unittest PROPERTIES FOLDER test) else() message(WARNING "disabling unit tests: no Luajit FFI in ${LUA_PRG}") endif() if(LUA_HAS_FFI) set(TEST_LIBNVIM_PATH $) else() set(TEST_LIBNVIM_PATH "") endif() configure_file( ${CMAKE_SOURCE_DIR}/test/config/paths.lua.in ${CMAKE_BINARY_DIR}/test/config/paths.lua.gen) file(GENERATE OUTPUT ${CMAKE_BINARY_DIR}/test/config/paths.lua INPUT ${CMAKE_BINARY_DIR}/test/config/paths.lua.gen) add_custom_target(functionaltest COMMAND ${CMAKE_COMMAND} -DBUSTED_PRG=${BUSTED_PRG} -DLUA_PRG=${LUA_PRG} -DNVIM_PRG=$ -DWORKING_DIR=${CMAKE_CURRENT_SOURCE_DIR} -DBUSTED_OUTPUT_TYPE=${BUSTED_OUTPUT_TYPE} -DTEST_DIR=${CMAKE_CURRENT_SOURCE_DIR}/test -DBUILD_DIR=${CMAKE_BINARY_DIR} -DTEST_TYPE=functional -P ${PROJECT_SOURCE_DIR}/cmake/RunTests.cmake DEPENDS ${FUNCTIONALTEST_PREREQS} ${TEST_TARGET_ARGS}) set_target_properties(functionaltest functionaltest-prereqs PROPERTIES FOLDER test) add_custom_target(benchmark COMMAND ${CMAKE_COMMAND} -DBUSTED_PRG=${BUSTED_PRG} -DLUA_PRG=${LUA_PRG} -DNVIM_PRG=$ -DWORKING_DIR=${CMAKE_CURRENT_SOURCE_DIR} -DBUSTED_OUTPUT_TYPE=${BUSTED_OUTPUT_TYPE} -DTEST_DIR=${CMAKE_CURRENT_SOURCE_DIR}/test -DBUILD_DIR=${CMAKE_BINARY_DIR} -DTEST_TYPE=benchmark -P ${PROJECT_SOURCE_DIR}/cmake/RunTests.cmake DEPENDS ${BENCHMARK_PREREQS} ${TEST_TARGET_ARGS}) set_target_properties(benchmark benchmark-prereqs PROPERTIES FOLDER test) endif() if(BUSTED_LUA_PRG) add_custom_target(functionaltest-lua COMMAND ${CMAKE_COMMAND} -DBUSTED_PRG=${BUSTED_LUA_PRG} -DLUA_PRG=${LUA_PRG} -DNVIM_PRG=$ -DWORKING_DIR=${CMAKE_CURRENT_SOURCE_DIR} -DBUSTED_OUTPUT_TYPE=${BUSTED_OUTPUT_TYPE} -DTEST_DIR=${CMAKE_CURRENT_SOURCE_DIR}/test -DBUILD_DIR=${CMAKE_BINARY_DIR} -DTEST_TYPE=functional -P ${PROJECT_SOURCE_DIR}/cmake/RunTests.cmake DEPENDS ${FUNCTIONALTEST_PREREQS} ${TEST_TARGET_ARGS}) set_target_properties(functionaltest-lua PROPERTIES FOLDER test) endif() if(LUACHECK_PRG) add_custom_target(lualint COMMAND ${LUACHECK_PRG} -q runtime/ src/ test/ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) else() add_custom_target(lualint false COMMENT "lualint: LUACHECK_PRG not defined") endif() set(CPACK_PACKAGE_NAME "Neovim") set(CPACK_PACKAGE_VENDOR "neovim.io") set(CPACK_PACKAGE_VERSION ${NVIM_VERSION_MEDIUM}) set(CPACK_PACKAGE_INSTALL_DIRECTORY "Neovim") # Set toplevel directory/installer name as Neovim set(CPACK_PACKAGE_FILE_NAME "Neovim") set(CPACK_TOPLEVEL_TAG "Neovim") set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE") set(CPACK_NSIS_MODIFY_PATH ON) set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON) include(CPack) neovim-0.4.3/CONTRIBUTING.md000066400000000000000000000221501356051414500152500ustar00rootroot00000000000000Contributing to Neovim ====================== Getting started --------------- If you want to help but don't know where to start, here are some low-risk/isolated tasks: - [Merge a Vim patch]. - Try a [complexity:low] issue. - Fix bugs found by [Clang](#clang-scan-build), [PVS](#pvs-studio) or [Coverity](#coverity). Reporting problems ------------------ - [Check the FAQ][wiki-faq]. - [Search existing issues][github-issues] (including closed!) - Update Neovim to the latest version to see if your problem persists. - Disable plugins incrementally, to narrow down the cause of the issue. - When reporting a crash, [include a stacktrace](https://github.com/neovim/neovim/wiki/FAQ#backtrace-linux). - [Bisect][git-bisect] to the cause of a regression, if you are able. This is _extremely_ helpful. - Check `$NVIM_LOG_FILE`, if it exists. - Include `cmake --system-information` for build-related issues. Developer guidelines -------------------- - Nvim contributors should read `:help dev`. - External UI developers should read `:help dev-ui`. - API client developers should read `:help dev-api-client`. - Nvim developers are _strongly encouraged_ to install `ninja` for faster builds. ``` sudo apt-get install ninja-build make distclean make # Nvim build system uses ninja automatically, if available. ``` Pull requests (PRs) --------------------- - To avoid duplicate work, create a `[WIP]` pull request as soon as possible. - Your PR must include **test coverage.** See [test/README.md][run-tests]. - Avoid cosmetic changes to unrelated files in the same commit. - Use a [feature branch][git-feature-branch] instead of the master branch. - Use a **rebase workflow** for small PRs. - After addressing review comments, it's fine to rebase and force-push. - Use a **merge workflow** for big, high-risk PRs. - Merge `master` into your PR when there are conflicts or when master introduces breaking changes. - Use the `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. - Do not edit commits that come before the merge commit. - During a squash/fixup, use `exec make -C build unittest` between each pick/edit/reword. ### Stages: WIP, RFC, RDY 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. - Add `[WIP]` to the PR title if you are _not_ requesting feedback and the work is still in flux. - Add `[RDY]` if you are _done_ and only waiting on merge. ### Commit messages Follow [commit message hygiene][hygiene] to *make reviews easier* and to make the VCS/git logs more valuable. - Try to keep the first line under 72 characters. - **Prefix the commit subject with a _scope_:** `doc:`, `test:`, `foo.c:`, `runtime:`, ... - Subject line for commits with only style/lint changes can be a single word: `style` or `lint`. - A blank line must separate the subject from the description. - Use the _imperative voice_: "Fix bug" rather than "Fixed bug" or "Fixes bug." ### Automated builds (CI) Each pull request must pass the automated builds on [Travis CI], [QuickBuild] and [AppVeyor]. - CI builds are compiled with [`-Werror`][gcc-warnings], so compiler warnings will fail the build. - If any tests fail, the build will fail. See [test/README.md#running-tests][run-tests] to run tests locally. Passing locally doesn't guarantee passing the CI build, because of the different compilers and platforms tested against. - CI runs [ASan] and other analyzers. - To run valgrind locally: `VALGRIND=1 make test` - To run Clang ASan/UBSan locally: `CC=clang make CMAKE_FLAGS="-DCLANG_ASAN_UBSAN=ON"` - The [lint](#lint) build checks modified lines _and their immediate neighbors_, to encourage incrementally updating the legacy style to meet our [style](#style). (See [#3174][3174] for background.) - [How to investigate QuickBuild failures](https://github.com/neovim/neovim/pull/4718#issuecomment-217631350) - QuickBuild uses this invocation: ``` 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 ``` ### Clang scan-build View the [Clang report] to see potential bugs found by the Clang [scan-build](https://clang-analyzer.llvm.org/scan-build.html) analyzer. - Search the Neovim commit history to find examples: ``` git log --oneline --no-merges --grep clang ``` - To verify a fix locally, run `scan-build` like this: ``` rm -rf build/ scan-build --use-analyzer=/usr/bin/clang make ``` ### PVS-Studio View the [PVS report](https://neovim.io/doc/reports/pvs/PVS-studio.html.d/) to see potential bugs found by [PVS Studio](https://www.viva64.com/en/pvs-studio/). - Use this format for commit messages (where `{id}` is the PVS warning-id)): ``` PVS/V{id}: {description} ``` - Search the Neovim commit history to find examples: ``` git log --oneline --no-merges --grep PVS ``` - Try `./scripts/pvscheck.sh` to run PVS locally. ### Coverity [Coverity](https://scan.coverity.com/projects/neovim-neovim) runs against the master build. To view the defects, just request access; you will be approved. - Use this format for commit messages (where `{id}` is the CID (Coverity ID); ([example](https://github.com/neovim/neovim/pull/804))): ``` coverity/{id}: {description} ``` - Search the Neovim commit history to find examples: ``` git log --oneline --no-merges --grep coverity ``` Coding ------ ### Lint 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 ### Style 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 ### Navigate - Use **[universal-ctags](https://github.com/universal-ctags/ctags).** ("Exuberant ctags", the typical `ctags` binary provided by your distro, is unmaintained and won't recognize many function signatures in Neovim source.) - Explore the source code [on the web](https://sourcegraph.com/github.com/neovim/neovim). Reviewing --------- To help review pull requests, start with [this checklist][review-checklist]. Reviewing can be done on GitHub, but you may find it easier to do locally. Using [`hub`][hub], you can create a new branch with the contents of a pull request, e.g. [#1820][1820]: hub checkout https://github.com/neovim/neovim/pull/1820 Use [`git log -p master..FETCH_HEAD`][git-history-filtering] 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. [gcc-warnings]: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html [git-bisect]: http://git-scm.com/book/en/v2/Git-Tools-Debugging-with-Git [git-feature-branch]: https://www.atlassian.com/git/tutorials/comparing-workflows [git-history-filtering]: https://www.atlassian.com/git/tutorials/git-log/filtering-the-commit-history [git-history-rewriting]: http://git-scm.com/book/en/v2/Git-Tools-Rewriting-History [git-rebasing]: http://git-scm.com/book/en/v2/Git-Branching-Rebasing [github-issues]: https://github.com/neovim/neovim/issues [1820]: https://github.com/neovim/neovim/pull/1820 [hub]: https://hub.github.com/ [hygiene]: http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html [style-guide]: http://neovim.io/develop/style-guide.xml [ASan]: http://clang.llvm.org/docs/AddressSanitizer.html [run-tests]: https://github.com/neovim/neovim/blob/master/test/README.md#running-tests [wiki-faq]: https://github.com/neovim/neovim/wiki/FAQ [review-checklist]: https://github.com/neovim/neovim/wiki/Code-review-checklist [3174]: https://github.com/neovim/neovim/issues/3174 [Travis CI]: https://travis-ci.org/neovim/neovim [QuickBuild]: http://neovim-qb.szakmeister.net/dashboard [AppVeyor]: https://ci.appveyor.com/project/neovim/neovim [Merge a Vim patch]: https://github.com/neovim/neovim/wiki/Merging-patches-from-upstream-Vim [Clang report]: https://neovim.io/doc/reports/clang/ [complexity:low]: https://github.com/neovim/neovim/issues?q=is%3Aopen+is%3Aissue+label%3Acomplexity%3Alow [master error list]: https://raw.githubusercontent.com/neovim/doc/gh-pages/reports/clint/errors.json neovim-0.4.3/LICENSE000066400000000000000000000366371356051414500140430ustar00rootroot00000000000000Copyright Neovim contributors. All rights reserved. Neovim is licensed under the terms of the Apache 2.0 license, except for parts of Neovim that were contributed under the Vim license (see below). Neovim's license follows: ==== Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. ==== The above license applies to all parts of Neovim except (1) parts that were contributed under the Vim license and (2) externally maintained libraries. The externally maintained libraries used by Neovim are: - Klib: a Generic Library in C. MIT/X11 license. - libuv. Copyright Joyent, Inc. and other Node contributors. Node.js license. - LuaJIT: a Just-In-Time Compiler for Lua. Copyright Mike Pall. MIT license. ==== Any parts of Neovim that were contributed under the Vim license are licensed under the Vim license unless the copyright holder gave permission to license those contributions under the Apache 2.0 license. The Vim license follows: VIM LICENSE I) There are no restrictions on distributing unmodified copies of Vim except that they must include this license text. You can also distribute unmodified parts of Vim, likewise unrestricted except that they must include this license text. You are also allowed to include executables that you made from the unmodified Vim sources, plus your own usage examples and Vim scripts. II) It is allowed to distribute a modified (or extended) version of Vim, including executables and/or source code, when the following four conditions are met: 1) This license text must be included unmodified. 2) The modified Vim must be distributed in one of the following five ways: a) If you make changes to Vim yourself, you must clearly describe in the distribution how to contact you. When the maintainer asks you (in any way) for a copy of the modified Vim you distributed, you must make your changes, including source code, available to the maintainer without fee. The maintainer reserves the right to include your changes in the official version of Vim. What the maintainer will do with your changes and under what license they will be distributed is negotiable. If there has been no negotiation then this license, or a later version, also applies to your changes. The current maintainer is Bram Moolenaar . If this changes it will be announced in appropriate places (most likely vim.sf.net, www.vim.org and/or comp.editors). When it is completely impossible to contact the maintainer, the obligation to send him your changes ceases. Once the maintainer has confirmed that he has received your changes they will not have to be sent again. b) If you have received a modified Vim that was distributed as mentioned under a) you are allowed to further distribute it unmodified, as mentioned at I). If you make additional changes the text under a) applies to those changes. c) Provide all the changes, including source code, with every copy of the modified Vim you distribute. This may be done in the form of a context diff. You can choose what license to use for new code you add. The changes and their license must not restrict others from making their own changes to the official version of Vim. d) When you have a modified Vim which includes changes as mentioned under c), you can distribute it without the source code for the changes if the following three conditions are met: - The license that applies to the changes permits you to distribute the changes to the Vim maintainer without fee or restriction, and permits the Vim maintainer to include the changes in the official version of Vim without fee or restriction. - You keep the changes for at least three years after last distributing the corresponding modified Vim. When the maintainer or someone who you distributed the modified Vim to asks you (in any way) for the changes within this period, you must make them available to him. - You clearly describe in the distribution how to contact you. This contact information must remain valid for at least three years after last distributing the corresponding modified Vim, or as long as possible. e) When the GNU General Public License (GPL) applies to the changes, you can distribute the modified Vim under the GNU GPL version 2 or any later version. 3) A message must be added, at least in the output of the ":version" command and in the intro screen, such that the user of the modified Vim is able to see that it was modified. When distributing as mentioned under 2)e) adding the message is only required for as far as this does not conflict with the license used for the changes. 4) The contact information as required under 2)a) and 2)d) must not be removed or changed, except that the person himself can make corrections. III) If you distribute a modified version of Vim, you are encouraged to use the Vim license for your changes and make them available to the maintainer, including the source code. The preferred way to do this is by e-mail or by uploading the files to a server and e-mailing the URL. If the number of changes is small (e.g., a modified Makefile) e-mailing a context diff will do. The e-mail address to be used is IV) It is not allowed to remove this license from the distribution of the Vim sources, parts of it or from a modified version. You may use this license for previous Vim releases instead of the license that they came with, at your option. neovim-0.4.3/MAINTAIN.md000066400000000000000000000037351356051414500145510ustar00rootroot00000000000000Maintaining the Neovim project ============================== Notes on maintaining the Neovim project. General guidelines ------------------ * Decide by cost-benefit * Write down what was decided * Constraints are good * Use automation to solve problems * Never break the API Ticket triage ------------- In practice we haven't found a meaningful way to forecast more precisely than "next" and "after next". That means there are usually one or two (at most) planned milestones: - Next bugfix-release (1.0.x) - Next feature-release (1.x.0) The forecasting problem might be solved with an explicit priority system (like Bram's todo.txt). Meanwhile the Neovim priority system is defined by: - PRs nearing completion (RDY). - Issue labels. E.g. the `+plan` label increases the ticket's priority merely for having a plan written down: it is _closer to completion_ than tickets without a plan. - Comment activity or new information. Anything that isn't in the next milestone, and doesn't have a RDY PR ... is just not something you care very much about, by construction. Post-release you can review open issues, but chances are your next milestone is already getting full :) Release policy -------------- Release "often", but not "early". The (unreleased) `master` branch is the "early" channel; it should not be released if it's not stable. High-risk changes may be merged to `master` if the next release is not imminent. For maintenance releases, create a `release-x.y` branch. If the current release has a major bug: 1. Fix the bug on `master`. 2. Cherry-pick the fix to `release-x.y`. 3. Cut a release from `release-x.y`. - Run `./scripts/release.sh` - Update (force-push) the remote `stable` tag. - The [nightly job](https://github.com/neovim/bot-ci/blob/master/ci/nightly.sh) will update the release assets based on the `stable` tag. See also -------- - https://github.com/neovim/neovim/issues/862 - https://github.com/git/git/blob/master/Documentation/howto/maintain-git.txt neovim-0.4.3/Makefile000066400000000000000000000131641356051414500144640ustar00rootroot00000000000000THIS_DIR = $(shell pwd) filter-false = $(strip $(filter-out 0 off OFF false FALSE,$1)) filter-true = $(strip $(filter-out 1 on ON true TRUE,$1)) # See contrib/local.mk.example -include local.mk all: nvim CMAKE_PRG ?= $(shell (command -v cmake3 || echo cmake)) CMAKE_BUILD_TYPE ?= Debug CMAKE_FLAGS := -DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE) # Extra CMake flags which extend the default set CMAKE_EXTRA_FLAGS ?= # CMAKE_INSTALL_PREFIX # - May be passed directly or as part of CMAKE_EXTRA_FLAGS. # - `checkprefix` target checks that it matches the CMake-cached value. #9615 ifneq (,$(CMAKE_INSTALL_PREFIX)$(CMAKE_EXTRA_FLAGS)) CMAKE_INSTALL_PREFIX := $(shell echo $(CMAKE_EXTRA_FLAGS) | 2>/dev/null \ grep -o 'CMAKE_INSTALL_PREFIX=[^ ]\+' | cut -d '=' -f2) endif ifneq (,$(CMAKE_INSTALL_PREFIX)) override CMAKE_EXTRA_FLAGS += -DCMAKE_INSTALL_PREFIX=$(CMAKE_INSTALL_PREFIX) checkprefix: @if [ -f build/.ran-cmake ]; then \ cached_prefix=$(shell $(CMAKE_PRG) -L -N build | 2>/dev/null grep 'CMAKE_INSTALL_PREFIX' | cut -d '=' -f2); \ if ! [ "$(CMAKE_INSTALL_PREFIX)" = "$$cached_prefix" ]; then \ printf "Re-running CMake: CMAKE_INSTALL_PREFIX '$(CMAKE_INSTALL_PREFIX)' does not match cached value '%s'.\n" "$$cached_prefix"; \ $(RM) build/.ran-cmake; \ fi \ fi else checkprefix: ; endif BUILD_TYPE ?= $(shell (type ninja > /dev/null 2>&1 && echo "Ninja") || \ echo "Unix Makefiles") DEPS_BUILD_DIR ?= .deps ifneq (1,$(words [$(DEPS_BUILD_DIR)])) $(error DEPS_BUILD_DIR must not contain whitespace) endif ifeq (,$(BUILD_TOOL)) ifeq (Ninja,$(BUILD_TYPE)) ifneq ($(shell $(CMAKE_PRG) --help 2>/dev/null | grep Ninja),) BUILD_TOOL := ninja else # User's version of CMake doesn't support Ninja BUILD_TOOL = $(MAKE) BUILD_TYPE := Unix Makefiles endif else BUILD_TOOL = $(MAKE) endif endif BUILD_CMD = $(BUILD_TOOL) ifneq ($(VERBOSE),) # Only need to handle Ninja here. Make will inherit the VERBOSE variable. ifeq ($(BUILD_TYPE),Ninja) BUILD_CMD += -v endif endif DEPS_CMAKE_FLAGS ?= # Back-compat: USE_BUNDLED_DEPS was the old name. USE_BUNDLED ?= $(USE_BUNDLED_DEPS) ifneq (,$(USE_BUNDLED)) BUNDLED_CMAKE_FLAG := -DUSE_BUNDLED=$(USE_BUNDLED) endif ifneq (,$(findstring functionaltest-lua,$(MAKECMDGOALS))) BUNDLED_LUA_CMAKE_FLAG := -DUSE_BUNDLED_LUA=ON $(shell [ -x $(DEPS_BUILD_DIR)/usr/bin/lua ] || rm build/.ran-*) endif # For use where we want to make sure only a single job is run. This does issue # a warning, but we need to keep SCRIPTS argument. SINGLE_MAKE = export MAKEFLAGS= ; $(MAKE) nvim: build/.ran-cmake deps +$(BUILD_CMD) -C build libnvim: build/.ran-cmake deps +$(BUILD_CMD) -C build libnvim cmake: touch CMakeLists.txt $(MAKE) build/.ran-cmake build/.ran-cmake: | deps cd build && $(CMAKE_PRG) -G '$(BUILD_TYPE)' $(CMAKE_FLAGS) $(CMAKE_EXTRA_FLAGS) $(THIS_DIR) touch $@ deps: | build/.ran-third-party-cmake ifeq ($(call filter-true,$(USE_BUNDLED)),) +$(BUILD_CMD) -C $(DEPS_BUILD_DIR) endif ifeq ($(call filter-true,$(USE_BUNDLED)),) $(DEPS_BUILD_DIR): mkdir -p "$@" build/.ran-third-party-cmake:: $(DEPS_BUILD_DIR) cd $(DEPS_BUILD_DIR) && \ $(CMAKE_PRG) -G '$(BUILD_TYPE)' $(BUNDLED_CMAKE_FLAG) $(BUNDLED_LUA_CMAKE_FLAG) \ $(DEPS_CMAKE_FLAGS) $(THIS_DIR)/third-party endif build/.ran-third-party-cmake:: mkdir -p build touch $@ # TODO: cmake 3.2+ add_custom_target() has a USES_TERMINAL flag. oldtest: | nvim build/runtime/doc/tags +$(SINGLE_MAKE) -C src/nvim/testdir clean ifeq ($(strip $(TEST_FILE)),) +$(SINGLE_MAKE) -C src/nvim/testdir NVIM_PRG="$(realpath build/bin/nvim)" $(MAKEOVERRIDES) else +$(SINGLE_MAKE) -C src/nvim/testdir NVIM_PRG="$(realpath build/bin/nvim)" NEW_TESTS=$(TEST_FILE) SCRIPTS= $(MAKEOVERRIDES) endif build/runtime/doc/tags helptags: | nvim +$(BUILD_CMD) -C build runtime/doc/tags # Builds help HTML _and_ checks for invalid help tags. helphtml: | nvim build/runtime/doc/tags +$(BUILD_CMD) -C build doc_html functionaltest: | nvim +$(BUILD_CMD) -C build functionaltest functionaltest-lua: | nvim +$(BUILD_CMD) -C build functionaltest-lua lualint: | build/.ran-cmake deps $(BUILD_CMD) -C build lualint pylint: flake8 contrib/ scripts/ src/ test/ # Run pylint only if flake8 is installed. _opt_pylint: @command -v flake8 && { $(MAKE) pylint; exit $$?; } \ || echo "SKIP: pylint (flake8 not found)" unittest: | nvim +$(BUILD_CMD) -C build unittest benchmark: | nvim +$(BUILD_CMD) -C build benchmark test: functionaltest unittest clean: +test -d build && $(BUILD_CMD) -C build clean || true $(MAKE) -C src/nvim/testdir clean $(MAKE) -C runtime/doc clean distclean: rm -rf $(DEPS_BUILD_DIR) build $(MAKE) clean install: checkprefix nvim +$(BUILD_CMD) -C build install clint: build/.ran-cmake +$(BUILD_CMD) -C build clint clint-full: build/.ran-cmake +$(BUILD_CMD) -C build clint-full check-single-includes: build/.ran-cmake +$(BUILD_CMD) -C build check-single-includes generated-sources: build/.ran-cmake +$(BUILD_CMD) -C build generated-sources appimage: bash scripts/genappimage.sh # Build an appimage with embedded update information. # appimage-nightly: for nightly builds # appimage-latest: for a release appimage-%: bash scripts/genappimage.sh $* lint: check-single-includes clint lualint _opt_pylint # Generic pattern rules, allowing for `make build/bin/nvim` etc. # Does not work with "Unix Makefiles". ifeq ($(BUILD_TYPE),Ninja) build/%: $(BUILD_CMD) -C build $(patsubst build/%,%,$@) $(DEPS_BUILD_DIR)/%: $(BUILD_CMD) -C $(DEPS_BUILD_DIR) $(patsubst $(DEPS_BUILD_DIR)/%,%,$@) endif .PHONY: test lualint pylint functionaltest unittest lint clint clean distclean nvim libnvim cmake deps install appimage checkprefix neovim-0.4.3/README.md000066400000000000000000000151011356051414500142740ustar00rootroot00000000000000[![Neovim](https://raw.githubusercontent.com/neovim/neovim.github.io/master/logos/neovim-logo-300x87.png)](https://neovim.io) [Wiki](https://github.com/neovim/neovim/wiki) | [Documentation](https://neovim.io/doc) | [Chat/Discussion](https://gitter.im/neovim/neovim) | [Twitter](https://twitter.com/Neovim) [![Travis build status](https://travis-ci.org/neovim/neovim.svg?branch=master)](https://travis-ci.org/neovim/neovim) [![AppVeyor build status](https://ci.appveyor.com/api/projects/status/urdqjrik5u521fac/branch/master?svg=true)](https://ci.appveyor.com/project/neovim/neovim/branch/master) [![Codecov coverage](https://img.shields.io/codecov/c/github/neovim/neovim.svg)](https://codecov.io/gh/neovim/neovim) [![Coverity Scan analysis](https://scan.coverity.com/projects/2227/badge.svg)](https://scan.coverity.com/projects/2227) [![Clang analysis](https://neovim.io/doc/reports/clang/badge.svg)](https://neovim.io/doc/reports/clang) [![PVS-Studio analysis](https://neovim.io/doc/reports/pvs/badge.svg)](https://neovim.io/doc/reports/pvs/PVS-studio.html.d) [![Packages](https://repology.org/badge/tiny-repos/neovim.svg)](https://repology.org/metapackage/neovim) [![Debian CI](https://badges.debian.net/badges/debian/testing/neovim/version.svg)](https://buildd.debian.org/neovim) [![Downloads](https://img.shields.io/github/downloads/neovim/neovim/total.svg?maxAge=2592001)](https://github.com/neovim/neovim/releases/) Neovim is a project that seeks to aggressively refactor Vim in order to: - Simplify maintenance and encourage [contributions](CONTRIBUTING.md) - Split the work between multiple developers - Enable [advanced UIs] without modifications to the core - Maximize [extensibility](https://github.com/neovim/neovim/wiki/Plugin-UI-architecture) See the [Introduction](https://github.com/neovim/neovim/wiki/Introduction) wiki page and [Roadmap] for more information. Features -------- - Modern [GUIs](https://github.com/neovim/neovim/wiki/Related-projects#gui) - [API access](https://github.com/neovim/neovim/wiki/Related-projects#api-clients) from any language including C/C++, C#, Clojure, D, Elixir, Go, Haskell, Java, JavaScript/Node.js, Julia, Lisp, Lua, Perl, Python, Racket, Ruby, Rust - Embedded, scriptable [terminal emulator](https://neovim.io/doc/user/nvim_terminal_emulator.html) - Asynchronous [job control](https://github.com/neovim/neovim/pull/2247) - [Shared data (shada)](https://github.com/neovim/neovim/pull/2506) among multiple editor instances - [XDG base directories](https://github.com/neovim/neovim/pull/3470) support - Compatible with most Vim plugins, including Ruby and Python plugins See [`:help nvim-features`][nvim-features] for the full list! Install from package -------------------- Pre-built packages for Windows, macOS, and Linux are found on the [Releases](https://github.com/neovim/neovim/releases/) page. [Managed packages] are in Homebrew, [Debian], [Ubuntu], [Fedora], [Arch Linux], [Gentoo], and more! Install from source ------------------- The build is CMake-based, but a Makefile is provided as a convenience. make CMAKE_BUILD_TYPE=RelWithDebInfo sudo make install To install to a non-default location: make CMAKE_INSTALL_PREFIX=/full/path/ make install To skip bundled (`third-party/*`) dependencies: 1. Install the dependencies using a package manager. ``` sudo apt install gperf luajit luarocks libuv1-dev libluajit-5.1-dev libunibilium-dev libmsgpack-dev libtermkey-dev libvterm-dev sudo luarocks build mpack sudo luarocks build lpeg sudo luarocks build inspect ``` 2. Build with `USE_BUNDLED=OFF`: ``` make CMAKE_BUILD_TYPE=RelWithDebInfo USE_BUNDLED=OFF sudo make install ``` To inspect the build, these CMake features are useful: - `cmake --build build --target help` lists all build targets. - `build/CMakeCache.txt` (or `cmake -LAH build/`) contains the resolved values of all CMake variables. - `build/compile_commands.json` shows the full compiler invocations for each translation unit. See the [Building Neovim](https://github.com/neovim/neovim/wiki/Building-Neovim) wiki page for details. Transitioning from Vim -------------------- See [`:help nvim-from-vim`](https://neovim.io/doc/user/nvim.html#nvim-from-vim) for instructions. Project layout -------------- ├─ ci/ build automation ├─ cmake/ build scripts ├─ runtime/ user plugins/docs ├─ src/nvim/ application source code (see src/nvim/README.md) │ ├─ api/ API subsystem │ ├─ eval/ VimL subsystem │ ├─ event/ event-loop subsystem │ ├─ generators/ code generation (pre-compilation) │ ├─ lib/ generic data structures │ ├─ lua/ Lua subsystem │ ├─ msgpack_rpc/ RPC subsystem │ ├─ os/ low-level platform code │ └─ tui/ built-in UI ├─ third-party/ CMake subproject to build dependencies └─ test/ tests (see test/README.md) License ------- Neovim is licensed under the terms of the Apache 2.0 license, except for parts that were contributed under the Vim license. - Contributions committed before [b17d96][license-commit] remain under the Vim license. - Contributions committed after [b17d96][license-commit] are licensed under Apache 2.0 unless those contributions were copied from Vim (identified in the commit logs by the `vim-patch` token). See `LICENSE` for details. Vim is Charityware. You can use and copy it as much as you like, but you are encouraged to make a donation for needy children in Uganda. Please see the kcc section of the vim docs or visit the ICCF web site, available at these URLs: http://iccf-holland.org/ http://www.vim.org/iccf/ http://www.iccf.nl/ You can also sponsor the development of Vim. Vim sponsors can vote for features. The money goes to Uganda anyway. [license-commit]: https://github.com/neovim/neovim/commit/b17d9691a24099c9210289f16afb1a498a89d803 [nvim-features]: https://neovim.io/doc/user/vim_diff.html#nvim-features [Roadmap]: https://neovim.io/roadmap/ [advanced UIs]: https://github.com/neovim/neovim/wiki/Related-projects#gui [Managed packages]: https://github.com/neovim/neovim/wiki/Installing-Neovim#install-from-package [Debian]: https://packages.debian.org/testing/neovim [Ubuntu]: http://packages.ubuntu.com/search?keywords=neovim [Fedora]: https://apps.fedoraproject.org/packages/neovim [Arch Linux]: https://www.archlinux.org/packages/?q=neovim [Gentoo]: https://packages.gentoo.org/packages/app-editors/neovim neovim-0.4.3/appveyor.yml000066400000000000000000000023211356051414500154050ustar00rootroot00000000000000version: '{build}' environment: APPVEYOR_CACHE_ENTRY_ZIP_ARGS: "-t7z -m0=lzma -mx=9" DEPS_BUILD_DIR: "C:/projects/nvim-deps" DEPS_PREFIX: "C:/projects/nvim-deps/usr" # Silence/redirect errors due to missing locking support (via libgcov). GCOV_ERROR_FILE: "$(TEMP)/libgcov-errors.log" image: Visual Studio 2017 configuration: - MINGW_64-gcov - MINGW_32 - MSVC_64 - MSVC_32 init: - ps: | # Pull requests: skip some build configurations to save time. if ($env:APPVEYOR_PULL_REQUEST_HEAD_COMMIT -and $env:CONFIGURATION -match '^(MSVC_64|MINGW_32)$') { $env:APPVEYOR_CACHE_SKIP_SAVE = "true" Exit-AppVeyorBuild } # RDP #- ps: iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) matrix: fast_finish: true install: [] before_build: - ps: Install-Product node 8 build_script: - powershell ci\build.ps1 after_build: - ps: | if (Test-Path $env:GCOV_ERROR_FILE) { Get-Content $env:GCOV_ERROR_FILE -Head 10 Get-Content $env:GCOV_ERROR_FILE -Tail 10 } else { write-host "no GCOV_ERROR_FILE" } cache: - C:\projects\nvim-deps -> third-party\** artifacts: - path: build/Neovim.zip - path: build/bin/nvim.exe neovim-0.4.3/ci/000077500000000000000000000000001356051414500134125ustar00rootroot00000000000000neovim-0.4.3/ci/before_cache.sh000077500000000000000000000015501356051414500163370ustar00rootroot00000000000000#!/usr/bin/env bash set -e set -o pipefail CI_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "${CI_DIR}/common/build.sh" source "${CI_DIR}/common/suite.sh" echo "before_cache.sh: cache size" du -chd 1 "${HOME}/.cache" | sort -rh | head -20 echo "before_cache.sh: ccache stats" ccache -s 2>/dev/null || true # Do not keep ccache stats (uploaded to cache otherwise; reset initially anyway). find "${HOME}/.ccache" -name stats -delete # Update the third-party dependency cache only if the build was successful. if ended_successfully; then # Do not cache downloads. They should not be needed with up-to-date deps. rm -rf "${DEPS_BUILD_DIR}/build/downloads" rm -rf "${CACHE_NVIM_DEPS_DIR}" mv "${DEPS_BUILD_DIR}" "${CACHE_NVIM_DEPS_DIR}" touch "${CACHE_MARKER}" echo "Updated third-party dependencies (timestamp: $(_stat "${CACHE_MARKER}"))." fi neovim-0.4.3/ci/before_install.sh000077500000000000000000000027221356051414500167440ustar00rootroot00000000000000#!/usr/bin/env bash set -e set -o pipefail if [[ "${CI_TARGET}" == lint ]]; then exit fi echo 'Python info:' ( set -x python3 --version python2 --version python --version pip3 --version pip2 --version pip --version pyenv --version pyenv versions ) 2>&1 | sed 's/^/ /' || true # Use pyenv, but not for OSX on Travis, where it only has the "system" version. if [[ "${TRAVIS_OS_NAME}" != osx ]] && command -v pyenv; then echo 'Setting Python versions via pyenv' # Prefer Python 2 over 3 (more conservative). pyenv global 2.7.15:3.7 echo 'Updated Python info:' ( set -x python3 --version python2 --version python --version python3 -m pip --version python2 -m pip --version ) 2>&1 | sed 's/^/ /' fi echo "Install node (LTS)" if [[ "${TRAVIS_OS_NAME}" == osx ]] || [ ! -f ~/.nvm/nvm.sh ]; then curl -o ~/.nvm/nvm.sh https://raw.githubusercontent.com/creationix/nvm/master/nvm.sh fi source ~/.nvm/nvm.sh nvm install --lts nvm use --lts if [[ -n "$CMAKE_URL" ]]; then echo "Installing custom CMake: $CMAKE_URL" curl --retry 5 --silent --fail -o /tmp/cmake-installer.sh "$CMAKE_URL" mkdir -p "$HOME/.local/bin" /opt/cmake-custom bash /tmp/cmake-installer.sh --prefix=/opt/cmake-custom --skip-license ln -sfn /opt/cmake-custom/bin/cmake "$HOME/.local/bin/cmake" cmake_version="$(cmake --version)" echo "$cmake_version" | grep -qF '2.8.12' || { echo "Unexpected CMake version: $cmake_version" exit 1 } fi neovim-0.4.3/ci/before_script.sh000077500000000000000000000017331356051414500166030ustar00rootroot00000000000000#!/usr/bin/env bash set -e set -o pipefail if [[ "${CI_TARGET}" == lint ]]; then exit fi CI_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "${CI_DIR}/common/build.sh" # Test some of the configuration variables. if [[ -n "${GCOV}" ]] && [[ ! $(type -P "${GCOV}") ]]; then echo "\$GCOV: '${GCOV}' is not executable." exit 1 fi if [[ -n "${LLVM_SYMBOLIZER}" ]] && [[ ! $(type -P "${LLVM_SYMBOLIZER}") ]]; then echo "\$LLVM_SYMBOLIZER: '${LLVM_SYMBOLIZER}' is not executable." exit 1 fi echo "before_script.sh: ccache stats (will be cleared)" ccache -s # Reset ccache stats for real results in before_cache. ccache --zero-stats if [[ "${TRAVIS_OS_NAME}" == osx ]]; then # Adds user to a dummy group. # That allows to test changing the group of the file by `os_fchown`. sudo dscl . -create /Groups/chown_test sudo dscl . -append /Groups/chown_test GroupMembership "${USER}" fi # Compile dependencies. build_deps rm -rf "${LOG_DIR}" mkdir -p "${LOG_DIR}" neovim-0.4.3/ci/build.ps1000066400000000000000000000117251356051414500151440ustar00rootroot00000000000000$ErrorActionPreference = 'stop' Set-PSDebug -Strict -Trace 1 $isPullRequest = ($env:APPVEYOR_PULL_REQUEST_HEAD_COMMIT -ne $null) $env:CONFIGURATION -match '^(?\w+)_(?32|64)(?:-(?