aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/bump-deps.sh108
-rwxr-xr-x[-rw-r--r--]scripts/bump_deps.lua601
-rw-r--r--scripts/cliff.toml73
-rwxr-xr-xscripts/download-unicode-files.sh19
-rw-r--r--scripts/gen_help_html.lua130
-rwxr-xr-xscripts/gen_vimdoc.py80
-rwxr-xr-xscripts/genappimage.sh12
-rw-r--r--scripts/genvimvim.lua6
-rwxr-xr-xscripts/git-log-pretty-since.sh14
-rw-r--r--scripts/lintcommit.lua21
-rw-r--r--scripts/lua2dox.lua36
-rwxr-xr-xscripts/lua2dox_filter90
-rwxr-xr-xscripts/pvscheck.sh2
-rwxr-xr-xscripts/release.sh4
-rwxr-xr-xscripts/update_terminfo.sh2
-rwxr-xr-xscripts/vim-patch.sh68
-rwxr-xr-xscripts/vimpatch.lua7
17 files changed, 688 insertions, 585 deletions
diff --git a/scripts/bump-deps.sh b/scripts/bump-deps.sh
deleted file mode 100755
index e725608b39..0000000000
--- a/scripts/bump-deps.sh
+++ /dev/null
@@ -1,108 +0,0 @@
-#!/usr/bin/env bash
-set -e
-set -u
-# Use privileged mode, which e.g. skips using CDPATH.
-set -p
-
-# Ensure that the user has a bash that supports -A
-if [[ "${BASH_VERSINFO[0]}" -lt 4 ]]; then
- echo >&2 "error: script requires bash 4+ (you have ${BASH_VERSION})."
- exit 1
-fi
-
-readonly NVIM_SOURCE_DIR="${NVIM_SOURCE_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)}"
-readonly VIM_SOURCE_DIR_DEFAULT="${NVIM_SOURCE_DIR}/.vim-src"
-readonly VIM_SOURCE_DIR="${VIM_SOURCE_DIR:-${VIM_SOURCE_DIR_DEFAULT}}"
-BASENAME="$(basename "${0}")"
-readonly BASENAME
-
-usage() {
- echo "Bump Nvim dependencies"
- echo
- echo "Usage: ${BASENAME} [ -h | --pr | --branch=<dep> | --dep=<dependency> ]"
- echo " Update a dependency:"
- echo " ./scripts/bump-deps.sh --dep Luv --version 1.43.0-0"
- echo " Create a PR:"
- echo " ./scripts/bump-deps.sh --pr"
- echo
- echo "Options:"
- echo " -h show this message and exit."
- echo " --pr submit pr for bumping deps."
- echo " --branch=<dep> create a branch bump-<dep> from current branch."
- echo " --dep=<dependency> bump to a specific release or tag."
- echo
- echo "Dependency Options:"
- echo " --version=<tag> bump to a specific release or tag."
- echo " --commit=<hash> bump to a specific commit."
- echo " --HEAD bump to a current head."
- echo
- echo " <dependency> is one of:"
- echo " \"LuaJIT\", \"libuv\", \"Luv\", \"tree-sitter\""
-}
-
-# Checks if a program is in the user's PATH, and is executable.
-check_executable() {
- test -x "$(command -v "${1}")"
-}
-
-require_executable() {
- if ! check_executable "${1}"; then
- echo >&2 "${BASENAME}: '${1}' not found in PATH or not executable."
- exit 1
- fi
-}
-
-require_executable "nvim"
-
-if [ $# -eq 0 ]; then
- usage
- exit 1
-fi
-
-PARSED_ARGS=$(getopt -a -n "$BASENAME" -o h --long pr,branch:,dep:,version:,commit:,HEAD -- "$@")
-
-DEPENDENCY=""
-eval set -- "$PARSED_ARGS"
-while :; do
- case "$1" in
- -h)
- usage
- exit 0
- ;;
- --pr)
- nvim -es +"lua require('scripts.bump_deps').submit_pr()"
- exit 0
- ;;
- --branch)
- DEP=$2
- nvim -es +"lua require('scripts.bump_deps').create_branch('$DEP')"
- exit 0
- ;;
- --dep)
- DEPENDENCY=$2
- shift 2
- ;;
- --version)
- VERSION=$2
- nvim -es +"lua require('scripts.bump_deps').version('$DEPENDENCY', '$VERSION')"
- exit 0
- ;;
- --commit)
- COMMIT=$2
- nvim -es +"lua require('scripts.bump_deps').commit('$DEPENDENCY', '$COMMIT')"
- exit 0
- ;;
- --HEAD)
- nvim -es +"lua require('scripts.bump_deps').head('$DEPENDENCY')"
- exit 0
- ;;
- *)
- break
- ;;
- esac
-done
-
-usage
-exit 1
-
-# vim: et sw=2
diff --git a/scripts/bump_deps.lua b/scripts/bump_deps.lua
index 17e3fd35d6..1873c3cd0d 100644..100755
--- a/scripts/bump_deps.lua
+++ b/scripts/bump_deps.lua
@@ -1,35 +1,24 @@
+#!/usr/bin/env -S nvim -l
+
-- Usage:
--- # bump to version
--- nvim -es +"lua require('scripts.bump_deps').version(dependency, version_tag)"
---
--- # bump to commit
--- nvim -es +"lua require('scripts.bump_deps').commit(dependency, commit_hash)"
---
--- # bump to HEAD
--- nvim -es +"lua require('scripts.bump_deps').head(dependency)"
---
--- # submit PR
--- nvim -es +"lua require('scripts.bump_deps').submit_pr()"
---
--- # create branch
--- nvim -es +"lua require('scripts.bump_deps').create_branch()"
+-- ./scripts/bump_deps.lua -h
local M = {}
local _trace = false
-local required_branch_prefix = "bump-"
-local commit_prefix = "build(deps): "
+local required_branch_prefix = 'bump-'
+local commit_prefix = 'build(deps): '
-- Print message
local function p(s)
- vim.cmd("set verbose=1")
- vim.api.nvim_echo({ { s, "" } }, false, {})
- vim.cmd("set verbose=0")
+ vim.cmd('set verbose=1')
+ vim.api.nvim_echo({ { s, '' } }, false, {})
+ vim.cmd('set verbose=0')
end
local function die()
- p("")
- vim.cmd("cquit 1")
+ p('')
+ vim.cmd('cquit 1')
end
-- Executes and returns the output of `cmd`, or nil on failure.
@@ -37,307 +26,421 @@ end
--
-- Prints `cmd` if `trace` is enabled.
local function _run(cmd, die_on_fail, die_msg)
- if _trace then
- p("run: " .. vim.inspect(cmd))
- end
- local rv = vim.trim(vim.fn.system(cmd)) or ""
- if vim.v.shell_error ~= 0 then
- if die_on_fail then
- if _trace then
- p(rv)
- end
- p(die_msg)
- die()
- end
- return nil
- end
- return rv
+ if _trace then
+ p('run: ' .. vim.inspect(cmd))
+ end
+ local rv = vim.trim(vim.fn.system(cmd)) or ''
+ if vim.v.shell_error ~= 0 then
+ if die_on_fail then
+ if _trace then
+ p(rv)
+ end
+ p(die_msg)
+ die()
+ end
+ return nil
+ end
+ return rv
end
-- Run a command, return nil on failure
local function run(cmd)
- return _run(cmd, false, "")
+ return _run(cmd, false, '')
end
-- Run a command, die on failure with err_msg
local function run_die(cmd, err_msg)
- return _run(cmd, true, err_msg)
+ return _run(cmd, true, err_msg)
end
local function require_executable(cmd)
- local cmd_path = run_die({ "command", "-v", cmd }, cmd .. " not found!")
- run_die({ "test", "-x", cmd_path }, cmd .. " is not executable")
+ local cmd_path = run_die({ 'command', '-v', cmd }, cmd .. ' not found!')
+ run_die({ 'test', '-x', cmd_path }, cmd .. ' is not executable')
end
local function rm_file_if_present(path_to_file)
- run({ "rm", "-f", path_to_file })
+ run({ 'rm', '-f', path_to_file })
end
local nvim_src_dir = vim.fn.getcwd()
-local temp_dir = nvim_src_dir .. "/tmp"
-run({ "mkdir", "-p", temp_dir })
+local temp_dir = nvim_src_dir .. '/tmp'
+run({ 'mkdir', '-p', temp_dir })
local function get_dependency(dependency_name)
- local dependency_table = {
- ["LuaJIT"] = {
- repo = "LuaJIT/LuaJIT",
- symbol = "LUAJIT",
- },
- ["libuv"] = {
- repo = "libuv/libuv",
- symbol = "LIBUV",
- },
- ["Luv"] = {
- repo = "luvit/luv",
- symbol = "LUV",
- },
- ["tree-sitter"] = {
- repo = "tree-sitter/tree-sitter",
- symbol = "TREESITTER",
- },
- }
- local dependency = dependency_table[dependency_name]
- if dependency == nil then
- p("Not a dependency: " .. dependency_name)
- die()
- end
- dependency.name = dependency_name
- return dependency
+ local dependency_table = {
+ ['LuaJIT'] = {
+ repo = 'LuaJIT/LuaJIT',
+ symbol = 'LUAJIT',
+ },
+ ['libuv'] = {
+ repo = 'libuv/libuv',
+ symbol = 'LIBUV',
+ },
+ ['Luv'] = {
+ repo = 'luvit/luv',
+ symbol = 'LUV',
+ },
+ ['tree-sitter'] = {
+ repo = 'tree-sitter/tree-sitter',
+ symbol = 'TREESITTER',
+ },
+ }
+ local dependency = dependency_table[dependency_name]
+ if dependency == nil then
+ p('Not a dependency: ' .. dependency_name)
+ die()
+ end
+ dependency.name = dependency_name
+ return dependency
end
local function get_gh_commit_sha(repo, ref)
- require_executable("gh")
+ require_executable('gh')
- local sha = run_die(
- { "gh", "api", "repos/" .. repo .. "/commits/" .. ref, "--jq", ".sha" },
- "Failed to get commit hash from GitHub. Not a valid ref?"
- )
- return sha
+ local sha = run_die(
+ { 'gh', 'api', 'repos/' .. repo .. '/commits/' .. ref, '--jq', '.sha' },
+ 'Failed to get commit hash from GitHub. Not a valid ref?'
+ )
+ return sha
end
local function get_archive_info(repo, ref)
- require_executable("curl")
-
- local archive_name = ref .. ".tar.gz"
- local archive_path = temp_dir .. "/" .. archive_name
- local archive_url = "https://github.com/" .. repo .. "/archive/" .. archive_name
-
- rm_file_if_present(archive_path)
- run_die({ "curl", "-sL", archive_url, "-o", archive_path }, "Failed to download archive from GitHub")
-
- local archive_sha = run({ "sha256sum", archive_path }):gmatch("%w+")()
- return { url = archive_url, sha = archive_sha }
+ require_executable('curl')
+
+ local archive_name = ref .. '.tar.gz'
+ local archive_path = temp_dir .. '/' .. archive_name
+ local archive_url = 'https://github.com/' .. repo .. '/archive/' .. archive_name
+
+ rm_file_if_present(archive_path)
+ run_die(
+ { 'curl', '-sL', archive_url, '-o', archive_path },
+ 'Failed to download archive from GitHub'
+ )
+
+ local shacmd = (vim.fn.executable('sha256sum') == 1
+ and{ 'sha256sum', archive_path }
+ or { 'shasum', '-a', '256', archive_path })
+ local archive_sha = run(shacmd):gmatch('%w+')()
+ return { url = archive_url, sha = archive_sha }
end
local function write_cmakelists_line(symbol, kind, value)
- require_executable("sed")
-
- local cmakelists_path = nvim_src_dir .. "/" .. "cmake.deps/CMakeLists.txt"
- run_die({
- "sed",
- "-i",
- "-e",
- "s/set(" .. symbol .. "_" .. kind .. ".*$" .. "/set(" .. symbol .. "_" .. kind .. " " .. value .. ")" .. "/",
- cmakelists_path,
- }, "Failed to write " .. cmakelists_path)
+ require_executable('sed')
+
+ local cmakelists_path = nvim_src_dir .. '/' .. 'cmake.deps/CMakeLists.txt'
+ run_die({
+ 'sed',
+ '-i',
+ '-e',
+ 's/set('
+ .. symbol
+ .. '_'
+ .. kind
+ .. '.*$'
+ .. '/set('
+ .. symbol
+ .. '_'
+ .. kind
+ .. ' '
+ .. value
+ .. ')'
+ .. '/',
+ cmakelists_path,
+ }, 'Failed to write ' .. cmakelists_path)
end
local function explicit_create_branch(dep)
- require_executable("git")
-
- local checked_out_branch = run({ "git", "rev-parse", "--abbrev-ref", "HEAD" })
- if checked_out_branch ~= "master" then
- p("Not on master!")
- die()
- end
- run_die({ "git", "checkout", "-b", "bump-" .. dep }, "git failed to create branch")
+ require_executable('git')
+
+ local checked_out_branch = run({ 'git', 'rev-parse', '--abbrev-ref', 'HEAD' })
+ if checked_out_branch ~= 'master' then
+ p('Not on master!')
+ die()
+ end
+ run_die({ 'git', 'checkout', '-b', 'bump-' .. dep }, 'git failed to create branch')
end
local function verify_branch(new_branch_suffix)
- require_executable("git")
-
- local checked_out_branch = run({ "git", "rev-parse", "--abbrev-ref", "HEAD" })
- if not checked_out_branch:match("^" .. required_branch_prefix) then
- p("Current branch '" .. checked_out_branch .. "' doesn't seem to start with " .. required_branch_prefix)
- p("Checking out to bump-" .. new_branch_suffix)
- explicit_create_branch(new_branch_suffix)
- end
+ require_executable('git')
+
+ local checked_out_branch = assert(run({ 'git', 'rev-parse', '--abbrev-ref', 'HEAD' }))
+ if not checked_out_branch:match('^' .. required_branch_prefix) then
+ p(
+ "Current branch '"
+ .. checked_out_branch
+ .. "' doesn't seem to start with "
+ .. required_branch_prefix
+ )
+ p('Checking out to bump-' .. new_branch_suffix)
+ explicit_create_branch(new_branch_suffix)
+ end
end
local function update_cmakelists(dependency, archive, comment)
- require_executable("git")
-
- verify_branch(dependency.name)
-
- local changed_file = nvim_src_dir .. "/" .. "cmake.deps/CMakeLists.txt"
-
- p("Updating " .. dependency.name .. " to " .. archive.url .. "\n")
- write_cmakelists_line(dependency.symbol, "URL", archive.url:gsub("/", "\\/"))
- write_cmakelists_line(dependency.symbol, "SHA256", archive.sha)
- run_die(
- { "git", "commit", changed_file, "-m", commit_prefix .. "bump " .. dependency.name .. " to " .. comment },
- "git failed to commit"
- )
+ require_executable('git')
+
+ verify_branch(dependency.name)
+
+ local changed_file = nvim_src_dir .. '/' .. 'cmake.deps/CMakeLists.txt'
+
+ p('Updating ' .. dependency.name .. ' to ' .. archive.url .. '\n')
+ write_cmakelists_line(dependency.symbol, 'URL', archive.url:gsub('/', '\\/'))
+ write_cmakelists_line(dependency.symbol, 'SHA256', archive.sha)
+ run_die(
+ {
+ 'git',
+ 'commit',
+ changed_file,
+ '-m',
+ commit_prefix .. 'bump ' .. dependency.name .. ' to ' .. comment,
+ },
+ 'git failed to commit'
+ )
end
local function verify_cmakelists_committed()
- require_executable("git")
+ require_executable('git')
- local cmakelists_path = nvim_src_dir .. "/" .. "cmake.deps/CMakeLists.txt"
- run_die({ "git", "diff", "--quiet", "HEAD", "--", cmakelists_path }, cmakelists_path .. " has uncommitted changes")
+ local cmakelists_path = nvim_src_dir .. '/' .. 'cmake.deps/CMakeLists.txt'
+ run_die(
+ { 'git', 'diff', '--quiet', 'HEAD', '--', cmakelists_path },
+ cmakelists_path .. ' has uncommitted changes'
+ )
end
local function warn_luv_symbol()
- p("warning: " .. get_dependency("Luv").symbol .. "_VERSION will not be updated")
+ p('warning: ' .. get_dependency('Luv').symbol .. '_VERSION will not be updated')
end
-- return first 9 chars of commit
local function short_commit(commit)
- return string.sub(commit, 1, 9)
+ return string.sub(commit, 1, 9)
end
-- TODO: remove hardcoded fork
local function gh_pr(pr_title, pr_body)
- require_executable("gh")
-
- local pr_url = run_die({
- "gh",
- "pr",
- "create",
- "--title",
- pr_title,
- "--body",
- pr_body,
- }, "Failed to create PR")
- return pr_url
+ require_executable('gh')
+
+ local pr_url = run_die({
+ 'gh',
+ 'pr',
+ 'create',
+ '--title',
+ pr_title,
+ '--body',
+ pr_body,
+ }, 'Failed to create PR')
+ return pr_url
end
local function find_git_remote(fork)
- require_executable("git")
-
- local remotes = run({ "git", "remote", "-v" })
- local git_remote = ""
- for remote in remotes:gmatch("[^\r\n]+") do
- local words = {}
- for word in remote:gmatch("%w+") do
- table.insert(words, word)
- end
- local match = words[1]:match("/github.com[:/]neovim/neovim/")
- if fork == "fork" then
- match = not match
- end
- if match and words[3] == "(fetch)" then
- git_remote = words[0]
- break
- end
- end
- if git_remote == "" then
- git_remote = "origin"
- end
- return git_remote
+ require_executable('git')
+
+ local remotes = assert(run({ 'git', 'remote', '-v' }))
+ local git_remote = ''
+ for remote in remotes:gmatch('[^\r\n]+') do
+ local words = {}
+ for word in remote:gmatch('%w+') do
+ table.insert(words, word)
+ end
+ local match = words[1]:match('/github.com[:/]neovim/neovim/')
+ if fork == 'fork' then
+ match = not match
+ end
+ if match and words[3] == '(fetch)' then
+ git_remote = words[0]
+ break
+ end
+ end
+ if git_remote == '' then
+ git_remote = 'origin'
+ end
+ return git_remote
end
local function create_pr(pr_title, pr_body)
- require_executable("git")
-
- local push_first = true
-
- local checked_out_branch = run({ "git", "rev-parse", "--abbrev-ref", "HEAD" })
- if push_first then
- local push_remote = run({ "git", "config", "--get", "branch." .. checked_out_branch .. ".pushRemote" })
- if push_remote == nil then
- push_remote = run({ "git", "config", "--get", "remote.pushDefault" })
- if push_remote == nil then
- push_remote = run({ "git", "config", "--get", "branch." .. checked_out_branch .. ".remote" })
- if push_remote == nil or push_remote == find_git_remote(nil) then
- push_remote = find_git_remote("fork")
- end
- end
- end
-
- p("Pushing to " .. push_remote .. "/" .. checked_out_branch)
- run_die({ "git", "push", push_remote, checked_out_branch }, "Git failed to push")
- end
-
- local pr_url = gh_pr(pr_title, pr_body)
- p("\nCreated PR: " .. pr_url .. "\n")
+ require_executable('git')
+
+ local push_first = true
+
+ local checked_out_branch = run({ 'git', 'rev-parse', '--abbrev-ref', 'HEAD' })
+ if push_first then
+ local push_remote =
+ run({ 'git', 'config', '--get', 'branch.' .. checked_out_branch .. '.pushRemote' })
+ if push_remote == nil then
+ push_remote = run({ 'git', 'config', '--get', 'remote.pushDefault' })
+ if push_remote == nil then
+ push_remote =
+ run({ 'git', 'config', '--get', 'branch.' .. checked_out_branch .. '.remote' })
+ if push_remote == nil or push_remote == find_git_remote(nil) then
+ push_remote = find_git_remote('fork')
+ end
+ end
+ end
+
+ p('Pushing to ' .. push_remote .. '/' .. checked_out_branch)
+ run_die({ 'git', 'push', push_remote, checked_out_branch }, 'Git failed to push')
+ end
+
+ local pr_url = gh_pr(pr_title, pr_body)
+ p('\nCreated PR: ' .. pr_url .. '\n')
end
function M.commit(dependency_name, commit)
- local dependency = get_dependency(dependency_name)
- verify_cmakelists_committed()
- local commit_sha = get_gh_commit_sha(dependency.repo, commit)
- if commit_sha ~= commit then
- p("Not a commit: " .. commit .. ". Did you mean version?")
- die()
- end
- local archive = get_archive_info(dependency.repo, commit)
- if dependency_name == "Luv" then
- warn_luv_symbol()
- end
- update_cmakelists(dependency, archive, short_commit(commit))
+ local dependency = assert(get_dependency(dependency_name))
+ verify_cmakelists_committed()
+ local commit_sha = get_gh_commit_sha(dependency.repo, commit)
+ if commit_sha ~= commit then
+ p('Not a commit: ' .. commit .. '. Did you mean version?')
+ die()
+ end
+ local archive = get_archive_info(dependency.repo, commit)
+ if dependency_name == 'Luv' then
+ warn_luv_symbol()
+ end
+ update_cmakelists(dependency, archive, short_commit(commit))
end
function M.version(dependency_name, version)
- local dependency = get_dependency(dependency_name)
- verify_cmakelists_committed()
- local commit_sha = get_gh_commit_sha(dependency.repo, version)
- if commit_sha == version then
- p("Not a version: " .. version .. ". Did you mean commit?")
- die()
- end
- local archive = get_archive_info(dependency.repo, version)
- if dependency_name == "Luv" then
- write_cmakelists_line(dependency.symbol, "VERSION", version)
- end
- update_cmakelists(dependency, archive, version)
+ vim.validate{
+ dependency_name={dependency_name,'s'},
+ version={version,'s'},
+ }
+ local dependency = assert(get_dependency(dependency_name))
+ verify_cmakelists_committed()
+ local commit_sha = get_gh_commit_sha(dependency.repo, version)
+ if commit_sha == version then
+ p('Not a version: ' .. version .. '. Did you mean commit?')
+ die()
+ end
+ local archive = get_archive_info(dependency.repo, version)
+ if dependency_name == 'Luv' then
+ write_cmakelists_line(dependency.symbol, 'VERSION', version)
+ end
+ update_cmakelists(dependency, archive, version)
end
function M.head(dependency_name)
- local dependency = get_dependency(dependency_name)
- verify_cmakelists_committed()
- local commit_sha = get_gh_commit_sha(dependency.repo, "HEAD")
- local archive = get_archive_info(dependency.repo, commit_sha)
- if dependency_name == "Luv" then
- warn_luv_symbol()
- end
- update_cmakelists(dependency, archive, "HEAD - " .. short_commit(commit_sha))
+ local dependency = assert(get_dependency(dependency_name))
+ verify_cmakelists_committed()
+ local commit_sha = get_gh_commit_sha(dependency.repo, 'HEAD')
+ local archive = get_archive_info(dependency.repo, commit_sha)
+ if dependency_name == 'Luv' then
+ warn_luv_symbol()
+ end
+ update_cmakelists(dependency, archive, 'HEAD - ' .. short_commit(commit_sha))
end
function M.create_branch(dep)
- explicit_create_branch(dep)
+ explicit_create_branch(dep)
end
function M.submit_pr()
- require_executable("git")
-
- verify_branch("deps")
-
- local nvim_remote = find_git_remote(nil)
- local relevant_commit = run_die({
- "git",
- "log",
- "--grep=" .. commit_prefix,
- "--reverse",
- "--format='%s'",
- nvim_remote .. "/master..HEAD",
- "-1",
- }, "Failed to fetch commits")
-
- local pr_title
- local pr_body
-
- if relevant_commit == "" then
- pr_title = commit_prefix .. "bump some dependencies"
- pr_body = "bump some dependencies"
- else
- relevant_commit = relevant_commit:gsub("'", "")
- pr_title = relevant_commit
- pr_body = relevant_commit:gsub(commit_prefix:gsub("%(", "%%("):gsub("%)", "%%)"), "")
- end
- pr_body = pr_body .. "\n\n(add explanations if needed)"
- p(pr_title .. "\n" .. pr_body .. "\n")
- create_pr(pr_title, pr_body)
+ require_executable('git')
+
+ verify_branch('deps')
+
+ local nvim_remote = find_git_remote(nil)
+ local relevant_commit = assert(run_die({
+ 'git',
+ 'log',
+ '--grep=' .. commit_prefix,
+ '--reverse',
+ "--format='%s'",
+ nvim_remote .. '/master..HEAD',
+ '-1',
+ }, 'Failed to fetch commits'))
+
+ local pr_title
+ local pr_body
+
+ if relevant_commit == '' then
+ pr_title = commit_prefix .. 'bump some dependencies'
+ pr_body = 'bump some dependencies'
+ else
+ relevant_commit = relevant_commit:gsub("'", '')
+ pr_title = relevant_commit
+ pr_body = relevant_commit:gsub(commit_prefix:gsub('%(', '%%('):gsub('%)', '%%)'), '')
+ end
+ pr_body = pr_body .. '\n\n(add explanations if needed)'
+ p(pr_title .. '\n' .. pr_body .. '\n')
+ create_pr(pr_title, pr_body)
+end
+
+local function usage()
+ local this_script = _G.arg[0]:match("[^/]*.lua$")
+ print(([=[
+ Bump Nvim dependencies
+
+ Usage: nvim -l %s [options]
+ Bump to HEAD, tagged version, commit, or branch:
+ nvim -l %s --dep Luv --head
+ nvim -l %s --dep Luv --version 1.43.0-0
+ nvim -l %s --dep Luv --commit abc123
+ nvim -l %s --dep Luv --branch
+ Create a PR:
+ nvim -l %s --pr
+
+ Options:
+ -h show this message and exit.
+ --pr submit pr for bumping deps.
+ --branch <dep> create a branch bump-<dep> from current branch.
+ --dep <dependency> bump to a specific release or tag.
+
+ Dependency Options:
+ --version <tag> bump to a specific release or tag.
+ --commit <hash> bump to a specific commit.
+ --HEAD bump to a current head.
+
+ <dependency> is one of:
+ "LuaJIT", "libuv", "Luv", "tree-sitter"
+ ]=]):format(this_script, this_script, this_script, this_script, this_script, this_script))
+end
+
+local function parseargs()
+ local args = {}
+ for i = 1, #_G.arg do
+ if _G.arg[i] == '-h' then
+ args.h = true
+ elseif _G.arg[i] == '--pr' then
+ args.pr = true
+ elseif _G.arg[i] == '--branch' then
+ args.branch = _G.arg[i+1]
+ elseif _G.arg[i] == '--dep' then
+ args.dep = _G.arg[i+1]
+ elseif _G.arg[i] == '--version' then
+ args.version = _G.arg[i+1]
+ elseif _G.arg[i] == '--commit' then
+ args.commit = _G.arg[i+1]
+ elseif _G.arg[i] == '--head' then
+ args.head = true
+ end
+ end
+ return args
end
-return M
+local is_main = _G.arg[0]:match('bump_deps.lua')
+
+if is_main then
+ local args = parseargs()
+ if args.h then
+ usage()
+ elseif args.pr then
+ M.submit_pr()
+ elseif args.head then
+ M.head(args.dep)
+ elseif args.branch then
+ M.create_branch(args.dep)
+ elseif args.version then
+ M.version(args.dep, args.version)
+ elseif args.commit then
+ M.commit(args.dep, args.commit)
+ elseif args.pr then
+ M.submit_pr()
+ else
+ print('missing required arg\n')
+ os.exit(1)
+ end
+else
+ return M
+end
diff --git a/scripts/cliff.toml b/scripts/cliff.toml
new file mode 100644
index 0000000000..3fc10e5d16
--- /dev/null
+++ b/scripts/cliff.toml
@@ -0,0 +1,73 @@
+# configuration file for git-cliff (0.1.0)
+
+[changelog]
+# changelog header
+header = """
+# Changelog\n
+All notable changes to this project will be documented in this file.\n
+"""
+# template for the changelog body
+# https://tera.netlify.app/docs/#introduction
+body = """
+{% if version %}\
+ ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
+{% else %}\
+ ## [unreleased]
+{% endif %}\
+{% for group, commits in commits | group_by(attribute="group") %}
+ ### {{ group | upper_first }}
+ {% for commit in commits%}\
+ {% if not commit.scope %}\
+ - {{ commit.message | upper_first }}
+ {% endif %}\
+ {% endfor %}\
+ {% for group, commits in commits | group_by(attribute="scope") %}\
+ {% for commit in commits %}\
+ - **{{commit.scope}}**: {{ commit.message | upper_first }}
+ {% endfor %}\
+ {% endfor %}
+{% endfor %}\n
+"""
+# remove the leading and trailing whitespace from the template
+trim = true
+# changelog footer
+footer = """
+<!-- generated by git-cliff -->
+"""
+
+[git]
+# parse the commits based on https://www.conventionalcommits.org
+conventional_commits = true
+# filter out the commits that are not conventional
+filter_unconventional = true
+# process each line of a commit as an individual commit
+split_commits = false
+# regex for preprocessing the commit messages
+commit_preprocessors = [
+# { pattern = '\((\w+\s)?#([0-9]+)\)', replace = "([#${2}](https://github.com/neovim/neovim/issues/${2}))"},
+]
+# regex for parsing and grouping commits
+commit_parsers = [
+ { message = "!:", group = "Breaking"},
+ { message = "^feat", group = "Features"},
+ { message = "^fix", group = "Bug Fixes"},
+ { message = "^doc", group = "Documentation"},
+ { message = "^perf", group = "Performance"},
+ { message = "^refactor", group = "Refactor"},
+ { message = "^test", group = "Testing"},
+ { message = "^chore", group = "Miscellaneous Tasks"},
+ { message = "^build", group = "Build System"},
+ { message = "^Revert", group = "Reverted Changes"},
+]
+# filter out the commits that are not matched by commit parsers
+filter_commits = true
+# glob pattern for matching git tags
+tag_pattern = "v[0-9]*"
+# regex for skipping tags
+skip_tags = "v0.1.0-beta.1"
+# regex for ignoring tags
+ignore_tags = ""
+# sort the tags chronologically
+date_order = false
+# sort the commits inside sections by oldest/newest order
+sort_commits = "oldest"
diff --git a/scripts/download-unicode-files.sh b/scripts/download-unicode-files.sh
index 4482cefa34..f0fd4c66ea 100755
--- a/scripts/download-unicode-files.sh
+++ b/scripts/download-unicode-files.sh
@@ -3,11 +3,12 @@
set -e
data_files="UnicodeData.txt CaseFolding.txt EastAsianWidth.txt"
emoji_files="emoji-data.txt"
+files="'$data_files $emoji_files'"
UNIDIR_DEFAULT=src/unicode
DOWNLOAD_URL_BASE_DEFAULT='http://unicode.org/Public'
-if test x$1 = 'x--help' ; then
+if test "$1" = '--help' ; then
echo 'Usage:'
echo " $0[ TARGET_DIRECTORY[ URL_BASE]]"
echo
@@ -16,6 +17,7 @@ if test x$1 = 'x--help' ; then
echo
echo "Default target directory is $PWD/${UNIDIR_DEFAULT}."
echo "Default URL base is ${DOWNLOAD_URL_BASE_DEFAULT}."
+ exit 0
fi
UNIDIR=${1:-$UNIDIR_DEFAULT}
@@ -23,21 +25,12 @@ DOWNLOAD_URL_BASE=${2:-$DOWNLOAD_URL_BASE_DEFAULT}
for filename in $data_files ; do
curl -L -o "$UNIDIR/$filename" "$DOWNLOAD_URL_BASE/UNIDATA/$filename"
- (
- cd "$UNIDIR"
- git add $filename
- )
+ git -C "$UNIDIR" add "$filename"
done
for filename in $emoji_files ; do
curl -L -o "$UNIDIR/$filename" "$DOWNLOAD_URL_BASE/UNIDATA/emoji/$filename"
- (
- cd "$UNIDIR"
- git add $filename
- )
+ git -C "$UNIDIR" add "$filename"
done
-(
- cd "$UNIDIR"
- git commit -m "feat: update unicode tables" -- $files
-)
+git -C "$UNIDIR" commit -m "feat: update unicode tables" .
diff --git a/scripts/gen_help_html.lua b/scripts/gen_help_html.lua
index 06ea1831b0..2563f2f410 100644
--- a/scripts/gen_help_html.lua
+++ b/scripts/gen_help_html.lua
@@ -35,6 +35,7 @@ local spell_dict = {
lua = 'Lua',
VimL = 'Vimscript',
}
+local language = nil
local M = {}
@@ -59,19 +60,34 @@ local exclude_invalid = {
["'previewpopup'"] = "quickref.txt",
["'pvp'"] = "quickref.txt",
["'string'"] = "eval.txt",
- Query = "treesitter.txt",
- ["eq?"] = "treesitter.txt",
- ["lsp-request"] = "lsp.txt",
- matchit = "vim_diff.txt",
- ["matchit.txt"] = "help.txt",
+ Query = 'treesitter.txt',
+ ['eq?'] = 'treesitter.txt',
+ ['lsp-request'] = 'lsp.txt',
+ matchit = 'vim_diff.txt',
+ ['matchit.txt'] = 'help.txt',
["set!"] = "treesitter.txt",
- ["v:_null_blob"] = "builtin.txt",
- ["v:_null_dict"] = "builtin.txt",
- ["v:_null_list"] = "builtin.txt",
- ["v:_null_string"] = "builtin.txt",
- ["vim.lsp.buf_request()"] = "lsp.txt",
- ["vim.lsp.util.get_progress_messages()"] = "lsp.txt",
- ["vim.treesitter.start()"] = "treesitter.txt",
+ ['v:_null_blob'] = 'builtin.txt',
+ ['v:_null_dict'] = 'builtin.txt',
+ ['v:_null_list'] = 'builtin.txt',
+ ['v:_null_string'] = 'builtin.txt',
+ ['vim.lsp.buf_request()'] = 'lsp.txt',
+ ['vim.lsp.util.get_progress_messages()'] = 'lsp.txt',
+}
+
+-- False-positive "invalid URLs".
+local exclude_invalid_urls = {
+ ["http://"] = "usr_23.txt",
+ ["http://."] = "usr_23.txt",
+ ["http://aspell.net/man-html/Affix-Compression.html"] = "spell.txt",
+ ["http://aspell.net/man-html/Phonetic-Code.html"] = "spell.txt",
+ ["http://canna.sourceforge.jp/"] = "mbyte.txt",
+ ["http://gnuada.sourceforge.net"] = "ft_ada.txt",
+ ["http://lua-users.org/wiki/StringLibraryTutorial"] = "lua.txt",
+ ["http://michael.toren.net/code/"] = "pi_tar.txt",
+ ["http://papp.plan9.de"] = "syntax.txt",
+ ["http://wiki.services.openoffice.org/wiki/Dictionaries"] = "spell.txt",
+ ["http://www.adapower.com"] = "ft_ada.txt",
+ ["http://www.jclark.com/"] = "quickfix.txt",
}
local function tofile(fname, text)
@@ -279,9 +295,11 @@ local function ignore_invalid(s)
end
local function ignore_parse_error(s)
- -- Ignore parse errors for unclosed codespan/optionlink/tag.
- -- This is common in vimdocs and is treated as plaintext by :help.
- return s:find("^[`'|*]")
+ return (
+ -- Ignore parse errors for unclosed tag.
+ -- This is common in vimdocs and is treated as plaintext by :help.
+ s:find("^[`'|*]")
+ )
end
local function has_ancestor(node, ancestor_name)
@@ -319,6 +337,17 @@ local function validate_link(node, bufnr, fname)
return helppage, tagname, ignored
end
+-- TODO: port the logic from scripts/check_urls.vim
+local function validate_url(text, fname)
+ local ignored = false
+ if vim.fs.basename(fname) == 'pi_netrw.txt' then
+ ignored = true
+ elseif text:find('http%:') and not exclude_invalid_urls[text] then
+ invalid_urls[text] = vim.fs.basename(fname)
+ end
+ return ignored
+end
+
-- Traverses the tree at `root` and checks that |tag| links point to valid helptags.
local function visit_validate(root, level, lang_tree, opt, stats)
level = level or 0
@@ -353,14 +382,25 @@ local function visit_validate(root, level, lang_tree, opt, stats)
end
end
elseif node_name == 'url' then
- if text:find('http%:') then
- invalid_urls[text] = vim.fs.basename(opt.fname)
- end
+ local fixed_url, _ = fix_url(trim(text))
+ validate_url(fixed_url, opt.fname)
elseif node_name == 'taglink' or node_name == 'optionlink' then
local _, _, _ = validate_link(root, opt.buf, opt.fname)
end
end
+-- Fix tab alignment issues caused by concealed characters like |, `, * in tags
+-- and code blocks.
+local function fix_tab_after_conceal(text, next_node_text)
+ -- Vim tabs take into account the two concealed characters even though they
+ -- are invisible, so we need to add back in the two spaces if this is
+ -- followed by a tab to make the tab alignment to match Vim's behavior.
+ if string.sub(next_node_text,1,1) == '\t' then
+ text = text .. ' '
+ end
+ return text
+end
+
-- Generates HTML from node `root` recursively.
local function visit_node(root, level, lang_tree, headings, opt, stats)
level = level or 0
@@ -447,7 +487,7 @@ local function visit_node(root, level, lang_tree, headings, opt, stats)
end
return string.format('<div class="help-para">\n%s\n</div>\n', text)
elseif node_name == 'line' then
- if parent ~= 'codeblock' and (is_blank(text) or is_noise(text, stats.noise_lines)) then
+ if (parent ~= 'codeblock' or parent ~= 'code') and (is_blank(text) or is_noise(text, stats.noise_lines)) then
return '' -- Discard common "noise" lines.
end
-- XXX: Avoid newlines (too much whitespace) after block elements in old (preformatted) layout.
@@ -477,19 +517,39 @@ local function visit_node(root, level, lang_tree, headings, opt, stats)
if ignored then
return text
end
- return ('%s<a href="%s#%s">%s</a>'):format(ws(), helppage, url_encode(tagname), html_esc(tagname))
+ local s = ('%s<a href="%s#%s">%s</a>'):format(ws(), helppage, url_encode(tagname), html_esc(tagname))
+ if opt.old and node_name == 'taglink' then
+ s = fix_tab_after_conceal(s, node_text(root:next_sibling()))
+ end
+ return s
elseif vim.tbl_contains({'codespan', 'keycode'}, node_name) then
if root:has_error() then
return text
end
- return ('%s<code>%s</code>'):format(ws(), trimmed)
+ local s = ('%s<code>%s</code>'):format(ws(), trimmed)
+ if opt.old and node_name == 'codespan' then
+ s = fix_tab_after_conceal(s, node_text(root:next_sibling()))
+ end
+ return s
elseif node_name == 'argument' then
return ('%s<code>{%s}</code>'):format(ws(), text)
elseif node_name == 'codeblock' then
+ return text
+ elseif node_name == 'language' then
+ language = node_text(root)
+ return ''
+ elseif node_name == 'code' then
if is_blank(text) then
return ''
end
- return ('<pre>%s</pre>'):format(trim(trim_indent(text), 2))
+ local code
+ if language then
+ code = ('<pre><code class="language-%s">%s</code></pre>'):format(language,trim(trim_indent(text), 2))
+ language = nil
+ else
+ code = ('<pre>%s</pre>'):format(trim(trim_indent(text), 2))
+ end
+ return code
elseif node_name == 'tag' then -- anchor
if root:has_error() then
return text
@@ -504,6 +564,10 @@ local function visit_node(root, level, lang_tree, headings, opt, stats)
end
local el = in_heading and 'span' or 'code'
local s = ('%s<a name="%s"></a><%s class="%s">%s</%s>'):format(ws(), url_encode(tagname), el, cssclass, trimmed, el)
+ if opt.old then
+ s = fix_tab_after_conceal(s, node_text(root:next_sibling()))
+ end
+
if in_heading and prev ~= 'tag' then
-- Start the <span> container for tags in a heading.
-- This makes "justify-content:space-between" right-align the tags.
@@ -631,6 +695,9 @@ local function gen_one(fname, to_fname, old, commit)
<link href="/css/bootstrap.css" rel="stylesheet">
<link href="/css/main.css" rel="stylesheet">
<link href="help.css" rel="stylesheet">
+ <link href="/highlight/styles/neovim.min.css" rel="stylesheet">
+ <script src="/highlight/highlight.min.js"></script>
+ <script>hljs.highlightAll();</script>
<title>%s - Neovim docs</title>
</head>
<body>
@@ -773,8 +840,14 @@ end
local function gen_css(fname)
local css = [[
:root {
- --code-color: #008B8B;
- --tag-color: gray;
+ --code-color: #004b4b;
+ --tag-color: #095943;
+ }
+ @media (prefers-color-scheme: dark) {
+ :root {
+ --code-color: #00c243;
+ --tag-color: #00b7b7;
+ }
}
@media (min-width: 40em) {
.toc {
@@ -793,11 +866,6 @@ local function gen_css(fname)
display: block;
}
}
- @media (prefers-color-scheme: dark) {
- :root {
- --code-color: cyan;
- }
- }
.toc {
/* max-width: 12rem; */
height: 85%; /* Scroll if there are too many items. https://github.com/neovim/neovim.github.io/issues/297 */
@@ -817,7 +885,7 @@ local function gen_css(fname)
}
h1, h2, h3, h4, h5 {
font-family: sans-serif;
- border-bottom: 1px solid #41464bd6; /*rgba(0, 0, 0, .9);*/
+ border-bottom: 1px solid var(--tag-color); /*rgba(0, 0, 0, .9);*/
}
h3, h4, h5 {
border-bottom-style: dashed;
@@ -892,7 +960,7 @@ local function gen_css(fname)
pre {
/* Tabs are used in codeblocks only for indentation, not alignment, so we can aggressively shrink them. */
tab-size: 2;
- white-space: pre;
+ white-space: pre-wrap;
line-height: 1.3; /* Important for ascii art. */
overflow: visible;
/* font-family: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; */
diff --git a/scripts/gen_vimdoc.py b/scripts/gen_vimdoc.py
index 3ee9d8b5dd..8e1d6ef80a 100755
--- a/scripts/gen_vimdoc.py
+++ b/scripts/gen_vimdoc.py
@@ -12,15 +12,10 @@ Flow:
update_params_map /
render_node
-This would be easier using lxml and XSLT, but:
+TODO: eliminate this script and use Lua+treesitter (requires parsers for C and
+Lua markdown-style docstrings).
- 1. This should avoid needing Python dependencies, especially ones that are
- C modules that have library dependencies (lxml requires libxml and
- libxslt).
- 2. I wouldn't know how to deal with nested indentation in <para> tags using
- XSLT.
-
-Each function :help block is formatted as follows:
+The generated :help text for each function is formatted as follows:
- Max width of 78 columns (`text_width`).
- Indent with spaces (not tabs).
@@ -60,11 +55,19 @@ if sys.version_info < MIN_PYTHON_VERSION:
doxygen_version = tuple((int(i) for i in subprocess.check_output(["doxygen", "-v"],
universal_newlines=True).split()[0].split('.')))
+# Until 0.9 is released, need this hacky way to check that "nvim -l foo.lua" works.
+nvim_version = list(line for line in subprocess.check_output(['nvim', '-h'], universal_newlines=True).split('\n')
+ if '-l ' in line)
+
if doxygen_version < MIN_DOXYGEN_VERSION:
print("\nRequires doxygen {}.{}.{}+".format(*MIN_DOXYGEN_VERSION))
print("Your doxygen version is {}.{}.{}\n".format(*doxygen_version))
sys.exit(1)
+if len(nvim_version) == 0:
+ print("\nRequires 'nvim -l' feature, see https://github.com/neovim/neovim/pull/18706")
+ sys.exit(1)
+
# DEBUG = ('DEBUG' in os.environ)
INCLUDE_C_DECL = ('INCLUDE_C_DECL' in os.environ)
INCLUDE_DEPRECATED = ('INCLUDE_DEPRECATED' in os.environ)
@@ -84,7 +87,7 @@ base_dir = os.path.dirname(os.path.dirname(script_path))
out_dir = os.path.join(base_dir, 'tmp-{target}-doc')
filter_cmd = '%s %s' % (sys.executable, script_path)
msgs = [] # Messages to show on exit.
-lua2dox_filter = os.path.join(base_dir, 'scripts', 'lua2dox_filter')
+lua2dox = os.path.join(base_dir, 'scripts', 'lua2dox.lua')
CONFIG = {
'api': {
@@ -130,12 +133,14 @@ CONFIG = {
'filename': 'lua.txt',
'section_order': [
'_editor.lua',
+ '_inspector.lua',
'shared.lua',
'uri.lua',
'ui.lua',
'filetype.lua',
'keymap.lua',
'fs.lua',
+ 'secure.lua',
],
'files': [
'runtime/lua/vim/_editor.lua',
@@ -145,11 +150,14 @@ CONFIG = {
'runtime/lua/vim/filetype.lua',
'runtime/lua/vim/keymap.lua',
'runtime/lua/vim/fs.lua',
+ 'runtime/lua/vim/secure.lua',
+ 'runtime/lua/vim/_inspector.lua',
],
'file_patterns': '*.lua',
'fn_name_prefix': '',
'section_name': {
'lsp.lua': 'core',
+ '_inspector.lua': 'inspector',
},
'section_fmt': lambda name: (
'Lua module: vim'
@@ -166,11 +174,13 @@ CONFIG = {
'module_override': {
# `shared` functions are exposed on the `vim` module.
'shared': 'vim',
+ '_inspector': 'vim',
'uri': 'vim',
'ui': 'vim.ui',
'filetype': 'vim.filetype',
'keymap': 'vim.keymap',
'fs': 'vim.fs',
+ 'secure': 'vim.secure',
},
'append_only': [
'shared.lua',
@@ -185,6 +195,7 @@ CONFIG = {
'diagnostic.lua',
'codelens.lua',
'tagfunc.lua',
+ 'semantic_tokens.lua',
'handlers.lua',
'util.lua',
'log.lua',
@@ -260,17 +271,11 @@ CONFIG = {
if name.lower() == 'treesitter'
else f'*lua-treesitter-{name.lower()}*'),
'fn_helptag_fmt': lambda fstem, name: (
- f'*{name}()*'
- if name != 'new'
- else f'*{fstem}.{name}()*'),
- # 'fn_helptag_fmt': lambda fstem, name: (
- # f'*vim.treesitter.{name}()*'
- # if fstem == 'treesitter'
- # else (
- # '*vim.lsp.client*'
- # # HACK. TODO(justinmk): class/structure support in lua2dox
- # if 'lsp.client' == f'{fstem}.{name}'
- # else f'*vim.lsp.{fstem}.{name}()*')),
+ f'*vim.{fstem}.{name}()*'
+ if fstem == 'treesitter'
+ else f'*{name}()*'
+ if name[0].isupper()
+ else f'*vim.treesitter.{fstem}.{name}()*'),
'module_override': {},
'append_only': [],
}
@@ -353,6 +358,17 @@ def self_or_child(n):
return n.childNodes[0]
+def align_tags(line):
+ tag_regex = r"\s(\*.+?\*)(?:\s|$)"
+ tags = re.findall(tag_regex, line)
+
+ if len(tags) > 0:
+ line = re.sub(tag_regex, "", line)
+ tags = " " + " ".join(tags)
+ line = line + (" " * (78 - len(line) - len(tags))) + tags
+ return line
+
+
def clean_lines(text):
"""Removes superfluous lines.
@@ -498,7 +514,12 @@ def render_node(n, text, prefix='', indent='', width=text_width - indentation,
if n.nodeName == 'preformatted':
o = get_text(n, preformatted=True)
ensure_nl = '' if o[-1] == '\n' else '\n'
- text += '>{}{}\n<'.format(ensure_nl, o)
+ if o[0:4] == 'lua\n':
+ text += '>lua{}{}\n<'.format(ensure_nl, o[3:-1])
+ elif o[0:4] == 'vim\n':
+ text += '>vim{}{}\n<'.format(ensure_nl, o[3:-1])
+ else:
+ text += '>{}{}\n<'.format(ensure_nl, o)
elif is_inline(n):
text = doc_wrap(get_text(n), indent=indent, width=width)
@@ -801,7 +822,8 @@ def extract_from_xml(filename, target, width, fmt_vimhelp):
prefix = '%s(' % name
suffix = '%s)' % ', '.join('{%s}' % a[1] for a in params
- if a[0] not in ('void', 'Error', 'Arena'))
+ if a[0] not in ('void', 'Error', 'Arena',
+ 'lua_State'))
if not fmt_vimhelp:
c_decl = '%s %s(%s);' % (return_type, name, ', '.join(c_args))
@@ -951,7 +973,7 @@ def fmt_doxygen_xml_as_vimhelp(filename, target):
start = end
- func_doc = "\n".join(split_lines)
+ func_doc = "\n".join(map(align_tags, split_lines))
if (name.startswith(CONFIG[target]['fn_name_prefix'])
and name != "nvim_error_event"):
@@ -979,7 +1001,7 @@ def delete_lines_below(filename, tokenstr):
fp.writelines(lines[0:i])
-def main(config, args):
+def main(doxygen_config, args):
"""Generates:
1. Vim :help docs
@@ -1007,7 +1029,7 @@ def main(config, args):
# runtime/lua/vim/lsp.lua:209: warning: argument 'foo' not found
stderr=(subprocess.STDOUT if debug else subprocess.DEVNULL))
p.communicate(
- config.format(
+ doxygen_config.format(
input=' '.join(
[f'"{file}"' for file in CONFIG[target]['files']]),
output=output_dir,
@@ -1094,11 +1116,7 @@ def main(config, args):
fn_map_full.update(fn_map)
if len(sections) == 0:
- if target == 'lua':
- fail(f'no sections for target: {target} (this usually means'
- + ' "luajit" was not found by scripts/lua2dox_filter)')
- else:
- fail(f'no sections for target: {target}')
+ fail(f'no sections for target: {target} (look for errors near "Preprocessing" log lines above)')
if len(sections) > len(CONFIG[target]['section_order']):
raise RuntimeError(
'found new modules "{}"; update the "section_order" map'.format(
@@ -1145,7 +1163,7 @@ def main(config, args):
def filter_source(filename):
name, extension = os.path.splitext(filename)
if extension == '.lua':
- p = subprocess.run([lua2dox_filter, filename], stdout=subprocess.PIPE)
+ p = subprocess.run(['nvim', '-l', lua2dox, filename], stdout=subprocess.PIPE)
op = ('?' if 0 != p.returncode else p.stdout.decode('utf-8'))
print(op)
else:
diff --git a/scripts/genappimage.sh b/scripts/genappimage.sh
index cc88ab5559..9944b5eb31 100755
--- a/scripts/genappimage.sh
+++ b/scripts/genappimage.sh
@@ -8,7 +8,8 @@
# App arch, used by generate_appimage.
if [ -z "$ARCH" ]; then
- export ARCH="$(arch)"
+ ARCH="$(arch)"
+ export ARCH
fi
TAG=$1
@@ -34,8 +35,9 @@ make install
# App version, used by generate_appimage.
VERSION=$("$ROOT_DIR"/build/bin/nvim --version | head -n 1 | grep -o 'v.*')
+export VERSION
-cd "$APP_BUILD_DIR"
+cd "$APP_BUILD_DIR" || exit
# Only downloads linuxdeploy if the remote file is different from local
if [ -e "$APP_BUILD_DIR"/linuxdeploy-x86_64.AppImage ]; then
@@ -53,7 +55,7 @@ chmod +x "$APP_BUILD_DIR"/linuxdeploy-x86_64.AppImage
mkdir "$APP_DIR/usr/share/metainfo/"
cp "$ROOT_DIR/runtime/nvim.appdata.xml" "$APP_DIR/usr/share/metainfo/"
-cd "$APP_DIR"
+cd "$APP_DIR" || exit
########################################################################
# AppDir complete. Now package it as an AppImage.
@@ -71,7 +73,7 @@ exec "$(dirname "$(readlink -f "${0}")")/usr/bin/nvim" ${@+"$@"}
EOF
chmod 755 AppRun
-cd "$APP_BUILD_DIR" # Get out of AppImage directory.
+cd "$APP_BUILD_DIR" || exit # Get out of AppImage directory.
# Set the name of the file generated by appimage
export OUTPUT=nvim.appimage
@@ -85,7 +87,7 @@ fi
# - Expects: $ARCH, $APP, $VERSION env vars
# - Expects: ./$APP.AppDir/ directory
# - Produces: ./nvim.appimage
-./linuxdeploy-x86_64.AppImage --appdir $APP.AppDir -d $ROOT_DIR/runtime/nvim.desktop -i \
+./linuxdeploy-x86_64.AppImage --appdir $APP.AppDir -d "$ROOT_DIR"/runtime/nvim.desktop -i \
"$ROOT_DIR/runtime/nvim.png" --output appimage
# Moving the final executable to a different folder so it isn't in the
diff --git a/scripts/genvimvim.lua b/scripts/genvimvim.lua
index 868084a583..3e9e7077be 100644
--- a/scripts/genvimvim.lua
+++ b/scripts/genvimvim.lua
@@ -11,6 +11,8 @@ local funcs_file = arg[3]
package.path = nvimsrcdir .. '/?.lua;' .. package.path
+_G.vim = loadfile(nvimsrcdir..'/../../runtime/lua/vim/shared.lua')()
+
local lld = {}
local syn_fd = io.open(syntax_file, 'w')
lld.line_length = 0
@@ -115,7 +117,7 @@ end
local nvimau_start = 'syn keyword nvimAutoEvent contained '
w('\n\n' .. nvimau_start)
-for au, _ in pairs(auevents.nvim_specific) do
+for au, _ in vim.spairs(auevents.nvim_specific) do
if lld.line_length > 850 then
w('\n' .. nvimau_start)
end
@@ -126,7 +128,7 @@ w('\n\nsyn case match')
local vimfun_start = 'syn keyword vimFuncName contained '
w('\n\n' .. vimfun_start)
local funcs = mpack.unpack(io.open(funcs_file, 'rb'):read("*all"))
-for name, _ in pairs(funcs) do
+for _, name in ipairs(funcs) do
if name then
if lld.line_length > 850 then
w('\n' .. vimfun_start)
diff --git a/scripts/git-log-pretty-since.sh b/scripts/git-log-pretty-since.sh
index a0aa4354b6..95dcee23f5 100755
--- a/scripts/git-log-pretty-since.sh
+++ b/scripts/git-log-pretty-since.sh
@@ -16,9 +16,9 @@ __SINCE=$1
__INVMATCH=$2
is_merge_commit() {
- git rev-parse $1 >/dev/null 2>&1 \
+ git rev-parse "$1" >/dev/null 2>&1 \
|| { echo "ERROR: invalid commit: $1"; exit 1; }
- git log $1^2 >/dev/null 2>&1 && return 0 || return 1
+ git log "$1"^2 >/dev/null 2>&1 && return 0 || return 1
}
# Removes parens from issue/ticket/PR numbers.
@@ -40,13 +40,13 @@ _format_ticketnums() {
}
for commit in $(git log --format='%H' --first-parent "$__SINCE"..HEAD); do
- if is_merge_commit ${commit} ; then
- if [ -z "$__INVMATCH" ] || ! git log --oneline ${commit}^1..${commit}^2 \
+ if is_merge_commit "${commit}" ; then
+ if [ -z "$__INVMATCH" ] || ! git log --oneline "${commit}^1..${commit}^2" \
| >/dev/null 2>&1 grep -E "$__INVMATCH" ; then
- git log -1 --oneline ${commit}
- git log --format=' %h %s' ${commit}^1..${commit}^2
+ git log -1 --oneline "${commit}"
+ git log --format=' %h %s' "${commit}^1..${commit}^2"
fi
else
- git log -1 --oneline ${commit}
+ git log -1 --oneline "${commit}"
fi
done | _format_ticketnums
diff --git a/scripts/lintcommit.lua b/scripts/lintcommit.lua
index 16326cfe66..87a8e62503 100644
--- a/scripts/lintcommit.lua
+++ b/scripts/lintcommit.lua
@@ -86,11 +86,28 @@ local function validate_commit(commit_message)
vim.inspect(allowed_types))
end
- -- Check if scope is empty
+ -- Check if scope is appropriate
if before_colon:match("%(") then
local scope = vim.trim(before_colon:match("%((.*)%)"))
+
if scope == '' then
- return [[Scope can't be empty.]]
+ return [[Scope can't be empty]]
+ end
+
+ if vim.startswith(scope, "nvim_") then
+ return [[Scope should be "api" instead of "nvim_..."]]
+ end
+
+ local alternative_scope = {
+ ['filetype.vim'] = 'filetype',
+ ['filetype.lua'] = 'filetype',
+ ['tree-sitter'] = 'treesitter',
+ ['ts'] = 'treesitter',
+ ['hl'] = 'highlight',
+ }
+
+ if alternative_scope[scope] then
+ return ('Scope should be "%s" instead of "%s"'):format(alternative_scope[scope], scope)
end
end
diff --git a/scripts/lua2dox.lua b/scripts/lua2dox.lua
index 86afe97a7e..19f8f8141d 100644
--- a/scripts/lua2dox.lua
+++ b/scripts/lua2dox.lua
@@ -27,14 +27,13 @@ http://search.cpan.org/~alec/Doxygen-Lua-0.02/lib/Doxygen/Lua.pm
Running
-------
-This file "lua2dox.lua" gets called by "lua2dox_filter" (bash).
+This script "lua2dox.lua" gets called by "gen_vimdoc.py".
Doxygen must be on your system. You can experiment like so:
- Run "doxygen -g" to create a default Doxyfile.
-- Then alter it to let it recognise lua. Add the two following lines:
+- Then alter it to let it recognise lua. Add the following line:
FILE_PATTERNS = *.lua
- FILTER_PATTERNS = *.lua=lua2dox_filter
- Then run "doxygen".
The core function reads the input file (filename or stdin) and outputs some pseudo C-ish language.
@@ -117,26 +116,6 @@ local function string_split(Str, Pattern)
return splitStr
end
---! \class TCore_Commandline
---! \brief reads/parses commandline
-local TCore_Commandline = class()
-
---! \brief constructor
-function TCore_Commandline.init(this)
- this.argv = arg
- this.parsed = {}
- this.params = {}
-end
-
---! \brief get value
-function TCore_Commandline.getRaw(this, Key, Default)
- local val = this.argv[Key]
- if not val then
- val = Default
- end
- return val
-end
-
-------------------------------
--! \brief file buffer
--!
@@ -147,7 +126,7 @@ local TStream_Read = class()
--!
--! \param Filename name of file to read (or nil == stdin)
function TStream_Read.getContents(this, Filename)
- assert(Filename)
+ assert(Filename, ('invalid file: %s'):format(Filename))
-- get lines from file
-- syphon lines to our table
local filecontents = {}
@@ -497,14 +476,14 @@ function TLua2DoX_filter.readfile(this, AppStamp, Filename)
else
this:warning(inStream:getLineNo(), 'something weird here')
end
- fn_magic = nil -- mustn't indavertently use it again
+ fn_magic = nil -- mustn't inadvertently use it again
-- TODO: If we can make this learn how to generate these, that would be helpful.
-- elseif string.find(line, "^M%['.*'%] = function") then
-- state = 'in_function' -- it's a function
-- outStream:writeln("function textDocument/publishDiagnostics(...){}")
- -- fn_magic = nil -- mustn't indavertently use it again
+ -- fn_magic = nil -- mustn't inadvertently use it again
else
state = '' -- unknown
if #line > 0 then -- we don't know what this line means, so just comment it out
@@ -548,15 +527,14 @@ end
local This_app = TApp()
--main
-local cl = TCore_Commandline()
-local argv1 = cl:getRaw(2)
+local argv1 = arg[1]
if argv1 == '--help' then
TCore_IO_writeln(This_app:getVersion())
TCore_IO_writeln(This_app:getCopyright())
TCore_IO_writeln([[
run as:
- lua2dox_filter <param>
+ nvim -l scripts/lua2dox.lua <param>
--------------
Param:
<filename> : interprets filename
diff --git a/scripts/lua2dox_filter b/scripts/lua2dox_filter
deleted file mode 100755
index e3fa95d0cf..0000000000
--- a/scripts/lua2dox_filter
+++ /dev/null
@@ -1,90 +0,0 @@
-#!/usr/bin/env bash
-
-###########################################################################
-# Copyright (C) 2012 by Simon Dales #
-# simon@purrsoft.co.uk #
-# #
-# This program is free software; you can redistribute it and/or modify #
-# it under the terms of the GNU General Public License as published by #
-# the Free Software Foundation; either version 2 of the License, or #
-# (at your option) any later version. #
-# #
-# This program is distributed in the hope that it will be useful, #
-# but WITHOUT ANY WARRANTY; without even the implied warranty of #
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
-# GNU General Public License for more details. #
-# #
-# You should have received a copy of the GNU General Public License #
-# along with this program; if not, write to the #
-# Free Software Foundation, Inc., #
-# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #
-###########################################################################
-LANG=""
-
-##! \brief test executable to see if it exists
-test_executable() {
- P_EXE="$1"
- #########
- WHICH=$(which "$P_EXE")
- if test -z "${WHICH}"; then
- echo "not found \"${P_EXE}\""
- else
- EXE="${P_EXE}"
- fi
-}
-
-##! \brief sets the lua interpreter
-set_lua() {
- if test -z "${EXE}"; then
- test_executable '.deps/usr/bin/luajit'
- fi
-
- if test -z "${EXE}"; then
- test_executable 'luajit'
- fi
-
- if test -z "${EXE}"; then
- test_executable 'lua'
- fi
-}
-
-##! \brief makes canonical name of file
-##!
-##! Note that "readlink -f" doesn't work in MacOSX
-##!
-do_readlink() {
- pushd . > /dev/null
- TARGET_FILE=$1
-
- cd "$(dirname $TARGET_FILE)"
- TARGET_FILE=$(basename "$TARGET_FILE")
-
- # Iterate down a (possible) chain of symlinks
- while [ -L "$TARGET_FILE" ]; do
- TARGET_FILE=$(readlink "$TARGET_FILE")
- cd $(dirname "$TARGET_FILE")
- TARGET_FILE=$(basename "$TARGET_FILE")
- done
-
- PHYS_DIR=$(pwd -P)
- RESULT=$PHYS_DIR
- popd > /dev/null
-}
-
-##main
-set_lua
-if test -z "${EXE}"; then
- echo "no lua interpreter found"
- exit 1
-else
- BASENAME=$(basename "$0")
- do_readlink "$0"
- DIRNAME="${RESULT}"
-
- LUASCRIPT="${DIRNAME}/lua2dox.lua ${BASENAME}"
- #echo "lua[${LUASCRIPT}]"
-
- ${EXE} ${LUASCRIPT} $@
-fi
-
-##eof
diff --git a/scripts/pvscheck.sh b/scripts/pvscheck.sh
index 610c20eb48..97757c0848 100755
--- a/scripts/pvscheck.sh
+++ b/scripts/pvscheck.sh
@@ -328,7 +328,7 @@ realdir() {(
patch_sources() {(
local tgt="$1" ; shift
- local only_bulid="${1}" ; shift
+ local only_build="${1}" ; shift
get_pvs_comment "$tgt"
diff --git a/scripts/release.sh b/scripts/release.sh
index 380503662d..4321d96f62 100755
--- a/scripts/release.sh
+++ b/scripts/release.sh
@@ -59,8 +59,8 @@ _do_release_commit() {
$__sed -i.bk 's/(NVIM_VERSION_PRERELEASE) "-dev"/\1 ""/' CMakeLists.txt
if grep '(NVIM_API_PRERELEASE true)' CMakeLists.txt > /dev/null; then
$__sed -i.bk 's/(NVIM_API_PRERELEASE) true/\1 false/' CMakeLists.txt
- build/bin/nvim --api-info > test/functional/fixtures/api_level_$__API_LEVEL.mpack
- git add test/functional/fixtures/api_level_$__API_LEVEL.mpack
+ build/bin/nvim --api-info > "test/functional/fixtures/api_level_$__API_LEVEL.mpack"
+ git add "test/functional/fixtures/api_level_${__API_LEVEL}.mpack"
fi
$__sed -i.bk 's,(<releases>),\1\
diff --git a/scripts/update_terminfo.sh b/scripts/update_terminfo.sh
index 8a0937cc8c..775048f246 100755
--- a/scripts/update_terminfo.sh
+++ b/scripts/update_terminfo.sh
@@ -35,7 +35,7 @@ readonly -A entries=(
db="$(mktemp -du)"
print_bold() {
- printf "\\e[1m$*\\e[0m"
+ printf "\\e[1m%b\\e[0m" "$*"
}
cd "$(git rev-parse --show-toplevel)"
diff --git a/scripts/vim-patch.sh b/scripts/vim-patch.sh
index ad1973603e..f9f7330097 100755
--- a/scripts/vim-patch.sh
+++ b/scripts/vim-patch.sh
@@ -35,7 +35,7 @@ usage() {
echo " -m {vim-revision} List previous (older) missing Vim patches."
echo " -M List all merged patch-numbers (at current v:version)."
echo " -p {vim-revision} Download and generate a Vim patch. vim-revision"
- echo " can be a Vim version (8.0.xxx) or a Git hash."
+ echo " can be a Vim version (8.1.xxx) or a Git hash."
echo " -P {vim-revision} Download, generate and apply a Vim patch."
echo " -g {vim-revision} Download a Vim patch."
echo " -s [pr args] Create a vim-patch pull request."
@@ -120,9 +120,9 @@ get_vim_sources() {
commit_message() {
if [[ -n "$vim_tag" ]]; then
- printf '%s\n%s' "${vim_message}" "${vim_commit_url}"
+ printf '%s\n\n%s\n\n%s' "${vim_message}" "${vim_commit_url}" "${vim_coauthor}"
else
- printf 'vim-patch:%s\n\n%s\n%s' "$vim_version" "$vim_message" "$vim_commit_url"
+ printf 'vim-patch:%s\n\n%s\n\n%s\n\n%s' "$vim_version" "$vim_message" "$vim_commit_url" "$vim_coauthor"
fi
}
@@ -175,6 +175,7 @@ assign_commit_details() {
vim_commit_url="https://github.com/vim/vim/commit/${vim_commit}"
vim_message="$(git -C "${VIM_SOURCE_DIR}" log -1 --pretty='format:%B' "${vim_commit}" \
| sed -e 's/\(#[0-9]\{1,\}\)/vim\/vim\1/g')"
+ vim_coauthor="$(git -C "${VIM_SOURCE_DIR}" log -1 --pretty='format:Co-authored-by: %an <%ae>' "${vim_commit}")"
if [[ ${munge_commit_line} == "true" ]]; then
# Remove first line of commit message.
vim_message="$(echo "${vim_message}" | sed -e '1s/^patch /vim-patch:/')"
@@ -192,11 +193,15 @@ preprocess_patch() {
2>/dev/null $nvim --cmd 'set dir=/tmp' +'g@^diff --git a/\<\%('"${na_files}"'\)\>@norm! d/\v(^diff)|%$ ' +w +q "$file"
# Remove *.proto, Make*, INSTALL*, gui_*, beval.*, some if_*, gvim, libvterm, tee, VisVim, xpm, xxd
- local na_src='auto\|configure.*\|GvimExt\|libvterm\|proto\|tee\|VisVim\|xpm\|xxd\|Make.*\|INSTALL.*\|beval.*\|gui.*\|if_lua\|if_mzsch\|if_olepp\|if_ole\|if_perl\|if_py\|if_ruby\|if_tcl\|if_xcmdsrv'
+ local na_src='auto\|configure.*\|GvimExt\|hardcopy.*\|libvterm\|proto\|tee\|VisVim\|xpm\|xxd\|Make.*\|INSTALL.*\|beval.*\|gui.*\|if_cscop\|if_lua\|if_mzsch\|if_olepp\|if_ole\|if_perl\|if_py\|if_ruby\|if_tcl\|if_xcmdsrv'
2>/dev/null $nvim --cmd 'set dir=/tmp' +'g@^diff --git a/src/\S*\<\%(testdir/\)\@<!\%('"${na_src}"'\)\>@norm! d/\v(^diff)|%$ ' +w +q "$file"
+ # Remove runtime files ported to Lua.
+ local na_rt='filetype\.vim\|scripts\.vim\|autoload\/ft\/dist\.vim\|print\/.*'
+ 2>/dev/null $nvim --cmd 'set dir=/tmp' +'g@^diff --git a/runtime/\<\%('"${na_rt}"'\)\>@norm! d/\v(^diff)|%$ ' +w +q "$file"
+
# Remove unwanted Vim doc files.
- local na_doc='channel\.txt\|netbeans\.txt\|os_\w\+\.txt\|term\.txt\|todo\.txt\|version\d\.txt\|vim9\.txt\|sponsor\.txt\|intro\.txt\|tags'
+ local na_doc='channel\.txt\|if_cscop\.txt\|netbeans\.txt\|os_\w\+\.txt\|print\.txt\|term\.txt\|todo\.txt\|version\d\.txt\|vim9\.txt\|sponsor\.txt\|intro\.txt\|tags'
2>/dev/null $nvim --cmd 'set dir=/tmp' +'g@^diff --git a/runtime/doc/\<\%('"${na_doc}"'\)\>@norm! d/\v(^diff)|%$ ' +w +q "$file"
# Remove "Last change ..." changes in doc files.
@@ -207,7 +212,7 @@ preprocess_patch() {
2>/dev/null $nvim --cmd 'set dir=/tmp' +'g@^diff --git a/src/testdir/\<\%('"${na_src_testdir}"'\)\>@norm! d/\v(^diff)|%$ ' +w +q "$file"
# Remove testdir/test_*.vim files
- local na_src_testdir='balloon.*\|channel.*\|crypt\.vim\|gui.*\|job_fails\.vim\|json\.vim\|mzscheme\.vim\|netbeans.*\|paste\.vim\|popupwin.*\|restricted\.vim\|shortpathname\.vim\|tcl\.vim\|terminal.*\|xxd\.vim'
+ local na_src_testdir='balloon.*\|channel.*\|crypt\.vim\|cscope\.vim\|gui.*\|hardcopy\.vim\|job_fails\.vim\|json\.vim\|mzscheme\.vim\|netbeans.*\|paste\.vim\|popupwin.*\|restricted\.vim\|shortpathname\.vim\|tcl\.vim\|terminal.*\|xxd\.vim'
2>/dev/null $nvim --cmd 'set dir=/tmp' +'g@^diff --git a/src/testdir/\<test_\%('"${na_src_testdir}"'\)\>@norm! d/\v(^diff)|%$ ' +w +q "$file"
# Remove version.c #7555
@@ -237,6 +242,14 @@ preprocess_patch() {
LC_ALL=C sed -e 's/\( [ab]\/src\/nvim\)\/userfunc\.c/\1\/eval\/userfunc\.c/g' \
"$file" > "$file".tmp && mv "$file".tmp "$file"
+ # Rename evalbuffer.c to eval/buffer.c
+ LC_ALL=C sed -e 's/\( [ab]\/src\/nvim\)\/evalbuffer\.c/\1\/eval\/buffer\.c/g' \
+ "$file" > "$file".tmp && mv "$file".tmp "$file"
+
+ # Rename evalwindow.c to eval/window.c
+ LC_ALL=C sed -e 's/\( [ab]\/src\/nvim\)\/evalwindow\.c/\1\/eval\/window\.c/g' \
+ "$file" > "$file".tmp && mv "$file".tmp "$file"
+
# Rename map.c to mapping.c
LC_ALL=C sed -e 's/\( [ab]\/src\/nvim\)\/map\(\.[ch]\)/\1\/mapping\2/g' \
"$file" > "$file".tmp && mv "$file".tmp "$file"
@@ -274,6 +287,35 @@ preprocess_patch() {
"$file" > "$file".tmp && mv "$file".tmp "$file"
}
+uncrustify_patch() {
+ git diff --quiet || {
+ >&2 echo 'Vim source working tree dirty, aborting.'
+ exit 1
+ }
+
+ local patch_path=$NVIM_SOURCE_DIR/build/vim_patch
+ rm -rf "$patch_path"
+ mkdir -p "$patch_path"/{a,b}
+
+ local commit="$1"
+ for file in $(git diff-tree --name-only --no-commit-id -r --diff-filter=a "$commit"); do
+ git --work-tree="$patch_path"/a checkout --quiet "$commit"~ -- "$file"
+ done
+ for file in $(git diff-tree --name-only --no-commit-id -r --diff-filter=d "$commit"); do
+ git --work-tree="$patch_path"/b checkout --quiet "$commit" -- "$file"
+ done
+ git reset --quiet --hard HEAD
+
+ # If the difference are drastic enough uncrustify may need to be used more
+ # than once. This is obviously a bug that needs to be fixed on uncrustify's
+ # end, but in the meantime this workaround is sufficient.
+ for _ in {1..2}; do
+ uncrustify -c "$NVIM_SOURCE_DIR"/src/uncrustify.cfg -q --replace --no-backup "$patch_path"/{a,b}/src/*.[ch]
+ done
+
+ (cd "$patch_path" && (git --no-pager diff --no-index --no-prefix --patch --unified=5 --color=never a/ b/ || true))
+}
+
get_vimpatch() {
get_vim_sources
@@ -282,7 +324,11 @@ get_vimpatch() {
msg_ok "Found Vim revision '${vim_commit}'."
local patch_content
- patch_content="$(git --no-pager show --unified=5 --color=never -1 --pretty=medium "${vim_commit}")"
+ if check_executable uncrustify; then
+ patch_content="$(uncrustify_patch "${vim_commit}")"
+ else
+ patch_content="$(git --no-pager show --unified=5 --color=never -1 --pretty=medium "${vim_commit}")"
+ fi
cd "${NVIM_SOURCE_DIR}"
@@ -466,7 +512,7 @@ submit_pr() {
# Gets all Vim commits since the "start" commit.
list_vim_commits() { (
- cd "${VIM_SOURCE_DIR}" && git log --reverse v8.0.0000..HEAD "$@"
+ cd "${VIM_SOURCE_DIR}" && git log --reverse v8.1.0000..HEAD "$@"
) }
# Prints all (sorted) "vim-patch:xxx" tokens found in the Nvim git log.
@@ -484,7 +530,7 @@ list_vimpatch_tokens() {
list_vimpatch_numbers() {
# Transform "vim-patch:X.Y.ZZZZ" to "ZZZZ".
list_vimpatch_tokens | while read -r vimpatch_token; do
- echo "$vimpatch_token" | grep '8\.0\.' | sed 's/.*vim-patch:8\.0\.\([0-9a-z]\+\).*/\1/'
+ echo "$vimpatch_token" | grep '8\.1\.' | sed -E 's/.*vim-patch:8\.1\.([0-9a-z]+).*/\1/'
done
}
@@ -581,7 +627,7 @@ _set_missing_vimpatches() {
else
info=${line#* }
if [[ -n $info ]]; then
- # Remove any "patch 8.0.0902: " prefixes, and prefix with ": ".
+ # Remove any "patch 8.1.0902: " prefixes, and prefix with ": ".
info=": ${info#patch*: }"
fi
fi
@@ -624,7 +670,7 @@ show_vimpatches() {
Instructions:
To port one of the above patches to Neovim, execute this script with the patch revision as argument and follow the instructions, e.g.
- '${BASENAME} -p v8.0.1234', or '${BASENAME} -P v8.0.1234'
+ '${BASENAME} -p v8.1.1234', or '${BASENAME} -P v8.1.1234'
NOTE: Please port the _oldest_ patch if you possibly can.
You can use '${BASENAME} -l path/to/file' to see what patches are missing for a file.
diff --git a/scripts/vimpatch.lua b/scripts/vimpatch.lua
index 11eb285462..836f672f6e 100755
--- a/scripts/vimpatch.lua
+++ b/scripts/vimpatch.lua
@@ -1,7 +1,7 @@
-- Updates version.c list of applied Vim patches.
--
-- Usage:
--- VIM_SOURCE_DIR=~/neovim/.vim-src/ nvim -i NONE -u NONE --headless +'luafile ./scripts/vimpatch.lua' +q
+-- VIM_SOURCE_DIR=~/neovim/.vim-src/ nvim -V1 -es -i NONE +'luafile ./scripts/vimpatch.lua' +q
local nvim = vim.api
@@ -22,12 +22,13 @@ end
-- Generates the lines to be inserted into the src/version.c
-- `included_patches[]` definition.
local function gen_version_c_lines()
- -- Set of merged Vim 8.0.zzzz patch numbers.
+ -- Set of merged Vim 8.1.zzzz patch numbers.
local merged_patch_numbers = {}
local highest = 0
for _, n in ipairs(vimpatch_sh_list_numbers()) do
+ n = tonumber(n)
if n then
- merged_patch_numbers[tonumber(n)] = true
+ merged_patch_numbers[n] = true
highest = math.max(highest, n)
end
end