Repository: neovim
Issue: LSP completion: wrong startcol if label is not a keyword
Labels: bug,lsp

### Problem

For a snippet `/**  */` labeled with `/**` I get `/**/**  */` after completion at the end of line containing `/**` (see repros).

### Steps to reproduce

I have prepared both the test case and the repro to manual usage (extracted from existing tests).

Test case:
```lua
  it('starts in correct place if label is not a keyword', function()
    local completion_list = {
      isIncomplete = false,
      items = {
        {
          label = '/**',
          insertText = '/** ${1:hello} */',
          insertTextFormat = 2,
        },
      },
    }
    exec_lua(function()
      vim.o.completeopt = 'menuone,noselect'
    end)
    create_server(completion_list)
    feed('0i/<c-x><c-o>')
    retry(nil, nil, function()
      eq(
        1,
        exec_lua(function()
          return vim.fn.pumvisible()
        end)
      )
    end)
    feed('<C-n><C-y>')
    eq(
      { true, { '/** ${1:hello} */' } },
      exec_lua(function()
        return {
          vim.snippet.active({ direction = 1 }),
          vim.api.nvim_buf_get_lines(0, 0, -1, true),
        }
      end)
    ) -- this assertion fails
    feed('<tab>')
    eq(
      #'/** hello */',
      exec_lua(function()
        return vim.api.nvim_win_get_cursor(0)[2]
      end)
    )
  end)
```

init.lua:
```lua
local function create_server(opts)
  opts = opts or {}
  local server = {}
  server.messages = {}

  function server.cmd(dispatchers)
    local closing = false
    local handlers = opts.handlers or {}
    local srv = {}

    function srv.request(method, params, callback)
      table.insert(server.messages, {
        method = method,
        params = params,
      })
      local handler = handlers[method]
      if handler then
        handler(method, params, callback)
      elseif method == 'initialize' then
        callback(nil, {
          capabilities = opts.capabilities or {},
        })
      elseif method == 'shutdown' then
        callback(nil, nil)
      end
      local request_id = #server.messages
      return true, request_id
    end

    function srv.notify(method, params)
      table.insert(server.messages, {
        method = method,
        params = params,
      })
      if method == 'exit' then
        dispatchers.on_exit(0, 15)
      end
    end

    function srv.is_closing()
      return closing
    end

    function srv.terminate()
      closing = true
    end

    return srv
  end

  return server
end

local completion_result = {
  isIncomplete = false,
  items = {
    {
      label = '/**',
      insertText = '/** ${1:hello} */',
      insertTextFormat = 2,
      kind = 15,
      detail = 'Snippet with non-word label',
    },
  },
}

local server = create_server({
  capabilities = {
    completionProvider = {},
  },
  handlers = {
    ['textDocument/completion'] = function (_, _, callback)
      callback(nil, completion_result)
    end,
  },
})

-- vim.o.completeopt = 'menuone,noinsert'
vim.o.completeopt = 'menuone,noselect'
vim.fn.complete = vim.schedule_wrap(vim.fn.complete)

vim.api.nvim_create_autocmd('UIEnter', {
  callback = function ()
    vim.lsp.start({
      name = 'dummy',
      cmd = server.cmd,
      on_attach = function (client, bufnr0)
        vim.lsp.completion.enable(true, client.id, bufnr0, {})
      end,
    })
  end
})
```

(start Insert mode, type `/` and complete with `<C-x><C-o><C-n><C-y>`). 

### Expected behavior

Provide the correct `startcol` to vim.fn.complete. 

I have doubts whether this problem is solvable.

### Nvim version (nvim -v)

v0.11.0-dev-1013+gc8e47f648-dirty (dirty because of added test case only)

### Vim (not Nvim) behaves the same?

no

### Operating system/version

Debian Sid

### Terminal name/version

alacritty 0.15.0-dev (6dbd785b)

### $TERM environment variable

alacritty

### Installation

from repo