(renderer) add h.<Highlight>(..) shorthand
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				NeoVim tests / plenary-tests (push) Successful in 10s
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	NeoVim tests / plenary-tests (push) Successful in 10s
				
			This commit is contained in:
		
							parent
							
								
									f8056fe2e6
								
							
						
					
					
						commit
						7ad3d941f4
					
				@ -75,7 +75,7 @@ function Buffer:autocmd(event, opts)
 | 
				
			|||||||
  vim.api.nvim_create_autocmd(event, vim.tbl_extend('force', opts, { buffer = self.bufnr }))
 | 
					  vim.api.nvim_create_autocmd(event, vim.tbl_extend('force', opts, { buffer = self.bufnr }))
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
--- @param tree Tree
 | 
					--- @param tree u.renderer.Tree
 | 
				
			||||||
function Buffer:render(tree) return self.renderer:render(tree) end
 | 
					function Buffer:render(tree) return self.renderer:render(tree) end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
return Buffer
 | 
					return Buffer
 | 
				
			||||||
 | 
				
			|||||||
@ -1,22 +1,27 @@
 | 
				
			|||||||
local M = {}
 | 
					local M = {}
 | 
				
			||||||
local H = {}
 | 
					local H = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
--- @alias Tag { kind: 'tag'; name: string, attributes: table<string, unknown>, children: Tree }
 | 
					--- @alias u.renderer.Tag { kind: 'tag'; name: string, attributes: table<string, unknown>, children: u.renderer.Tree }
 | 
				
			||||||
--- @alias Node nil | boolean | string | Tag
 | 
					--- @alias u.renderer.Node nil | boolean | string | u.renderer.Tag
 | 
				
			||||||
--- @alias Tree Node | Node[]
 | 
					--- @alias u.renderer.Tree u.renderer.Node | u.renderer.Node[]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
--- @param name string
 | 
					--- @type table<string, fun(attributes: table<string, any>, children: u.renderer.Tree): u.renderer.Tag> & fun(name: string, attributes: table<string, any>, children: u.renderer.Tree): u.renderer.Tag>
 | 
				
			||||||
--- @param attributes? table<string, any>
 | 
					M.h = setmetatable({}, {
 | 
				
			||||||
--- @param children? Node | Node[]
 | 
					  __call = function(_, name, attributes, children)
 | 
				
			||||||
--- @return Tag
 | 
					    return {
 | 
				
			||||||
function M.h(name, attributes, children)
 | 
					      kind = 'tag',
 | 
				
			||||||
  return {
 | 
					      name = name,
 | 
				
			||||||
    kind = 'tag',
 | 
					      attributes = attributes or {},
 | 
				
			||||||
    name = name,
 | 
					      children = children,
 | 
				
			||||||
    attributes = attributes or {},
 | 
					    }
 | 
				
			||||||
    children = children,
 | 
					  end,
 | 
				
			||||||
  }
 | 
					  __index = function(_, name)
 | 
				
			||||||
end
 | 
					    -- vim.print('dynamic hl ' .. name)
 | 
				
			||||||
 | 
					    return function(attributes, children)
 | 
				
			||||||
 | 
					      return M.h('text', vim.tbl_deep_extend('force', { hl = name }, attributes), children)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end,
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- Renderer {{{
 | 
					-- Renderer {{{
 | 
				
			||||||
--- @alias RendererExtmark { id?: number; start: [number, number]; stop: [number, number]; opts: any; tag: any }
 | 
					--- @alias RendererExtmark { id?: number; start: [number, number]; stop: [number, number]; opts: any; tag: any }
 | 
				
			||||||
@ -62,8 +67,8 @@ function Renderer.new(bufnr) -- {{{
 | 
				
			|||||||
end -- }}}
 | 
					end -- }}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
--- @param opts {
 | 
					--- @param opts {
 | 
				
			||||||
---   tree: Tree;
 | 
					---   tree: u.renderer.Tree;
 | 
				
			||||||
---   on_tag?: fun(tag: Tag, start0: [number, number], stop0: [number, number]): any;
 | 
					---   on_tag?: fun(tag: u.renderer.Tag, start0: [number, number], stop0: [number, number]): any;
 | 
				
			||||||
--- }
 | 
					--- }
 | 
				
			||||||
function Renderer.markup_to_lines(opts) -- {{{
 | 
					function Renderer.markup_to_lines(opts) -- {{{
 | 
				
			||||||
  --- @type string[]
 | 
					  --- @type string[]
 | 
				
			||||||
@ -82,7 +87,7 @@ function Renderer.markup_to_lines(opts) -- {{{
 | 
				
			|||||||
    curr_col1 = 1
 | 
					    curr_col1 = 1
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  --- @param node Node
 | 
					  --- @param node u.renderer.Node
 | 
				
			||||||
  local function visit(node) -- {{{
 | 
					  local function visit(node) -- {{{
 | 
				
			||||||
    if node == nil or type(node) == 'boolean' then return end
 | 
					    if node == nil or type(node) == 'boolean' then return end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -98,7 +103,7 @@ function Renderer.markup_to_lines(opts) -- {{{
 | 
				
			|||||||
      -- visit the children:
 | 
					      -- visit the children:
 | 
				
			||||||
      if Renderer.is_tag_arr(node.children) then
 | 
					      if Renderer.is_tag_arr(node.children) then
 | 
				
			||||||
        for _, child in
 | 
					        for _, child in
 | 
				
			||||||
          ipairs(node.children --[[@as Node[] ]])
 | 
					          ipairs(node.children --[[@as u.renderer.Node[] ]])
 | 
				
			||||||
        do
 | 
					        do
 | 
				
			||||||
          -- newlines are not controlled by array entries, do NOT output a line here:
 | 
					          -- newlines are not controlled by array entries, do NOT output a line here:
 | 
				
			||||||
          visit(child)
 | 
					          visit(child)
 | 
				
			||||||
@ -123,11 +128,11 @@ end -- }}}
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
--- @param opts {
 | 
					--- @param opts {
 | 
				
			||||||
---   tree: string;
 | 
					---   tree: string;
 | 
				
			||||||
---   format_tag?: fun(tag: Tag): string;
 | 
					---   format_tag?: fun(tag: u.renderer.Tag): string;
 | 
				
			||||||
--- }
 | 
					--- }
 | 
				
			||||||
function Renderer.markup_to_string(opts) return table.concat(Renderer.markup_to_lines(opts), '\n') end
 | 
					function Renderer.markup_to_string(opts) return table.concat(Renderer.markup_to_lines(opts), '\n') end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
--- @param tree Tree
 | 
					--- @param tree u.renderer.Tree
 | 
				
			||||||
function Renderer:render(tree) -- {{{
 | 
					function Renderer:render(tree) -- {{{
 | 
				
			||||||
  local changedtick = vim.b[self.bufnr].changedtick
 | 
					  local changedtick = vim.b[self.bufnr].changedtick
 | 
				
			||||||
  if changedtick ~= self.changedtick then
 | 
					  if changedtick ~= self.changedtick then
 | 
				
			||||||
@ -302,7 +307,7 @@ end -- }}}
 | 
				
			|||||||
---
 | 
					---
 | 
				
			||||||
--- @private (private for now)
 | 
					--- @private (private for now)
 | 
				
			||||||
--- @param pos0 [number; number]
 | 
					--- @param pos0 [number; number]
 | 
				
			||||||
--- @return { extmark: RendererExtmark; tag: Tag; }[]
 | 
					--- @return { extmark: RendererExtmark; tag: u.renderer.Tag; }[]
 | 
				
			||||||
function Renderer:get_pos_infos(pos0) -- {{{
 | 
					function Renderer:get_pos_infos(pos0) -- {{{
 | 
				
			||||||
  local cursor_line0, cursor_col0 = pos0[1], pos0[2]
 | 
					  local cursor_line0, cursor_col0 = pos0[1], pos0[2]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -370,7 +375,7 @@ function Renderer:get_pos_infos(pos0) -- {{{
 | 
				
			|||||||
  -- created extmarks in self.curr.extmarks, which also has which tag each
 | 
					  -- created extmarks in self.curr.extmarks, which also has which tag each
 | 
				
			||||||
  -- extmark is associated with. Cross-reference with that list to get a list
 | 
					  -- extmark is associated with. Cross-reference with that list to get a list
 | 
				
			||||||
  -- of tags that we need to fire events for:
 | 
					  -- of tags that we need to fire events for:
 | 
				
			||||||
  --- @type { extmark: RendererExtmark; tag: Tag }[]
 | 
					  --- @type { extmark: RendererExtmark; tag: u.renderer.Tag }[]
 | 
				
			||||||
  local matching_tags = vim
 | 
					  local matching_tags = vim
 | 
				
			||||||
    .iter(intersecting_extmarks)
 | 
					    .iter(intersecting_extmarks)
 | 
				
			||||||
    --- @param ext RendererExtmark
 | 
					    --- @param ext RendererExtmark
 | 
				
			||||||
@ -387,7 +392,7 @@ end -- }}}
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
-- TreeBuilder {{{
 | 
					-- TreeBuilder {{{
 | 
				
			||||||
--- @class u.TreeBuilder
 | 
					--- @class u.TreeBuilder
 | 
				
			||||||
--- @field private nodes Node[]
 | 
					--- @field private nodes u.renderer.Node[]
 | 
				
			||||||
local TreeBuilder = {}
 | 
					local TreeBuilder = {}
 | 
				
			||||||
TreeBuilder.__index = TreeBuilder
 | 
					TreeBuilder.__index = TreeBuilder
 | 
				
			||||||
M.TreeBuilder = TreeBuilder
 | 
					M.TreeBuilder = TreeBuilder
 | 
				
			||||||
@ -397,7 +402,7 @@ function TreeBuilder.new()
 | 
				
			|||||||
  return self
 | 
					  return self
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
--- @param nodes Tree
 | 
					--- @param nodes u.renderer.Tree
 | 
				
			||||||
--- @return u.TreeBuilder
 | 
					--- @return u.TreeBuilder
 | 
				
			||||||
function TreeBuilder:put(nodes)
 | 
					function TreeBuilder:put(nodes)
 | 
				
			||||||
  table.insert(self.nodes, nodes)
 | 
					  table.insert(self.nodes, nodes)
 | 
				
			||||||
@ -406,7 +411,7 @@ end
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
--- @param name string
 | 
					--- @param name string
 | 
				
			||||||
--- @param attributes? table<string, any>
 | 
					--- @param attributes? table<string, any>
 | 
				
			||||||
--- @param children? Node | Node[]
 | 
					--- @param children? u.renderer.Node | u.renderer.Node[]
 | 
				
			||||||
--- @return u.TreeBuilder
 | 
					--- @return u.TreeBuilder
 | 
				
			||||||
function TreeBuilder:put_h(name, attributes, children)
 | 
					function TreeBuilder:put_h(name, attributes, children)
 | 
				
			||||||
  local tag = M.h(name, attributes, children)
 | 
					  local tag = M.h(name, attributes, children)
 | 
				
			||||||
@ -423,7 +428,7 @@ function TreeBuilder:nest(fn)
 | 
				
			|||||||
  return self
 | 
					  return self
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
--- @return Tree
 | 
					--- @return u.renderer.Tree
 | 
				
			||||||
function TreeBuilder:tree() return self.nodes end
 | 
					function TreeBuilder:tree() return self.nodes end
 | 
				
			||||||
-- }}}
 | 
					-- }}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user