mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	fix(docs-html): update parser
- Improve generated HTML by updating parser which includes fixes for single "'" and single "|": https://github.com/neovim/tree-sitter-vimdoc/pull/31 - Updated parser also fixes the conceal issue for "help" highlight queries https://github.com/neovim/tree-sitter-vimdoc/issues/23 by NOT including whitespace in nodes. - But this means we need to restore the getws() function which scrapes leading whitespace from the original input (buffer).
This commit is contained in:
		@@ -249,6 +249,16 @@ local function getbuflinestr(node, bufnr, offset)
 | 
			
		||||
  return table.concat(lines, '\n')
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- Gets the whitespace just before `node` from the raw buffer text.
 | 
			
		||||
-- Needed for preformatted `old` lines.
 | 
			
		||||
local function getws(node, bufnr)
 | 
			
		||||
  local line1, c1, line2, _ = node:range()
 | 
			
		||||
  local raw = vim.fn.getbufline(bufnr, line1 + 1, line2 + 1)[1]
 | 
			
		||||
  local text_before = raw:sub(1, c1)
 | 
			
		||||
  local leading_ws = text_before:match('%s+$') or ''
 | 
			
		||||
  return leading_ws
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function get_tagname(node, bufnr)
 | 
			
		||||
  local text = vim.treesitter.get_node_text(node, bufnr)
 | 
			
		||||
  local tag = (node:type() == 'optionlink' or node:parent():type() == 'optionlink') and ("'%s'"):format(text) or text
 | 
			
		||||
@@ -354,12 +364,21 @@ local function visit_node(root, level, lang_tree, headings, opt, stats)
 | 
			
		||||
  local parent = root:parent() and root:parent():type() or nil
 | 
			
		||||
  local text = ''
 | 
			
		||||
  local trimmed
 | 
			
		||||
  local function node_text(node)
 | 
			
		||||
    return vim.treesitter.get_node_text(node or root, opt.buf)
 | 
			
		||||
  -- Gets leading whitespace of `node`.
 | 
			
		||||
  local function ws(node)
 | 
			
		||||
    node = node or root
 | 
			
		||||
    local ws_ = getws(node, opt.buf)
 | 
			
		||||
    -- XXX: first node of a (line) includes whitespace, even after
 | 
			
		||||
    -- https://github.com/neovim/tree-sitter-vimdoc/pull/31 ?
 | 
			
		||||
    if ws_ == '' then
 | 
			
		||||
      ws_ = vim.treesitter.get_node_text(node, opt.buf):match('^%s+') or ''
 | 
			
		||||
    end
 | 
			
		||||
    return ws_
 | 
			
		||||
  end
 | 
			
		||||
  -- Gets leading whitespace of the current node.
 | 
			
		||||
  local function ws()
 | 
			
		||||
    return node_text():match('^%s+') or ''
 | 
			
		||||
  local function node_text(node, ws_)
 | 
			
		||||
    node = node or root
 | 
			
		||||
    ws_ = (ws_ == nil or ws_ == true) and getws(node, opt.buf) or ''
 | 
			
		||||
    return string.format('%s%s', ws_, vim.treesitter.get_node_text(node, opt.buf))
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  if root:named_child_count() == 0 or node_name == 'ERROR' then
 | 
			
		||||
@@ -401,7 +420,7 @@ local function visit_node(root, level, lang_tree, headings, opt, stats)
 | 
			
		||||
    if root:has_error() then
 | 
			
		||||
      return text
 | 
			
		||||
    end
 | 
			
		||||
    return ('<div class="help-column_heading">%s%s</div>'):format(ws(), trimmed)
 | 
			
		||||
    return ('<div class="help-column_heading">%s</div>'):format(text)
 | 
			
		||||
  elseif node_name == 'block' then
 | 
			
		||||
    if is_blank(text) then
 | 
			
		||||
      return ''
 | 
			
		||||
@@ -462,9 +481,9 @@ local function visit_node(root, level, lang_tree, headings, opt, stats)
 | 
			
		||||
    end
 | 
			
		||||
    local in_heading = vim.tbl_contains({'h1', 'h2', 'h3'}, parent)
 | 
			
		||||
    local cssclass = (not in_heading and get_indent(node_text()) > 8) and 'help-tag-right' or 'help-tag'
 | 
			
		||||
    local tagname = node_text(root:child(1))
 | 
			
		||||
    local tagname = node_text(root:child(1), false)
 | 
			
		||||
    if vim.tbl_count(stats.first_tags) < 2 then
 | 
			
		||||
      -- First 2 tags in the doc will be anchored at the main heading.
 | 
			
		||||
      -- Force the first 2 tags in the doc to be anchored at the main heading.
 | 
			
		||||
      table.insert(stats.first_tags, tagname)
 | 
			
		||||
      return ''
 | 
			
		||||
    end
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user