neovim/CMakeLists.txt

312 lines
10 KiB
CMake
Raw Normal View History

# CMAKE REFERENCE
# intro: https://codingnest.com/basic-cmake/
# best practices (3.0+): https://gist.github.com/mbinna/c61dbb39bca0e4fb7d1f73b0d66a4fd1
# pitfalls: https://izzys.casa/2019/02/everything-you-never-wanted-to-know-about-cmake/
# Version should match the tested CMAKE_URL in .github/workflows/build.yml.
cmake_minimum_required(VERSION 3.10)
# Can be removed once minimum version is at least 3.15
if(POLICY CMP0092)
cmake_policy(SET CMP0092 NEW)
endif()
project(nvim C)
2022-03-03 04:20:21 -07:00
if(POLICY CMP0075)
cmake_policy(SET CMP0075 NEW)
endif()
2014-02-24 13:54:45 -07:00
# Point CMake at any custom modules we may ship
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
2014-02-24 13:54:45 -07:00
include(CheckCCompilerFlag)
include(CheckCSourceCompiles)
include(FindPackageHandleStandardArgs)
include(InstallHelpers)
include(LuaHelpers)
include(PreventInTreeBuilds)
include(Util)
set(TOUCHES_DIR ${PROJECT_BINARY_DIR}/touches)
find_program(CCACHE_PRG ccache)
if(CCACHE_PRG)
set(CMAKE_C_COMPILER_LAUNCHER ${CMAKE_COMMAND} -E env CCACHE_SLOPPINESS=pch_defines,time_macros ${CCACHE_PRG})
endif()
# 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}
-D CMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
-D CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
-D CMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-D CMAKE_C_FLAGS=${CMAKE_C_FLAGS}
-D CMAKE_C_FLAGS_DEBUG=${CMAKE_C_FLAGS_DEBUG}
-D CMAKE_C_FLAGS_MINSIZEREL=${CMAKE_C_FLAGS_MINSIZEREL}
-D CMAKE_C_FLAGS_RELWITHDEBINFO=${CMAKE_C_FLAGS_RELWITHDEBINFO}
-D CMAKE_C_FLAGS_RELEASE=${CMAKE_C_FLAGS_RELEASE}
-D CMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}
${PROJECT_SOURCE_DIR}/cmake.deps
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()
list(INSERT CMAKE_PREFIX_PATH 0 ${DEPS_PREFIX})
if(APPLE)
# If the macOS deployment target is not set manually (via $MACOSX_DEPLOYMENT_TARGET),
# fall back to local system version. Needs to be done both here and in cmake.deps.
if(NOT CMAKE_OSX_DEPLOYMENT_TARGET)
execute_process(COMMAND sw_vers -productVersion
OUTPUT_VARIABLE MACOS_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE)
set(CMAKE_OSX_DEPLOYMENT_TARGET "${MACOS_VERSION}")
endif()
message(STATUS "Using deployment target ${CMAKE_OSX_DEPLOYMENT_TARGET}")
2017-01-17 08:32:41 -07:00
endif()
if(WIN32 OR APPLE)
# Ignore case when comparing filenames on Windows and Mac.
set(CASE_INSENSITIVE_FILENAME TRUE)
2017-01-17 08:32:41 -07:00
# Enable fixing case-insensitive filenames for Windows and Mac.
set(USE_FNAME_CASE TRUE)
endif()
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}")
set_default_buildtype()
# 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)
2022-09-30 08:26:25 -07:00
set(NVIM_VERSION_MINOR 9)
2023-04-07 04:54:30 -07:00
set(NVIM_VERSION_PATCH 1)
set(NVIM_VERSION_PRERELEASE "-dev") # for package maintainers
# API level
2022-05-02 12:10:01 -07:00
set(NVIM_API_LEVEL 11) # Bump this after any API change.
set(NVIM_API_LEVEL_COMPAT 0) # Adjust this after a _breaking_ API change.
NVIM v0.9.0 For a summary of notable changes, see runtime/doc/news.txt or run `:help news` within nvim. BREAKING CHANGES - Remove hardcopy - Make iconv a non-optional dep - Remove has("debug") (#22060) - Make libintl a required dependency - Rename vim.pretty_print => vim.print - Rename sanitizer options from CLANG_* to ENABLE_* - Remove the .deb release (#22773) - **column**: Ensure 'statuscolumn' works with virtual and wrapped lines - **cscope**: Remove - **defaults**: Change default 'commentstring' value to empty (#22862) - **edit**: Remove old c implementation of hebrew keymap - **editorconfig**: Change editorconfig_enable to editorconfig - **exepath**: Prefers extensionless for powershell - **health**: Remove deprecated health.lua - **lsp**: Add rule-based sem token highlighting (#22022) - **lua**: Execute Lua with "nvim -l" - **messages**: Graduate the 'msgsep' feature - **options**: Deprecate paste, remove pastetoggle (#22647) - **rpc**: Preseve files when stdio channel is closed (#22137) - **runtime**: Remove filetype.vim (#20428) - **treesitter**: Remove g:ts_highlight_lua (#22257) - **treesitter**: Remove silent option from language.add() - **treesitter**: Consolidate query util functions - **treesitter**: Remove deprecated show_tree func - **treesitter**: Deprecate top level indexes to modules (#22761) - **treesitter**: Rename help parser to vimdoc FEATURES - Added support for @generic to lua2dox.lua - Added support for optional params to lua2dox - Added support for specifying types for lua2dox - Mention ":help news" in intro #20674 - ":write ++p" creates parent dirs #20835 - Add vim.secure.read() - `vim.inspect_pos`, `vim.show_pos`, `:Inspect` - $NVIM_APPNAME #22128 - Try to recover from missing tempdir #22573 - Add `vim.filetype.get_option()` - Add `vim.treesitter.language.get_filetypes()` (#22643) - Allow function passed to defaulttable to take an argument (#22839) - **api**: Nvim_select_popupmenu_item support cmdline pum (#20652) - **api**: Add command name to Lua command callback opts - **api**: Show more exception info - **api**: More fields in nvim_list_uis - **api**: Add filetype option nvim_get_option_value - **api**: Add nvim_get_hl (#22693) - **api**: Nvim_exec2(), deprecate nvim_exec() #19032 - **api**: Evaluate 'statuscolumn' with nvim_eval_statusline() - **api**: Set statuscolumn line number in nvim_eval_statusline() - **aucmd_win**: Allow crazy things with hidden buffers (#21250) - **checkhealth**: Improve treesitter report - **checkhealth**: Check runtime ($VIMRUNTIME) - **checkhealth**: Use "help" syntax, avoid tabpage #20879 - **clipboard**: Copy to system clipboard in tmux when supported (#20936) - **clipboard**: Added wayclip support (#21091) - **diagnostic**: Add `suffix` option to `open_float()` (#21130) - **diagnostic**: Add `suffix` option to `virt_text` config (#21140) - **diagnostic**: Don't open quickfix/loclist if no diagnostics #21397 - **diagnostic**: Vim.diagnostic.is_disabled() #21527 - **diagnostic**: Add support for tags - **docs**: Nested lists in HTML, update :help parser - **docs**: Format parameters as a list #20485 - **docs**: Update parser, HTML gen #20720 - **docs-html**: Try to use tags for ToC headings - **editorconfig**: Add builtin EditorConfig support - **editorconfig**: Add editorconfig syntax file - **editorconfig**: Allow editorconfig to be toggled dynamically - **exrc**: Use vim.secure.read() for 'exrc' option - **exrc**: Support .nvim.lua (#21436) - **extmarks**: Allow preventing spellchecking with spell = false - **extmarks**: Extend nvim_buf_get_extmarks() - **filetype**: Fall back to file extension when matching from hashbang (#22140) - **float**: Open float relative to mouse #21531 - **fs**: Add opts argument to vim.fs.dir() - **gen_help_html.lua**: Remove old AWK scripts - **health**: Detect tmux RGB support via `client_termfeatures` - **help**: Highlighted codeblocks - **highlight**: Add DiagnosticOk (and associated) highlight groups (#21286) - **highlight**: Define the concept of altfont as a (c)term rendering attribute - **l10n**: Update Turkish translations (#20444) - **l10n**: Update zh_CN translations (#21085) - **lsp**: Add bufnr option to lsp.start (#20473) - **lsp**: Support window/showDocument (#19977) - **lsp**: Run handler in coroutine to support async response (#21026) - **lsp**: Support set title in lsp relate floatwindow (#21110) - **lsp**: Support willSave & willSaveWaitUntil capability (#21315) - **lsp**: Initial support for semantic token highlighting - **lsp**: Highlight semantic token modifiers (#21390) - **lsp**: Add function to get semantic tokens at cursor - **lsp**: Add function to clear codelens (#21504) - **lsp**: Show active clients in :checkhealth vim.lsp (#21670) - **lsp**: Add triggerKind option for vim.lsp.buf.code_action (#21905) - **lsp**: Implement workspace/didChangeWatchedFiles (#21293) - **lsp**: Implement workspace/didChangeWatchedFiles (#22405) - **lsp**: Overwrite omnifunc/tagfunc set by ftplugin #22267 - **lsp**: Render markdown in docs hover #22766 - **lsp**: Create default link from @lsp.type.comment to Comment (#22888) - **lua**: Send "--" literally to Lua "-l" script - **lua**: Exit 1 on Lua "-l" script error - **lua**: Execute stdin ("-") as Lua - **lua**: Store "nvim -l" scriptname in _G.arg[0] - **lua**: Low-level interpreter mode (nvim -ll) - **lua**: Make sure require'bit' always works, even with PUC lua 5.1 - **lua**: Add semver api - **lua**: Omnifunc for builting lua interpreter - **lua**: Use vim.empty_dict() for empty return value in new api functions (#22737) - **lua**: Allow `:=expr` as a shorter version of `:lua =expr` - **lua**: Add `vim.loader` - **lua-api**: Avoid unnecessary allocations (#19877) - **man**: Add health check - **man.lua**: Support spaces in manpage names - **message**: Avoid spam on failed os_msg - **packaging**: Add start menu and desktop shortcuts on Windows - **provider**: Add support for Yarn node modules on Windows (#21246) - **secure**: Add `:trust` command and vim.secure.trust() (#21107) - **spell**: Support nospell in treesitter queries - **spell**: Also source `spell/LANG.lua` when setting `spelllang` (#22111) - **test**: Add Lua forms for API methods (#20152) - **treesitter**: Add vim.treesitter.show_tree() (#21322) - **treesitter**: Add 'lang' option to show_tree() (#21341) - **treesitter**: Show filetype associated with parser (#17633) - **treesitter**: Allow capture text to be transformed - **treesitter**: Add metadata option for get_node_text - **treesitter**: Respect metadata[id].range for offset! - **treesitter**: Playground improvements - **treesitter**: Add filetype -> lang API - **treesitter**: Upstream foldexpr from nvim-treesitter - **treesitter**: Expand the API - **treesitter**: Add :InspectTree command (#22477) - **treesitter**: Bundle query parser and queries (#22483) - **treesitter**: Use upstream format for injection queries - **tui**: Run TUI as external process - **tui**: Graduate the +tui feature - **tui**: Support altfont mode in tui.c - **ui**: Add support to display a title in the border of a float (#20184) - **ui**: Add 'statuscolumn' option - **ui**: Restore has('gui_running') - **ui**: Add scroll_delta to win_viewport event #19270 - **vim-patch**: Mention original author #20772 - **vim.diff**: Allow passing an integer for linematch - **vim.fs**: Pass path to find() predicate, lazy evaluate #22378 - **vim.fs**: Improve normalize - **vim.gsplit**: Gain features of vim.split - **vim.version**: More coercion with strict=false - **web**: Syntax highlighting via highlight.js - **window/ui**: Add splitkeep option (#19243) - **windows**: Show icon in terminal titlebar, taskbar #20607 PERFORMANCE - **column**: Only build fold/sign column when present in 'statuscolumn' - **completion**: Use one call to globpath() for .vim and .lua #21942 - **diagnostic**: Use api variable and improve validate (#21111) - **lsp**: Update semantic tokens algorithm for parsing modifiers (#21383) - **lsp**: Only redraw the windows containing LSP tokens - **lsp**: Better binary search mid calculation in semantic token (#22607) - **statuscolumn**: Only fill click defs array once per redraw (#21884) - **statusline**: UI elements are always redrawn on K_EVENT - **treesitter**: Smarter languagetree invalidation - **treesitter**: More efficient foldexpr - **ui**: Mitigate redraw latency regression from TUI refactor BUG FIXES - Make_filter_cmd for :! powershell - :! pwsh redirection for `command not found` - Find multibyte file name in line (#20519) - Change did_emsg back to int - 'scroll' is not set correctly for floats with 'splitkeep' - Setting tabline option not redrawing tabline - Avoid unsigned overflow in home_replace() (#20854) - Add lfs to luarc.json (#20979) - Vim.ui.input always calls callback #21006 - Don't disable compositor widgets when a GUI with multigrid attaches - Pvs warnings (#21145) - Clang warnings (#21247) - Vim.opt_local:append ignoring global option value (#21382) - Issues with command line if ui elements are externalized - Properly close builtin popup in ext_popupmenu - Failing XDG test on Windows CI - Pass value instead of pointer to isalpha (#21898) - Use correct number for INT_MAX (#21951) - Add manifest file to correctly determine Windows version (#21953) - Uv_tty_set_mode failed in Windows #22264 - Lsp github issue template example (#22285) - Remove "Features" section from --version/:version (#22315) - Remove "Compiled by:" from :version/--version (#22316) - Add missing void as function argument (#22317) - Windows assertion failure due to incorrect path length (#22324) - Resolve error from -Werror=maybe-uninitialized - Address -Wmaybe-uninitialized warnings (#22436) - Pasting in terminal buffer on windows #22566 - Invalid buffer size argument to snprintf #22729 - Snprintf buffer overflow detected by -D_FORTIFY_SOURCE=3 (#22780) - **MSVC**: Set the active code page to utf-8 (#22384) - **Windows**: Restore console title at exit #21922 - **api**: Dynamically allocate line buffer for nvim_out_write (#20537) - **api**: Nvim_buf_get_text regression (#21071) - **api**: Nvim_win_set_cursor redraw cursorcolumn for non-current window (#21072) - **api**: Set correct curbuf when temporarily changing curwin (#21371) - **api**: "emsg_silent" should imply "silent" in nvim_cmd (#21438) - **api**: Nvim_create_autocmd crash on invalid types inside pattern array - **api**: Avoid memory leak with click functions in nvim_eval_statusline() (#21845) - **api**: Don't allow hiding aucmd_win from another tabpage (#21975) - **api**: Allow empty Lua table for nested dicts #22268 - **api**: Set script context when setting usercmd or option (#22624) - **api**: Vim.filetype.get_option() (#22753) - **api**: Make nvim_get_hl return 'cterm' attrs properly - **api**: Use local LastSet structure in nvim_get_option_info (#22741) - **api**: Return both link and attributes with nvim_get_hl (#22824) - **api**: Avoid double hit-enter prompt with nvim_err_writeln (#22879) - **autocmd**: Handle recursion for force set (#22820) - **buffer_updates**: Save and restore current window cursor (#16732) - **build**: "make clean" fails - **build**: Duplicate version string "v0.8.0-v0.8.0" #20578 - **build**: Fix invalid use of EXITFREE - **chansend**: Sending lines to terminal in reverse order on Windows #19315 - **ci**: Skip test on windows (#21502) - **ci/release/winget**: Bump action version - **client**: Wait for session to exit - **clint**: Disable whitespace/newline #20619 - **clipboard**: Prefer xsel #20918 - **clipboard**: Update version regex pattern (#21012) - **clipboard**: Show provider warning when not during batch changes #21451 - **column**: Avoid drawing columns for virt_lines_leftcol - **column**: Estimate 'statuscolumn' width appropriately - **column**: No longer reset nrwidth_line_count for 'statuscolumn' - **column**: Cmdwin cursor is offset with 'statuscolumn' (#22445) - **column**: Issues with 'statuscolumn' width (#22542) - **column**: Rebuild status column when sign column is invalidated (#22690) - **column**: Invalidate statuscolumn width when UPD_NOT_VALID (#22723) - **completion**: Set pum_size even if ext_popupmenu is used (#20648) - **completion**: Correct what modes support fuzzy completion - **completion**: Include lua syntaxes in :ownsyntax completion (#21941) - **coverity/433537**: Don't call kv_concat_len() when read_size is 0 (#21664) - **decoration**: Redraw correctly when re-using ids - **decoration**: Call providers in win_update() earlier - **decoration**: Do not reset must_redraw after calling providers (#21459) - **decoration**: Don't show signcolumn for non-sign_text extmark (#22135) - **diagnostic**: Correct type annotations; add Diagnostic type (#21120) - **diagnostic**: Clear stale cache on reset (#21454) - **diagnostic**: Sort diagnostics by column (#21457) - **diagnostic**: Revert notification on missing diagnostics (#21632) - **diagnostic**: Use correct field name for tags (#22835) - **diff**: Remove size_t underflow (#20929) - **diff**: Fix a crash in diff mode with linematch enabled (#21070) - **diff**: Handle long lines without crashing (#21389) - **diff**: Avoid restoring invalid 'foldcolumn' value (#21650) - **diff**: "nvim -d" should only diff arglist files #21829 - **diff**: Adjust extmarks after diffput/diffget (#22440) - **diff**: Add NULL check - **diff**: Trigger on_bytes only once after diffget/diffput - **diff.c**: Regression in diffgetput (#20843) - **docs**: Missing "(" in :help HTML - **docs**: Nil as viable argument for goto_prev (#20852) - **docs-html**: Keycodes, taglinks, column_heading #20498 - **docs-html**: Update parser - **docs-html**: Misaligned tabs after conceal #20690 - **edit**: Don't subtract msg_scrolled when removing double quote (#22630) - **editorconfig**: Do not highlight unknown properties as errors (#21673) - **embed**: Handle stdio in server properly - **eval**: Make error number of charidx() same as Vim - **eval**: Change some tv_dict_add() usages back to hash_add() - **events**: Save v:event for cmdline autocommands separately (#21316) - **events**: Skip WinScrolled for newly-created float windows (#21333) - **ex_cmds**: Fix a mistake in the porting of Vim patch 8.1.0306 (#21096) - **exit**: The TUI should not ui_flush() itself (#21625) - **exit**: Skip unnecessary steps in TUI preserve_exit() (#21897) - **extmarks**: Adjust extmarks when inserting prompt prefix - **extmarks**: Problems with folded virtual lines (#21930) - **extmarks**: Don't leak memory on error (#22507) - **fileio**: Use first available directory in backupdir for backupcopy (#20655) - **fileio.c**: Don't use uninitialized memory (#22031) - **filetype**: Don't pass empty string to detect (#20766) - **filetype**: Correctly detect tex files - **filetype**: Make vim.filetype.match() work with contents only (#22181) - **filetype**: Avoid recursive FileType autocmds (#22813) - **filetype**: Make recursive work...again (#22826) - **float**: Make closing float in another tab return to correct window - **float**: Fix ml_get error with bufpos - **float**: Fix crash with bufpos and non-existent window (#21319) - **float**: Remove -1 in height clamp - **folds**: Fix fold marker multibyte comparison (#20439) - **folds**: Use long for number of folded lines (#21447) - **folds**: Cursorline highlight is not always applied on closed folds (#22242) - **folds**: Handle visual blockwise indent insertion correctly (#22898) - **fs**: Duplicate path separator #21509 - **health**: Correct tmux rgb verification (#20868) - **health**: Fix `tmux_esc_time` comparison - **health**: Iterate using ipairs correctly (#22119) - **health**: Stop using deprecated ts.language.inspect_language() (#22850) - **help**: Force tree reparse after local addition insertion - **helpers**: Restore channel id after a call to WITH_SCRIPT_CONTEXT - **highlight**: Link more treesitter groups by default (#20711) - **highlight**: Properly deal with underline mask when listing (#22057) - **highlight**: Avoid ORing underline flags (#22372) - **highlight**: Use winhl=Foo:Bar even when Bar is empty - **inspect**: Alwasy resolve full treesitter lang hl groups - **intro**: Omit patch version in ":help news" item #20713 - **intro**: Make :help news line easier to translate (#21974) - **lintcommit**: Capitalized description #22282 - **loader**: Disable profiling by default - **lsp**: Reporting bogus capabilities in CodeActionKind #20678 - **lsp**: Ignore hover and signatureHelp responses on buffer change (#21121) - **lsp**: Render <pre>{lang} code blocks and set separator default to false (#21271) - **lsp**: Remove workspaceFolders field (#21284) - **lsp**: Call show_document with correct args - **lsp**: Ensure open_logfile is safe for fast events (#21288) - **lsp**: Followup fixes for semantic tokens support (#21357) - **lsp**: Correct some type annotations (#21365) - **lsp**: Fix get_active_clients bufnr parameter (#21366) - **lsp**: Ignore null responses for semanticTokens request (#21364) - **lsp**: Token_edit.data might be null on deletion (#21462) - **lsp**: Adjust gravity of semantic tokens extmarks (#21574) - **lsp**: Fix nil client access in get_active_clients (#21524) - **lsp**: Change vim.lsp.get_active_clients.filter name annotation to string (#21624) - **lsp**: Correct callHierarchy capability to fix lsp.buf.incoming_calls() (#21665) - **lsp**: Fix `removed` param value in add_workspace_folder (#21915) - **lsp**: Assert workspace/applyEdit receives params (#21945) - **lsp**: Check method is supported when range formatting (#21970) - **lsp**: Check if the buffer is a directory before w! it (#22289) - **lsp**: Wrong format of bufnr and client order in error message (#22336) - **lsp**: Fix some type annotations (#22397) - **lsp**: CallHierarchy methods also require the callHierarchyProvider (#22427) - **lsp**: Use buffer scheme for files not stored on disk (#22407) - **lsp**: Only fire LspDetach for attached buffers (#22468) - **lsp**: Don't monitor files if workspace_folders is nil (#22531) - **lsp**: Change LspTokenUpdate to use buffer instead of pattern (#22559) - **lsp**: Prevent lsp tests from picking up local user config (#22606) - **lsp**: Send didClose on buffer rename (#22623) - **lsp**: Use line start/end for visual line selection (#22632) - **lsp**: Remove_workspace_folders fails if client has no workspace_folders #22633 - **lsp**: Vim.lsp.util.apply_text_edits cursor validation #22636 - **lsp**: Kill buffers after renaming a directory #22618 - **lsp**: Avoid switching buffers on lsp attach (#22689) - **lsp**: Jump to tag locations reliably when :ltag is used (#22750) - **lsp**: Add missing silent check in lsp hover handler (#22763) - **lsp/window_showDocument**: Correctly handle external resources #20867 - **lua**: Properly configure luacheck and remove `local vim = ...` lines (#20551) - **lua**: Assert failure with vim.regex() error inside :silent! (#20555) - **lua**: On_yank error with blockwise multibyte region #20162 - **lua**: Pesc, tbl_islist result types #20751 - **lua**: Make `vim.deepcopy` work with `vim.NIL` - **lua**: Always return nil values in vim.tbl_get when no results - **lua**: Mark some eval functions that can run in API-fast - **lua**: Vim.deprecate() shows ":help deprecated" #22677 - **luado**: Get old_line length before executing Lua code - **man**: Support MacOS 13 - **man**: Handle absolute paths as `:Man` targets (#20624) - **man**: Use italics for `<bs>_` (#22086) - **man.lua**: Set modifiable before writing page (#20914) - **man.lua**: Use `env` command (#21007) - **man.lua**: Open in current window if it's already a man page (#21987) - **man.lua**: Tests, naming - **mappings**: Use all buckets in second round of unmap (#21534) - **mappings**: Fix check for cpo-B inverted in completion - **mappings**: Make "<" escaping in completion match Vim - **mark**: Do not restore view in op-pending mode (#20889) - **memline**: Use long instead of linenr_T for db_line_count - **memory**: Fix memory alignment for dynamic allocation - **messages**: Reset msg_grid_scroll_discount when redrawing (#21000) - **messages**: Don't set cmdline_row when messages have scrolled (#21015) - **mouse**: Ensure no scrolling with "ver:0" in 'mousescroll' (#20861) - **mouse**: Statusline click registered as statuscolumn (#21748) - **options**: No matter what is said, 'cmdheight' is tab-local (susy baka) - **options**: Fix local 'sidescrolloff' doesn't work for mouse (#21162) - **options**: Restore exists() behavior for options (#21510) - **paste**: Feed keys as typed in cmdline mode (#20959) - **path**: Don't remove trailing slash when getting absolute path (#20853) - **powershell**: Wrong length allocation for ":%w !" #20530 - **qflist**: Avoid read of uninitialized memory (#20709) - **rbuffer**: Handle edge case where write_ptr has wrapped around - **redraw**: Get the line again after evaluating something - **remote**: Don't leak memory on failure to connect to server (#21931) - **rpc**: Don't free args on error in rpc_send_event - **rpc**: Don't parse msgpack if buflen is 0 (#21899) - **rpc**: Ignore redraw events when not in UI client (#21892) - **rpc**: Ignore redraw events when exiting (#22184) - **runtime**: Properly rely on t_Co for colorschemes (#20602) - **runtime**: Use `g:terminal_color_{0-15}` in colorschemes (#20637) - **screen**: Correctly draw background and eob with 'rightleft' (#22640) - **screen**: Redraw the ruler for a current floating window - **secure**: Crash when hitting escape in prompt (#21283) - **shell**: On Windows :make does not echo #22728 - **showcmd**: Assert failure with cmdheight=0 (#21536) - **sleep**: Correct cursor placement (#22639) - **spell**: Fix wrong cast (#20810) - **spell**: Properly source spell/LANG.{vim,lua} (#22716) - **startup**: Support .exrc or .nvimrc with init.lua (#21181) - **status**: Handle unprintable chars in the statusline - **statuscolumn**: Fix crashes and clang/PVS warnings (#21725) - **statuscolumn**: Fix sign column highlights (#21727) - **statuscolumn**: Foldcolumn buffer is too small (#21761) - **statuscolumn**: Make %l/%r respect 'number'/'relativenumber' (#21747) - **statuscolumn**: Always fill click defs array (#21878) - **statusline**: Don't show showcmd when not enough space (#21550) - **statusline**: Make nvim_eval_statusline() work with %S (#21553) - **statusline**: Don't leak memory with zero-width click labels - **statusline**: Don't leak memory with truncated click labels - **stdpath**: Default to /tmp if stdpath('run') cannot be created #20952 - **syntax**: Correct conceal for annotated code blocks (#21272) - **tabline**: Avoid memory leak in tabline click definitions (#21847) - **terminal**: Fix 'mousescroll' not respected in terminal mode (#21415) - **test**: Unset XDG_CONFIG_HOME when running oldtest - **test**: Fix issues detected by running unittests in ASAN/UBSAN - **test**: Fix C imports on macOS arm64 - **tests**: Only get the color map once, even for multiple test files - **tests**: Initialize Screen.colors in API highlight tests - **tests**: Use -l mode for lsp tests - **tests**: Fixes for using vim.mpack and more ASAN - **tests**: Adapt treesitter/highlight_spec priority test - **treesitter**: Properly restore `'syntax'` (#21358) - **treesitter**: Really restore syntax - **treesitter**: Validate language name - **treesitter**: Fix most diagnostics - **treesitter**: Don't trample parsers when filetype!=lang - **treesitter**: Make params optional - **treesitter**: Fixup language invalidation (#22381) - **treesitter**: Remove virtual text from playground - **treesitter**: Ipairs -> pairs - **treesitter**: Fixup for health - **treesitter**: Maintain cursor position when toggling anonymous nodes - **treesitter**: Disallow empty filetypes - **treesitter**: Typos in _range.lua - **treesitter**: Break early from loop when match is found (#22499) - **treesitter**: Raise ts_match_limit to 256 (#22497) - **treesitter**: Is_in_node_range (#22582) - **treesitter**: Correct include_bytes arg for parse() - **treesitter**: Do not error on empty filetype - **treesitter**: Better lang handling of get_parser() - **treesitter**: Foldexpr (#22652) - **treesitter**: InspectTree does not respect 'splitright' #22692 - **treesitter**: Annotations - **treesitter**: Add missing deprecate - **treesitter**: Update queries from nvim-treesitter - **treesitter**: Use capture metadata range if exists - **treesitter**: Disable folding in inspect_tree() (#22885) - **treesitter**: Do not track ranges of the root tree (#22912) - **ts**: Check buffer is loaded when restoring options (#21419) - **tui**: Resume main thread if suspending isn't implemented (#20523) - **tui**: Set cursor color param as string when required #21407 - **tui**: More work in the TUI - **tui**: Do not set ui_client_termname if it is already set (#21607) - **tui**: Make a copy of data->params before unibi_format() (#21643) - **tui**: Do not invoke loop recursively for pad() - **tui**: Set stdin as "blocking" on exit (#21973) - **tui**: Detach/attach on suspend/resume (#22040) - **tui**: Exit on input eof - **tui**: Set taskbar, icon in Windows #22270 - **tui**: Only forward stdin_fd on first attach (#22293) - **tui**: Properly check if stdin is a tty (#22321) - **tui**: Avoid stack-use-after-scope with cursor color (#22435) - **tutor**: Failing to get buf name #20933 - **ui**: Msg_ext_set_kind for nvim_echo (#20476) - **ui**: Setting 'cmdheight' with global statusline (#20515) - **ui**: Send grid_resize events before triggering VimResized (#20760) - **ui**: Fix some cases of stale highlight definitions - **ui**: Allow resize commands to set 'cmdheight' to 0 - **ui**: Fix fragile UI_CALL macro invocation (#21656) - **ui**: Convert title_pos string in nvim_win_get_config - **ui**: Set stc to empty in floatwin with minimal style (#21720) - **ui**: Command line issues with external messages (#21709) - **ui**: Re-organize tty fd handling and fix issues - **ui**: Make sure screen is valid after resizing - **ui**: Recording change doesn't trigger statusline redraw - **ui**: Ruler is not redrawn in cmdline with redrawstatus - **ui-ext**: Correct message kind in history before vim.ui_attach() - **ui-ext**: Log and clear error in ui_comp_event (#21147) - **ui-ext**: Force cursor update after resize in char-based UI - **unittest**: Delete unused duplicated code - **unittests**: Do not consider process crash to be a success - **unittests**: Fix TUI broken test previously ignored - **vim-patches**: Ensure libfuse is installed - **vim.diff**: Correctly apply hunk offsets with linematch (#20931) - **vim.diff**: Fix fastforward off-by-1 (#20937) - **vim.ui.input**: Return empty string when inputs nothing (#20883) - **vim.version**: Incorrect version.cmp() - **vim.version**: Prerelease compare - **win_close**: Remove float grid after closing buffer (#21551) - **win_update**: Don't use unintialized memory in edge case (#22266) - **windows**: Set console icon later in startup - **windows**: Consistent normalization in fs.find BUILD SYSTEM! - Remove unused variable CMAKE_C_COMPILER_ARG1 - Remove code for cross-compilation - Remove url for 32-bit winyank - Remove unnecessary translation-related code - Rely on builtin cmake downloading rather than custom script - Define EP_PREFIX property - Only generate compilation database for the nvim target (#20449) - Remove EXITFREE for debug builds - Generate compilation database for older cmake versions - Add clang-tidy configuration file (#15601) - Fix incorrect clang-tidy identifier rules (#20650) - Rely on default cmake installation if possible - Give example on complex regexes - Preprocess vim patches with uncrustify #20786 - Copy each treesitter parser library individually #20797 - Fix plural messages missing from .po files (#20830) - Make update-po support optwin.vim (#20840) - Remove python linting #20851 - Add EXCLUDE option to add_glob_target - Always ignore user's cmake preset (#20935) - Allow IWYU to fix includes for all .c files - Restrict `git describe` to top level source directory (#20993) - Fix help tags generation when SHELL=fish (#21562) - Add git sha to version when built with nix flake (#21210) - Remove workaround for old luajit versions - Remove workaround for ancient clang versions - Use modern cmake (#21589) - Include our libraries before system libraries (#21746) - Enable iwyu with target properties instead of variables (#21797) - Exclude tui/terminfo_defs.h from lintc-clint (#21822) - Enable cmake workflow presets (#21860) - Remove nvim as a dependency of unittests (#21903) - Various cmake fixes (#21902) - Bump MSVC warning to level two (#21890) - Use CMAKE_POSITION_INDEPENDENT_CODE instead of -fPIC (#21947) - Make generated source files reproducible #21586 - Remove unnecessary unit test code (#21940) - Use cmake for all platforms for unibilium and libtermkey (#21926) - Simplify treesitter installation (#21969) - Use upstream CMakeLists.txt for unibilium (#21976) - Delete pthreads import (#21732) - Remove GNU make check (#21977) - Remove tests for libtermkey (#21983) - Use cmake to build treesitter on all platforms (#21984) - Introduce default build variables (#21991) - Use cmake to build libvterm on all platform (#21986) - Check if libvterm version meets requirement (#22010) - Find unibilium without relying on libfindmacros (#22015) - Fix dependencies in find modules (#22017) - Enable ccache by default if available (#22020) - Enable ccache project-wide (#22045) - Add uninstall make target (#22059) - Remove unnecessary file generation (#22099) - Update release data - Stop relying on CMAKE_BUILD_TYPE to determine the build type (#22051) - Unbreak building neovim with multi-config generators (#22104) - Don't build libnvim when running the CI (#22149) - Remove duplicate INTERFACE keyword (#22106) - Prefer -D <variable>=<value> over -D<variable>=<value> (#22164) - Replace check-single-includes with clang-tidy (#22061) - Remove unused function get_test_target (#22176) - Reuse source files with interface library (#22177) - Create test/CMakeLists.txt and move test-related code (#22179) - Remove codecov related files (#20859) - Mark uninteresting variables as advanced (#22208) - Enable MSVC level 3 warnings (#21934) - Don't check environment variable to detect CI (#22234) - Treat clang-tidy warnings as errors (#22238) - Remove ENABLE_COMPILER_SUGGESTIONS option (#22249) - Only use HOSTNAME_PRG if HOSTNAME is undefined (#22288) - Use custom command to create single versiondef (#22290) - Use libuv config file (#22209) - Test multi-config generator (#22310) - Build all dependencies in parallel (#22329) - Remove unused dependency penlight (#22334) - Build luajit in parallel (#22327) - Set libtermkey project language to C (#22410) - Remove pkgconfig-related code (#22422) - Remove libfindmacros library (#22423) - Cmake cleanup (#22251) - Unset variables ending with "URL" if USE_EXISTING_SRC_DIR is ON - Show build type specific compiler flags when using --version - Fix unknown pragma warning with mingw (#22533) - Consistently use the provided option paths - Fix USE_EXISTING_SRC_DIR option - Silence git describe error output - Remove workaround for incorrectly packaged libluv - Enable unit testing on release builds (#22554) - Fix build warning when using gcc 4.9.2 - Explicitly add dependency include dir for header generation - Sanitizers for gcc - Set CMAKE_C_STANDARD to 99 for all dependencies - Drop curl.exe on Windows - Download wintools executables separately - Cmake cleanup - **MSVC**: Enable assertions on RelWithDebInfo build type (#22326) - **Windows**: Fix redoing version generation (#21880) - **Windows**: Make bundling nvim-qt optional (#21866) - **Windows**: Allow building without custom md5sum - **bump_deps.lua**: Run command -v in shell (#22030) - **ci**: Let ASAN print tracebacks for more errors (SIGABORT, SIGILL) - **cmake**: Add modelines to enable syntax highlighting - **deps**: Restore support for USE_EXISTING_SRC_DIR (#20491) - **deps**: Add build type for libuv (#20575) - **deps**: Disable shared library for libvterm. (#20566) - **deps**: Bump tree-sitter to v0.20.8 (#22663) - **deps**: Bump luarocks to v3.9.2 - **deps**: Bump coxpcall to 1.17.0-1 - **deps**: Bump luacheck to 1.1.0-1 - **deps**: Bump mpack to 1.0.10 - **deps**: Bump lua parser to v0.0.14 (#20897) - **deps**: Switch vim parser to maintained fork (#22896) - **deps**: Bump vimdoc parser to v2.0.0 (#22870) - **deps**: Set query parser to release (#22603) - **deps**: Bump libvterm to v0.3.1 - **deps**: Bump msgpack-c to v6.0.0 (#22522) - **deps**: Bump win32yank to v0.1.1 (#22700) - **deps**: Bump actions/stale from 7 to 8 - **deps**: Switch to Launchpad for libvterm and libtermkey (#22811) - **editorconfig**: Set indent_size to 4 for python files (#21135) - **lint**: Remove clint.py rules for braces #20880 - **lint**: Add more shell scripts to lintsh - **lintsh**: Double quote to prevent word splitting (#21571) - **luarocks**: Update busted version to v2.1.1 (#22029) - **nix**: Change the pkgs to final, add new version of libvterm (#20410) - **nix**: Update nixpkgs - **nix**: Clean up nix flake (#21565) - **nix**: Remove pylint as it has been removed (#21572) - **nix**: Fixed build (#22918) - **vim-patch.sh**: Handle added/removed files properly - **vim-patch.sh**: Checkout files with path for uncrustify (#20863) - **windows**: Export extern symbols for use in FFI #22756 - **windows**: Specify Windows 8 as the minimum version (#22173) - **windows**: Work around luarocks not finding its own md5sum DOCUMENTATION - Refer to vim.lsp.start() in LSP issue template #20422 - Fix incorrect :help tag (#20511) - Added proper annotations to functions in shared.lua - Fix typos - Fix/remove invalid URLs #20647 - "supported platforms" matrix #19615 - Update vimdoc parser #20747 - ":che" is ":checkhealth" #20147 - .git-blame-ignore-revs (#20820) - Swap CursorLineFold and CursorLineSign (#20875) - Add language annotation to Nvim manual - Add missing docs from some Vim patches (#21296) - Dark/light color/accessibilty pass for generated html docs #21345 - Add links to extmarks and namespaces (#21378) - Remove "How-to disable mouse" menu item #21394 - Add security policy (#17338) - Fix order of numbers in syntax.txt (#21581) - Clarify line about converse of lua-heredoc (#21592) - Fix treesitter parsing errors - Add 'statuscolumn' docstrings (#21717) - Builtin TUI is no longer channel 0 (#21794) - Treesitter.add_directive, add_predicate #21206 - Docs: use codeblocks in runtime/doc/options.txt (#21919) - Clarify :runtime behavior without [where] again (#22003) - Clarify "pipe" mode for sockconnect - Reword news.txt to ensure a consistent style (#22215) - Remove mentions of 'balloonexpr' #22049 - Remove the test badge from the README (#22350) - Mention getmousepos() for click execute function label - Naming conventions, guidelines - Fix more treesitter parsing errors - Use build/bin/nvim instead of nvim in gen_vimdoc (#22398) - Fix vim.treesitter tags - Lua2dox.lua debugging - Module-level docstrings (@defgroup) #22498 - Add missing highlight groups for floats - Add removed features in news.txt - Fix g:terminal_color_x terminal colors #22746 - More details about vim.region (#21116) - How to debug TUI using gdb/lldb #22771 - Add vim.treesitter.query.get_query() to deprecated.txt - **README**: Add Kotlin as a language which can use the API (#21567) - **README**: Fix CI status badge (#22308) - **api**: Pattern is not expanded for autocommands (#20812) - **api**: Fix treesitter parsing errors - **api**: Tweak data arg for nvim_create_autocmd (#22008) - **api**: Link to nvim_set_hl_ns from nvim_set_hl (#22678) - **dev-style**: Remove rule about variable declarations (#20446) - **dev-style**: Remove rules covered by uncrustify - **diagnostic**: Number → integer (#22512) - **docstrings**: Fix runtime type annotations - **editorconfig**: Update news.txt - **editorconfig**: Add editorconfig.txt - **editorconfig**: Number → integer (#22514) - **filetype**: Number → integer (#22516) - **gen**: Support language annotation in docstrings - **gitignore**: Correct oldtest path - **help**: Consistent headers for local additions - **highlight**: Fix type annotations (#22272) - **html**: Render @see items as a list #22675 - **inspect**: Number → integer (#22511) - **lsp**: Add formatting APIs to deprecated.txt (#20487) - **lsp**: Update buf_notify and rpc.notify params types (#21753) - **lsp**: Fix type annotation on convert_input_to_markdown_lines (#21772) - **lsp**: Format arguments to start_client() (#21980) - **lsp**: Update cmd_env description (#22438) - **lsp**: Change type annotations from number → integer (#22510) - **lsp**: Type annotation for lsp.client (#22509) - **lsp**: More precise type annotations (#22621) - **lsp**: Opt-out of default LSP "gq" #22615 - **lua**: Add clarifications for fs.find() and fs.normalize() (#21132) - **lua**: Correct the tags for vim.opt_local and vim.opt_global (#21138) - **lua**: Correct vim.spell.check example (#21311) - **lua**: Add guide to using Lua in Neovim (#21137) - **lua**: Add `vim.json` (#21538) - **lua**: Fix treesitter parsing errors - **lua**: Adjust some type annotations - **lua**: Lua-guide: <Nop> is for rhs of vim.keymap.set(), not lhs (#21814) - **lua**: Use luaref tag instead of www.lua.org #21813 - **lua**: Number → integer (#22517) - **luvref**: Fix treesitter parsing errors - **luvref**: Update to version bump - **maintain**: CI strategy #20778 - **maintain**: Add note on updating luvref.txt - **manual**: Fix treesitter parsing errors - **news**: Add news.txt and link from README (#20426) - **options**: Remove mentions of 'imactivatefunc' and 'imstatusfunc' - **shell**: Mention "&" for piping with powershell #20459 - **support**: Update tested versions (#21126) - **test**: Using cmake directly (without make) #22781 - **treesitter**: Fix predicate syntax (#21016) - **treesitter**: Change links for `eq?` and `set!` to codeblocks (#21047) - **treesitter**: Use full function names in tags (#21321) - **treesitter**: Fix parse errors - **treesitter**: Number → integer (#22513) - **treesitter**: Add query injections - **tutor**: Fix TODO line demo (#21965) - **uri**: Number → integer (#22515) - **usr**: Make usr_05.txt more coherent with Nvim changes (#22428) - **usr_05**: Update sentence about Nvim default behavior of Q (#20817) - **vim.fs**: Normalize Windows example was incorrect (#21966) - **website**: Soft wrap code blocks #21644 REFACTOR - Remove char_u type and replace with char, uint8_t, etc - remove STRNCMP (#21208) and STRLCPY (#21235) - Remove clint error suppression as all errors has been fixed #21782 - Explicitly convert HANDLE to intptr_t for _open_osfhandle() - Clang-tidy fixes to silence clangd warning (#20683) - Fix uncrustify lint errors - Move do_mouse() and its helpers to mouse.c (#20895) - Fix clang-tidy warnings - Click definition functions #20923 - Remove stray emsg check after #20992 (#20996) - Move tabline code to statusline.c (#21008) - Convert drawline.c draw states to enum (#21067) - Remove __STDC_ISO_10646__ check - Deprecate 'secure' option - Remove old TODO comments that aren't relevant anymore (#21144) - Maybe suppress a PVS warning - Rework parameter validation in vim.secure.trust() (#21223) - Buffer_ensure_loaded() - Move ex_retab() to indent.c - Remove COMMA (#21260) - Make sure getting a callback doesn't modify argument - Rename mch_msg => os_msg - Rename mch_get_acl => os_get_acl - Eliminate os_unix.c #21621 - Extract code to open stdin for reading - Eliminate bump-deps.sh using "nvim -l" - Fix IWYU mapping file and use IWYU (#21802) - Format with stylua (#21821) - Remove E5500, adjust tests - Fix sign conversion warning from gcc (#21833) - Use uint8_t for blobs and ga_append() (#21916) - Use flexible arrays instead of the length-of-one trick (#22072) - Reduce scope of locals as per the style guide (#22206) - Move init_default_autocmds to lua - Rename show_tree => inspect_tree #22474 - Move ga_loaded to runtime.c (#22626) - Do more in TRY_WRAP - Add const and remove unnecessary casts (#22841) - Use bool type for global variables (#22842) - Rename local API alias from a to api - Make error message definitions const - Remove use of reserved c++ keywords - **PVS**: Suppress false positive V547 in drawline.c (#21875) - **PVS/V1048**: Remove unnecessary assignment (#21870) - **PVS/V1048**: Remove redundant assignment (#21871) - **PVS/V1048**: Remove duplicated assignments (#21873) - **PVS/V581**: Merge identical if statements (#22390) - **api**: Do not allocate temporaries for internal events - **api**: VALIDATE macros #22187 #22256 #22262 - **build**: Remove unused stdlib function and include checks - **build**: Graduate HAVE_LOCALE_H feature - **build**: Graduate libtreesitter features which are 1+ years old - **build**: Graduate msgpack-c FLOAT32 "feature" since forever - **build**: Graduate unibilium VAR_FROM feature from 2017 - **build**: Graduate -Wvla, -fno-common and -Og "features" - **build**: Make installation of runtime/ more effective - **checkhealth**: Convert "nvim" check to Lua - **clint**: Convert short to int16_t (#20815) - **column**: Remove unused build_statuscol_str() arguments - **completion**: Don't add and remove '^' for Lua (#22702) - **diagnostic**: Remove deprecated function (#20423) - **diagnostic**: DRY for loop #21521 - **diff.c**: Reduce scope of variables (#20781) - **diff.c**: Break up ex_diffgetput() - **diff.c**: Allocate hunks directly in ga_array - **diff.c**: Factor out hunk extraction - **diff.c**: Factor out hunk processing - **diff.c**: Simplify diff_buf_idx() - **diff.c**: Internal does not need diffstyle - **diff.c**: Factor out diffblock deletion - **diff.c**: Copy lines via memmove - **drawline.c**: Leadcol/trailcol - **drawline.c**: Move number column helpers function together - **drawscreen.c**: Reduce scopes of locals (#20668) - **eval**: Make get_lval() explicitly check for v:lua - **eval.c**: Factor out get_number_tv() (#21893) - **exit**: Pass error message to preserve_exit() (#22097) - **extmarks**: Some minor internal API changes - **f_has**: Remove wrong comment (#21561) - **fileio.c**: Reduce scope of locals - **fileio.c**: Refactor match_file_path() - **fileio.c**: Refactor vim_rename() - **fileio.c**: Refactor buf_write_bytes - **fileio.c**: Refactor buf_write_bytes (2) - **fileio.c**: Remove HAS_BW_FLAGS - **fileio.c**: Factor out autocmd handling from buf_write() - **fileio.c**: More bools - **fileio.c**: Reduce scope of locals - **fileio.c**: Do not use macros for error handling - **fileio.c**: Factor out buf_write post autocmds - **fileio.c**: Factor out file info calc - **fileio.c**: Make unreadable expression readable - **fileio.c**: Factor out backup creation - **fileio.c**: Remove HAVE_ACL ifdefs - **fileio.c**: Normalize ifdefs - **fs**: Replace vim.fn/vim.env in vim.fs (#20379) - **highlight**: Rename FloatBorderTitle #20988 - **highlight**: Reshape the HL_UNDER* bits into a 3-bit integer mask - **highlight_group.c**: Reduce scope of locals - **intro**: Avoid Coverity warning (#22000) - **loader**: Use vim.fs - **loader**: Remove BufWritePost autocmd - **loader**: Add typing for package.loaders - **loader**: Simplify tracking logic - **loader**: Cache hash information - **log**: Reduce compile time LOG_LEVEL granularity - **lsp**: Remove deprecated lsp functions (#20421) - **lsp**: Extract a _create_server method in lsp_spec - **lsp**: Remove deprecated vim.lsp.buf_get_clients calls (#21337) - **lsp**: Remove workaround for missing bit module (#22373) - **lsp**: Remove deprecated code (#22389) - **lsp**: Remove _resolve_capabilities_compat (#22628) - **lsp**: Do not parse verbose output when overwriting options (#22810) - **lua**: Move _G.arg init to nlua_init() - **lua**: Get all marks instead of iterating over namespaces - **lua2dox**: Format with stylua - **main.c**: Remove unreachable use_builtin_ui conditions (#22338) - **man**: Pass env directly to spawn() (#20591) - **man**: Add type annotations - **memory**: Simplify new alignment logic - **option.c**: Reduce scope of locals - **option.c**: Add get_varp_from and get_varp_scope_from - **option.c**: De-nest set_option_value - **option.c**: Use intermediate for options ref - **option.c**: Add do_set_num - **option.c**: Add do_set_bool - **option.c**: Simplify do_set_string - **option.c**: Factor out common skip check - **option.c**: Factor out loop code from do_set() - **option.c**: Remove goto - **option.c**: Change nextchar to uint8_t - **option.c**: Use skiptowhite_esc - **option.c**: Factor out set op parsing - **option.c**: Factor out option prefix parsing - **option.c**: Factor out option name parsing - **option.c**: Factor out opt_idx validation - **option.c**: De-nest code in do_set_option - **option.c**: Move bool prefix check - **option.c**: Add do_set_option_value - **option.c**: Factor out some nextchar checks - **option.c**: Factor out string option special case handling - **options**: Don't pass negative number to illegal_char() (#21999) - **optionstr.c**: Reduce scope of locals - **optionstr.c**: Break up did_set_string_option 1-52 - **optionstr.c**: Remove some simple did_set_* functions - **optionstr.c**: Add did_set_string_option_for - **optionstr.c**: Break up did_option_listflags - **optionstr.c**: Remove some redundant parens - **optionstr.c**: Break up did_set_expropt - **optionstr.c**: Move handling of formatlistpat - **optionstr.c**: Align comments (#22070) - **params**: Open -s and -w script files after parsing commands - **pty**: Remove old logic for inheriting termios from host terminal - **redraw**: No type argument in update_screen() - **redraw**: Various simplifications - **redraw**: Make cursor position redraw use the "redraw later" pattern - **runtime**: Use vim.version to compare versions #22550 - **runtime.c**: Factor out find_script_by_name() (#22620) - **screen**: Screen.c delenda est - **sleep**: Simplify rube goldberg implementation of :sleep - **spell**: Use uint8_t for "byts" variables (#22519) - **statusline**: Move statusline defs to statusline_defs.h - **tag**: Remove return type from do_tag() - **test**: Create an lsp-specific helpers.lua file - **tests**: Lift retry() into assert_log() - **tests**: Run unittests using main nvim binary in interpreter mode - **tests**: Move lua-client into core and use it for functionaltests - **treesitter**: Add vim.treesitter.get_node() (#22360) - **treesitter**: Use string.format to create lines - **treesitter**: Simplify some range functions - **treesitter**: Delegate region calculation to treesitter (#22553) - **treesitter**: Use byte ranges from treesitter (#22589) - **treesitter**: Add Range type aliase for Range4|Range6 - **treesitter**: Delegate region calculation to treesitter (#22576) - **treesitter**: Move inspect_tree impl - **tui**: Use nvim_echo() for verbose terminfo - **tui/input.c**: Remove unused multithreading code (#22342) - **ui**: Statusbar invalidation to win_set_inner_size() - **ui**: Devirtualize the ui layer - **ui**: Cleanup 'redrawdebug', introduce "flush" mode - **ui**: Don't reimplement redrawing in focus gained handling - **ui**: Remove some superfluous ui_flush() calls - **ui**: Ui_log() can now just be a function - **uncrustify**: Move macros definitions to enable formatting - **uncrustify**: Improved formatting rules - **vim.gsplit**: Remove "keepsep" - **vim.version**: Cleanup - **vim.version**: Use lazy.nvim semver module - **vim.version**: Use lazy.nvim semver module - **win_close**: Remove "force", don't pass on "free_buf" (#21921) - **win_line**: Rename attr to vi_attr (#21487) - **win_line**: Move some variables into a struct (#22490) - **window**: Remove aucmd_win check from one_window() (#21972) - **window.c**: Reduce scope of locals (#20301) - **windows**: Move os_icon_xx functions TESTING - Introduce skip() #21010 - Remove skip for 32-bit MSVC (#21030) - Don't skip parser_spec on windows (#20294) - Add a Lua test for swap file created before boot - Fix failing tui_spec.lua tests (#21117) - Use isCI to simplify CI detection (#21134) - Simplify platform detection (#21020) - Adding/removing winbar should not cause win_pos events (#21226) - Use luv.os_uname for fast platform detection (#21157) - Add more tests for float window bufpos (#21318) - Convert another test in test_matchadd_conceal.vim to Lua (#21353) - Remove unused variable (#21552) - Add test cases for command line issues - Add more tests for Unicode - Avoid consecutive mouse input at different positions (#21781) - Align Test_shell_options, Test_shellslash with Nvim default - Avoid noise in NVIM_LOG_FILE - Exepath() returns correct path with cmd.exe, powershell #21928 - Remove unused field ext_float (#22243) - Make expect_unchanged() less confusing (#22255) - Make {MATCH:} behave less unexpectedly in screen:expect() - Don't search entire repo for files - Move oldtests to test directory (#22536) - Use a wider screen in the rightleft winhl test (#22641) - Unskip working Windows tests (#22537) - Re-bundle cat on windows (#21255) - Windows not detected in msys shells #22671 - Use exec_capture() in more places (#22787) - Fix flaky watchfiles tests (#22637) - Replace lfs with luv and vim.fs - Improve editor/fold_spec.lua and editor/put_spec.lua (#22916) - **Windows**: Normalize paths for test summary - **api**: Migrate screenchar() test in in window API to screen test - **editorconfig**: Add editorconfig tests - **exit_spec**: Make sure that autocommands are triggered (#22188) - **fileio_spec**: Avoid expect_exit() without calling clear() (#21810) - **float_spec**: Add missing sum_scroll_delta #22648 - **help**: Drop treesitter parse error to 0 - **highlight_spec**: Fix warning in Visual highlight test (#22719) - **legacy/prompt_buffer_spec**: Align script with oldtest more (#22354) - **lsp**: Call clear() before willSave tests (#21336) - **lsp**: Add a screen:expect() between insert() and feed_command() (#21577) - **lua/diagnostic_spec**: Remove unnecessary after_each() - **lua/fs_spec**: Fix vim.fs.dir() test (#21503) - **lua/ui_spec**: Fix Ctrl-C test flakiness (#21039) - **old**: Test_lambda.vim garbagecollect() -> test_garbagecollect_now() - **old**: Remove stray test42 files (#20966) - **old**: Make Test_help_tagjump() test order match upstream - **old**: Add missing lines from Vim patch 8.2.0522 (#21048) - **old**: Make ":h local-additions" work properly in test_help.vim - **old**: Skip Vim9 script with less divergence - **old**: Change $TMPDIR from Xtest-tmpdir to X-test-tmpdir (#21346) - **old**: Make test_signs.vim closer to upstream (#21479) - **old**: Run some part of 'cpoptions' tests - **old**: Make getting an unused PID work (#22529) - **old**: Move memfile_test.c to test/old/ (#22567) - **old**: Unskip working tests on Windows (#22650) - **shada**: Fix shada syntax definitions test - **statuscolumn**: Add more tests for wrapped lines (#21718) - **statuscolumn**: %l should follow default wrap behavior (#21766) - **statuscolumn_spec**: Remove unnecessary feed('lh') - **statusline**: UI elements are not redrawn on K_EVENT unnecessarily - **syn_attr_spec**: Add more information (#21912) - **termxx_spec**: Fix TermClose bdelete test flakiness (#22463) - **treesitter/parser_spec**: Correct time unit (#22471) - **tui_spec**: Don't use nested terminal for resize at startup (#21583) - **tui_spec**: Avoid race between nvim_paste and nvim_input (#21639) - **tui_spec**: Improve cursor_address test (#21700) - **tui_spec**: Doesn't use Unicode in cursor_address test (#21703) - **tui_spec**: Make rapid resize test test what it wants to test (#21933) - **tui_spec**: Don't expect exact screen in rapid resize test (#21935) - **tui_spec**: Remove unnecessary arguments for remote UI - **tui_spec**: Use RPC request to setup autocommands - **ui**: Wait for another success with failure after success - **undo_spec**: Add more tests for writing in Insert mode - **unit**: Use file:close() properly (#21505) - **vim.fs.normalize**: Enable test on Windows
2023-04-07 04:26:29 -07:00
set(NVIM_API_PRERELEASE false)
# 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()
# Build-type: RelWithDebInfo
# /Og means something different in MSVC
if(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang")
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}")
string(REPLACE "/DNDEBUG" "" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}")
string(REPLACE " " " " CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}") # Remove duplicate whitespace
endif()
option(LOG_LIST_ACTIONS "Add list actions logging" OFF)
option(ENABLE_ASAN_UBSAN "Enable Clang address & undefined behavior sanitizer for nvim binary." OFF)
option(LOG_DEBUG "Enable debug log messages even in a release build" OFF)
option(ENABLE_MSAN "Enable Clang memory sanitizer for nvim binary." OFF)
option(ENABLE_TSAN "Enable Clang thread sanitizer for nvim binary." OFF)
if((ENABLE_ASAN_UBSAN AND ENABLE_MSAN)
OR (ENABLE_ASAN_UBSAN AND ENABLE_TSAN)
OR (ENABLE_MSAN AND ENABLE_TSAN))
2018-10-06 09:45:34 -07:00
message(FATAL_ERROR "Sanitizers cannot be enabled simultaneously")
2015-06-08 09:49:23 -07:00
endif()
if(ENABLE_ASAN_UBSAN OR ENABLE_MSAN OR ENABLE_TSAN)
if(NOT CMAKE_C_COMPILER_ID MATCHES "Clang" AND NOT CMAKE_C_COMPILER_ID MATCHES "GNU")
message(FATAL_ERROR "Sanitizers are only supported for Clang and GCC")
endif()
endif()
# 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()
set(LUA_DEPENDENCIES lpeg mpack bit)
if(NOT LUA_PRG)
foreach(CURRENT_LUA_PRG luajit lua5.1 lua5.2 lua)
unset(_CHECK_LUA_PRG CACHE)
unset(LUA_PRG_WORKS)
find_program(_CHECK_LUA_PRG ${CURRENT_LUA_PRG})
if(_CHECK_LUA_PRG)
check_lua_deps(${_CHECK_LUA_PRG} "${LUA_DEPENDENCIES}" LUA_PRG_WORKS)
if(LUA_PRG_WORKS)
set(LUA_PRG "${_CHECK_LUA_PRG}" CACHE FILEPATH "Path to a program.")
break()
endif()
endif()
endforeach()
unset(_CHECK_LUA_PRG CACHE)
else()
check_lua_deps(${LUA_PRG} "${LUA_DEPENDENCIES}" LUA_PRG_WORKS)
endif()
if(NOT LUA_PRG_WORKS)
2018-10-06 09:45:34 -07:00
message(FATAL_ERROR "Failed to find a Lua 5.1-compatible interpreter")
endif()
2018-10-06 09:45:34 -07:00
message(STATUS "Using Lua interpreter: ${LUA_PRG}")
# Some of the code generation still relies on stable table ordering in order to
# produce reproducible output - specifically the msgpack'ed data in
# funcs_metadata.generated.h and ui_events_metadata.generated.h. This should
# ideally be fixed in the generators, but until then as a workaround you may provide
# a specific lua implementation that provides the needed stability by setting LUA_GEN_PRG:
if(NOT LUA_GEN_PRG)
set(LUA_GEN_PRG "${LUA_PRG}" CACHE FILEPATH "Path to the lua used for code generation.")
endif()
message(STATUS "Using Lua interpreter for code generation: ${LUA_GEN_PRG}")
option(COMPILE_LUA "Pre-compile Lua sources into bytecode (for sources that are included in the binary)" ON)
if(COMPILE_LUA AND NOT WIN32)
if(PREFER_LUA)
foreach(CURRENT_LUAC_PRG luac5.1 luac)
find_program(_CHECK_LUAC_PRG ${CURRENT_LUAC_PRG})
if(_CHECK_LUAC_PRG)
set(LUAC_PRG "${_CHECK_LUAC_PRG} -s -o - %s" CACHE STRING "Format for compiling to Lua bytecode")
break()
endif()
endforeach()
elseif(LUA_PRG MATCHES "luajit")
check_lua_module(${LUA_PRG} "jit.bcsave" LUAJIT_HAS_JIT_BCSAVE)
if(LUAJIT_HAS_JIT_BCSAVE)
set(LUAC_PRG "${LUA_PRG} -b -s %s -" CACHE STRING "Format for compiling to Lua bytecode")
endif()
endif()
endif()
if(LUAC_PRG)
message(STATUS "Using Lua compiler: ${LUAC_PRG}")
endif()
#
# Lint
#
find_program(LUACHECK_PRG luacheck)
find_program(SHELLCHECK_PRG shellcheck)
find_program(STYLUA_PRG stylua)
find_program(UNCRUSTIFY_PRG uncrustify)
add_glob_target(
REQUIRED
TARGET lintlua-luacheck
COMMAND ${LUACHECK_PRG}
FLAGS -q
GLOB_DIRS runtime/ scripts/ src/ test/
GLOB_PAT *.lua
TOUCH_STRATEGY SINGLE)
add_glob_target(
TARGET lintlua-stylua
COMMAND ${STYLUA_PRG}
FLAGS --color=always --check
GLOB_DIRS runtime/
GLOB_PAT *.lua
TOUCH_STRATEGY SINGLE)
add_custom_target(lintlua)
add_dependencies(lintlua lintlua-luacheck lintlua-stylua)
add_glob_target(
TARGET lintsh
COMMAND ${SHELLCHECK_PRG}
FLAGS -x -a
GLOB_DIRS scripts
GLOB_PAT *.sh
EXCLUDE
scripts/pvscheck.sh
TOUCH_STRATEGY SINGLE)
add_custom_target(lintcommit
COMMAND ${PROJECT_BINARY_DIR}/bin/nvim -u NONE -es -c [[lua require('scripts.lintcommit').main({trace=false})]]
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
VERBATIM)
add_dependencies(lintcommit nvim)
add_custom_target(lint)
add_dependencies(lint clang-tidy lintc lintlua lintsh lintcommit)
#
# Format
#
add_custom_target(formatlua
COMMAND ${CMAKE_COMMAND}
-D FORMAT_PRG=${STYLUA_PRG}
-D LANG=lua
-P ${PROJECT_SOURCE_DIR}/cmake/Format.cmake
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
add_custom_target(format)
add_dependencies(format formatc formatlua)
install_helper(
FILES ${CMAKE_SOURCE_DIR}/src/man/nvim.1
DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
if(EXISTS "${DEPS_PREFIX}/share/nvim-qt")
option(USE_BUNDLED_NVIMQT "Bundle neovim-qt" ON)
else()
option(USE_BUNDLED_NVIMQT "Bundle neovim-qt" OFF)
endif()
add_subdirectory(src/nvim)
add_subdirectory(cmake.config)
add_subdirectory(runtime)
add_subdirectory(test)
if(WIN32 AND USE_BUNDLED_NVIMQT)
install_helper(
FILES ${DEPS_PREFIX}/share/nvim-qt/runtime/plugin/nvim_gui_shim.vim
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/nvim-qt/runtime/plugin)
endif()
add_custom_target(uninstall
COMMAND ${CMAKE_COMMAND} -P ${PROJECT_SOURCE_DIR}/cmake/UninstallHelper.cmake)
if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
add_subdirectory(cmake.packaging)
endif()