diff options
Diffstat (limited to 'runtime/lua/vim')
| -rw-r--r-- | runtime/lua/vim/filetype.lua | 40 | ||||
| -rw-r--r-- | runtime/lua/vim/highlight.lua | 19 | ||||
| -rw-r--r-- | runtime/lua/vim/lsp.lua | 32 | ||||
| -rw-r--r-- | runtime/lua/vim/lsp/buf.lua | 3 | ||||
| -rw-r--r-- | runtime/lua/vim/lsp/diagnostic.lua | 4 | ||||
| -rw-r--r-- | runtime/lua/vim/lsp/handlers.lua | 16 | ||||
| -rw-r--r-- | runtime/lua/vim/lsp/util.lua | 5 | 
7 files changed, 106 insertions, 13 deletions
diff --git a/runtime/lua/vim/filetype.lua b/runtime/lua/vim/filetype.lua index 819587bb3e..bd3b44e95b 100644 --- a/runtime/lua/vim/filetype.lua +++ b/runtime/lua/vim/filetype.lua @@ -220,26 +220,37 @@ local extension = {    ["f08"] = "fortran",    fpc = "fpcmake",    fsl = "framescript", -  bi = "freebasic",    fb = "freebasic",    fsi = "fsharp",    fsx = "fsharp", +  fusion = "fusion",    gdmo = "gdmo",    mo = "gdmo", +  tres = "gdresource", +  tscn = "gdresource", +  gd = "gdscript",    ged = "gedcom",    gmi = "gemtext",    gemini = "gemtext",    gift = "gift", +  glsl = "glsl",    gpi = "gnuplot", +  gnuplot = "gnuplot",    go = "go",    gp = "gp",    gs = "grads", +  gql = "graphql", +  graphql = "graphql", +  graphqls = "graphql",    gretl = "gretl",    gradle = "groovy",    groovy = "groovy",    gsp = "gsp", +  hack = "hack", +  hackpartial = "hack",    haml = "haml",    hsm = "hamster", +  hbs = "handlebars",    ["hs-boot"] = "haskell",    hsig = "haskell",    hsc = "haskell", @@ -251,8 +262,11 @@ local extension = {    errsum = "hercules",    ev = "hercules",    vc = "hercules", +  hcl = "hcl", +  heex = "heex",    hex = "hex",    ["h32"] = "hex", +  hjson = "hjson",    hog = "hog",    hws = "hollywood",    htt = "httest", @@ -293,6 +307,7 @@ local extension = {    webmanifest = "json",    ipynb = "json",    ["json-patch"] = "json", +  json5 = "json5",    jsonc = "jsonc",    jsp = "jsp",    jl = "julia", @@ -309,6 +324,9 @@ local extension = {    lte = "latte",    ld = "ld",    ldif = "ldif", +  journal = "ledger", +  ldg = "ledger", +  ledger = "ledger",    less = "less",    lex = "lex",    lxx = "lex", @@ -392,6 +410,7 @@ local extension = {    ncf = "ncf",    nginx = "nginx",    ninja = "ninja", +  nix = "nix",    nqc = "nqc",    roff = "nroff",    tmac = "nroff", @@ -426,6 +445,7 @@ local extension = {    pcmk = "pcmk",    pdf = "pdf",    plx = "perl", +  prisma = "prisma",    psgi = "perl",    al = "perl",    ctp = "php", @@ -469,6 +489,7 @@ local extension = {    ["ps1xml"] = "ps1xml",    psf = "psf",    psl = "psl", +  pug = "pug",    arr = "pyret",    pxd = "pyrex",    pyx = "pyrex", @@ -476,6 +497,8 @@ local extension = {    py = "python",    pyi = "python",    ptl = "python", +  ql = "ql", +  qll = "ql",    rad = "radiance",    mat = "radiance",    ["pod6"] = "raku", @@ -612,6 +635,7 @@ local extension = {    mata = "stata",    ado = "stata",    stp = "stp", +  sface = "surface",    svelte = "svelte",    svg = "svg",    swift = "swift", @@ -625,6 +649,7 @@ local extension = {    itcl = "tcl",    tk = "tcl",    jacl = "tcl", +  tl = "teal",    tmpl = "template",    ti = "terminfo",    dtx = "tex", @@ -637,6 +662,8 @@ local extension = {    texinfo = "texinfo",    text = "text",    tf = "tf", +  tfvars = "terraform", +  tla = "tla",    tli = "tli",    toml = "toml",    tpp = "tpp", @@ -724,6 +751,7 @@ local extension = {    yxx = "yacc",    yml = "yaml",    yaml = "yaml", +  yang = "yang",    ["z8a"] = "z8a",    zig = "zig",    zu = "zimbu", @@ -738,7 +766,9 @@ local extension = {    PL = function() vim.fn["dist#ft#FTpl"]() end,    R = function() vim.fn["dist#ft#FTr"]() end,    asm = function() vim.fn["dist#ft#FTasm"]() end, -  bas = function() vim.fn["dist#ft#FTVB"]("basic") end, +  bas = function() vim.fn["dist#ft#FTbas"]() end, +  bi = function() vim.fn["dist#ft#FTbas"]() end, +  bm = function() vim.fn["dist#ft#FTbas"]() end,    bash = function() vim.fn["dist#ft#SetFileTypeSH"]("bash") end,    btm = function() vim.fn["dist#ft#FTbtm"]() end,    c = function() vim.fn["dist#ft#FTlpc"]() end, @@ -890,8 +920,6 @@ local filename = {    ["EDIT_DESCRIPTION"] = "gitcommit",    [".gitconfig"] = "gitconfig",    [".gitmodules"] = "gitconfig", -  ["/.config/git/config"] = "gitconfig", -  ["/etc/gitconfig"] = "gitconfig",    ["gitolite.conf"] = "gitolite",    ["git-rebase-todo"] = "gitrebase",    gkrellmrc = "gkrellmrc", @@ -899,6 +927,7 @@ local filename = {    [".gnashpluginrc"] = "gnash",    gnashpluginrc = "gnash",    gnashrc = "gnash", +  ["go.work"] = "gowork",    [".gprc"] = "gp",    ["/.gnupg/gpg.conf"] = "gpg",    ["/.gnupg/options"] = "gpg", @@ -1146,7 +1175,10 @@ local pattern = {    [".*Eterm/.*%.cfg"] = "eterm",    [".*%.git/modules/.*/config"] = "gitconfig",    [".*%.git/config"] = "gitconfig", +  [".*/etc/gitconfig"] = "gitconfig",    [".*/%.config/git/config"] = "gitconfig", +  [".*%.git/config%.worktree"] = "gitconfig", +  [".*%.git/worktrees/.*/config%.worktree"] = "gitconfig",    ["%.gitsendemail%.msg%......."] = "gitsendemail",    ["gkrellmrc_."] = "gkrellmrc",    [".*/usr/.*/gnupg/options%.skel"] = "gpg", diff --git a/runtime/lua/vim/highlight.lua b/runtime/lua/vim/highlight.lua index 236f3165f2..12faa0a6e1 100644 --- a/runtime/lua/vim/highlight.lua +++ b/runtime/lua/vim/highlight.lua @@ -25,16 +25,29 @@ end  ---@param higroup highlight group to use for highlighting  ---@param rtype type of range (:help setreg, default charwise)  ---@param inclusive boolean indicating whether the range is end-inclusive (default false) -function highlight.range(bufnr, ns, higroup, start, finish, rtype, inclusive) +---@param priority number indicating priority of highlight (default 50) +function highlight.range(bufnr, ns, higroup, start, finish, rtype, inclusive, priority)    rtype = rtype or 'v'    inclusive = inclusive or false +  priority = priority or 50    -- sanity check    if start[2] < 0 or finish[1] < start[1] then return end    local region = vim.region(bufnr, start, finish, rtype, inclusive)    for linenr, cols in pairs(region) do -    api.nvim_buf_add_highlight(bufnr, ns, higroup, linenr, cols[1], cols[2]) +    local end_row +    if cols[2] == -1 then +      end_row = linenr + 1 +      cols[2] = 0 +    end +    api.nvim_buf_set_extmark(bufnr, ns, linenr, cols[1], { +      hl_group = higroup, +      end_row = end_row, +      end_col = cols[2], +      priority = priority, +      strict = false +    })    end  end @@ -82,7 +95,7 @@ function highlight.on_yank(opts)    pos1 = {pos1[2] - 1, pos1[3] - 1 + pos1[4]}    pos2 = {pos2[2] - 1, pos2[3] - 1 + pos2[4]} -  highlight.range(bufnr, yank_ns, higroup, pos1, pos2, event.regtype, event.inclusive) +  highlight.range(bufnr, yank_ns, higroup, pos1, pos2, event.regtype, event.inclusive, 200)    vim.defer_fn(      function() diff --git a/runtime/lua/vim/lsp.lua b/runtime/lua/vim/lsp.lua index 8b7eb4ac90..37e222a5ce 100644 --- a/runtime/lua/vim/lsp.lua +++ b/runtime/lua/vim/lsp.lua @@ -344,6 +344,7 @@ do        state.buffers[bufnr] = buf_state        if use_incremental_sync then          buf_state.lines = nvim_buf_get_lines(bufnr, 0, -1, true) +        buf_state.lines_tmp = {}          buf_state.pending_changes = {}        end      end @@ -403,11 +404,40 @@ do    ---@private    function changetracking.prepare(bufnr, firstline, lastline, new_lastline)      local incremental_changes = function(client, buf_state) -      local curr_lines = nvim_buf_get_lines(bufnr, 0, -1, true) + +      local prev_lines = buf_state.lines +      local curr_lines = buf_state.lines_tmp + +      local changed_lines = nvim_buf_get_lines(bufnr, firstline, new_lastline, true) +      for i = 1, firstline do +        curr_lines[i] = prev_lines[i] +      end +      for i = firstline + 1, new_lastline do +        curr_lines[i] = changed_lines[i - firstline] +      end +      for i = lastline + 1, #prev_lines do +        curr_lines[i - lastline + new_lastline] = prev_lines[i] +      end +      if tbl_isempty(curr_lines) then +        -- Can happen when deleting the entire contents of a buffer, see https://github.com/neovim/neovim/issues/16259. +        curr_lines[1] = '' +      end +        local line_ending = buf_get_line_ending(bufnr)        local incremental_change = sync.compute_diff(          buf_state.lines, curr_lines, firstline, lastline, new_lastline, client.offset_encoding or 'utf-16', line_ending) + +      -- Double-buffering of lines tables is used to reduce the load on the garbage collector. +      -- At this point the prev_lines table is useless, but its internal storage has already been allocated, +      -- so let's keep it around for the next didChange event, in which it will become the next +      -- curr_lines table. Note that setting elements to nil doesn't actually deallocate slots in the +      -- internal storage - it merely marks them as free, for the GC to deallocate them. +      for i in ipairs(prev_lines) do +        prev_lines[i] = nil +      end        buf_state.lines = curr_lines +      buf_state.lines_tmp = prev_lines +        return incremental_change      end      local full_changes = once(function() diff --git a/runtime/lua/vim/lsp/buf.lua b/runtime/lua/vim/lsp/buf.lua index c9b73e4b70..eb7ec579f1 100644 --- a/runtime/lua/vim/lsp/buf.lua +++ b/runtime/lua/vim/lsp/buf.lua @@ -447,6 +447,9 @@ end  ---@param query (string, optional)  function M.workspace_symbol(query)    query = query or npcall(vfn.input, "Query: ") +  if query == nil then +    return +  end    local params = {query = query}    request('workspace/symbol', params)  end diff --git a/runtime/lua/vim/lsp/diagnostic.lua b/runtime/lua/vim/lsp/diagnostic.lua index f38b469f3c..68942ae11a 100644 --- a/runtime/lua/vim/lsp/diagnostic.lua +++ b/runtime/lua/vim/lsp/diagnostic.lua @@ -168,8 +168,8 @@ end  ---     },  ---     -- Use a function to dynamically turn signs off  ---     -- and on, using buffer local variables ----     signs = function(bufnr, client_id) ----       return vim.bo[bufnr].show_signs == false +---     signs = function(namespace, bufnr) +---       return vim.b[bufnr].show_signs == true  ---     end,  ---     -- Disable a feature  ---     update_in_insert = false, diff --git a/runtime/lua/vim/lsp/handlers.lua b/runtime/lua/vim/lsp/handlers.lua index c0843e1577..a997b887d9 100644 --- a/runtime/lua/vim/lsp/handlers.lua +++ b/runtime/lua/vim/lsp/handlers.lua @@ -152,6 +152,17 @@ M['workspace/configuration'] = function(_, result, ctx)    return response  end +--see: https://microsoft.github.io/language-server-protocol/specifications/specification-current/#workspace_workspaceFolders +M['workspace/workspaceFolders'] = function(_, _, ctx) +  local client_id = ctx.client_id +  local client = vim.lsp.get_client_by_id(client_id) +  if not client then +    err_message("LSP[id=", client_id, "] client has shut down after sending the message") +    return +  end +  return client.workspace_folders or vim.NIL +end +  M['textDocument/publishDiagnostics'] = function(...)    return require('vim.lsp.diagnostic').on_publish_diagnostics(...)  end @@ -166,18 +177,19 @@ M['textDocument/references'] = function(_, result, ctx, config)    if not result or vim.tbl_isempty(result) then      vim.notify('No references found')    else +    local client = vim.lsp.get_client_by_id(ctx.client_id)      config = config or {}      if config.loclist then        vim.fn.setloclist(0, {}, ' ', {          title = 'References'; -        items = util.locations_to_items(result, ctx.offset_encoding); +        items = util.locations_to_items(result, client.offset_encoding);          context = ctx;        })        api.nvim_command("lopen")      else        vim.fn.setqflist({}, ' ', {          title = 'References'; -        items = util.locations_to_items(result, ctx.offset_encoding); +        items = util.locations_to_items(result, client.offset_encoding);          context = ctx;        })        api.nvim_command("botright copen") diff --git a/runtime/lua/vim/lsp/util.lua b/runtime/lua/vim/lsp/util.lua index 8be1683d86..d22c00ae76 100644 --- a/runtime/lua/vim/lsp/util.lua +++ b/runtime/lua/vim/lsp/util.lua @@ -1550,7 +1550,10 @@ do --[[ References ]]                        reference_ns,                        document_highlight_kind[kind],                        { start_line, start_idx }, -                      { end_line, end_idx }) +                      { end_line, end_idx }, +                      nil, +                      false, +                      40)      end    end  end  | 
