Skip to content

Commit a42ee5f

Browse files
chore(refactor): remove wrapper class in handlers
## Details No need to add the "buffer handler" classes given that the language level implementations fan out to components now so are very thin.
1 parent 3da7bb4 commit a42ee5f

File tree

9 files changed

+59
-115
lines changed

9 files changed

+59
-115
lines changed

doc/render-markdown.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
*render-markdown.txt* For NVIM v0.11.3 Last change: 2025 August 08
1+
*render-markdown.txt* For NVIM v0.11.3 Last change: 2025 August 14
22

33
==============================================================================
44
Table of Contents *render-markdown-table-of-contents*

lua/render-markdown/handler/html.lua

Lines changed: 15 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -2,54 +2,35 @@ local Context = require('render-markdown.request.context')
22
local Marks = require('render-markdown.lib.marks')
33
local ts = require('render-markdown.core.ts')
44

5-
---@class render.md.handler.buf.Html
6-
---@field private query vim.treesitter.Query
7-
---@field private renders table<string, render.md.Render>
8-
---@field private context render.md.request.Context
9-
local Handler = {}
10-
Handler.__index = Handler
5+
---@class render.md.handler.Html: render.md.Handler
6+
local M = {}
117

12-
---@param buf integer
13-
---@return render.md.handler.buf.Html
14-
function Handler.new(buf)
15-
local self = setmetatable({}, Handler)
16-
self.query = ts.parse(
8+
---@param ctx render.md.handler.Context
9+
---@return render.md.Mark[]
10+
function M.parse(ctx)
11+
local query = ts.parse(
1712
'html',
1813
[[
1914
(comment) @comment
2015
(element) @tag
2116
]]
2217
)
23-
self.renders = {
18+
---@type table<string, render.md.Render>
19+
local renders = {
2420
comment = require('render-markdown.render.html.comment'),
2521
tag = require('render-markdown.render.html.tag'),
2622
}
27-
self.context = Context.get(buf)
28-
return self
29-
end
30-
31-
---@param root TSNode
32-
---@return render.md.Mark[]
33-
function Handler:run(root)
34-
if self.context:skip(self.context.config.html) then
23+
local context = Context.get(ctx.buf)
24+
if context:skip(context.config.html) then
3525
return {}
3626
end
37-
local marks = Marks.new(self.context, true)
38-
self.context.view:nodes(root, self.query, function(capture, node)
39-
local render = self.renders[capture]
40-
assert(render, 'unhandled html capture: ' .. capture)
41-
render:execute(self.context, marks, node)
27+
local marks = Marks.new(context, true)
28+
context.view:nodes(ctx.root, query, function(capture, node)
29+
local render = renders[capture]
30+
assert(render, ('unhandled html capture: %s'):format(capture))
31+
render:execute(context, marks, node)
4232
end)
4333
return marks:get()
4434
end
4535

46-
---@class render.md.handler.Html: render.md.Handler
47-
local M = {}
48-
49-
---@param ctx render.md.handler.Context
50-
---@return render.md.Mark[]
51-
function M.parse(ctx)
52-
return Handler.new(ctx.buf):run(ctx.root)
53-
end
54-
5536
return M

lua/render-markdown/handler/markdown.lua

Lines changed: 14 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,13 @@ local Context = require('render-markdown.request.context')
22
local Marks = require('render-markdown.lib.marks')
33
local ts = require('render-markdown.core.ts')
44

5-
---@class render.md.handler.buf.Markdown
6-
---@field private query vim.treesitter.Query
7-
---@field private renders table<string, render.md.Render>
8-
---@field private context render.md.request.Context
9-
local Handler = {}
10-
Handler.__index = Handler
5+
---@class render.md.handler.Markdown: render.md.Handler
6+
local M = {}
117

12-
---@param buf integer
13-
---@return render.md.handler.buf.Markdown
14-
function Handler.new(buf)
15-
local self = setmetatable({}, Handler)
16-
self.query = ts.parse(
8+
---@param ctx render.md.handler.Context
9+
---@return render.md.Mark[]
10+
function M.parse(ctx)
11+
local query = ts.parse(
1712
'markdown',
1813
[[
1914
(fenced_code_block) @code
@@ -42,7 +37,8 @@ function Handler.new(buf)
4237
(pipe_table) @table
4338
]]
4439
)
45-
self.renders = {
40+
---@type table<string, render.md.Render>
41+
local renders = {
4642
code = require('render-markdown.render.markdown.code'),
4743
dash = require('render-markdown.render.markdown.dash'),
4844
document = require('render-markdown.render.markdown.document'),
@@ -53,29 +49,14 @@ function Handler.new(buf)
5349
section = require('render-markdown.render.markdown.section'),
5450
table = require('render-markdown.render.markdown.table'),
5551
}
56-
self.context = Context.get(buf)
57-
return self
58-
end
59-
60-
---@param root TSNode
61-
---@return render.md.Mark[]
62-
function Handler:run(root)
63-
local marks = Marks.new(self.context, false)
64-
self.context.view:nodes(root, self.query, function(capture, node)
65-
local render = self.renders[capture]
66-
assert(render, 'unhandled markdown capture: ' .. capture)
67-
render:execute(self.context, marks, node)
52+
local context = Context.get(ctx.buf)
53+
local marks = Marks.new(context, false)
54+
context.view:nodes(ctx.root, query, function(capture, node)
55+
local render = renders[capture]
56+
assert(render, ('unhandled markdown capture: %s'):format(capture))
57+
render:execute(context, marks, node)
6858
end)
6959
return marks:get()
7060
end
7161

72-
---@class render.md.handler.Markdown: render.md.Handler
73-
local M = {}
74-
75-
---@param ctx render.md.handler.Context
76-
---@return render.md.Mark[]
77-
function M.parse(ctx)
78-
return Handler.new(ctx.buf):run(ctx.root)
79-
end
80-
8162
return M

lua/render-markdown/handler/markdown_inline.lua

Lines changed: 14 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,13 @@ local Context = require('render-markdown.request.context')
22
local Marks = require('render-markdown.lib.marks')
33
local ts = require('render-markdown.core.ts')
44

5-
---@class render.md.handler.buf.MarkdownInline
6-
---@field private query vim.treesitter.Query
7-
---@field private renders table<string, render.md.Render>
8-
---@field private context render.md.request.Context
9-
local Handler = {}
10-
Handler.__index = Handler
5+
---@class render.md.handler.MarkdownInline: render.md.Handler
6+
local M = {}
117

12-
---@param buf integer
13-
---@return render.md.handler.buf.MarkdownInline
14-
function Handler.new(buf)
15-
local self = setmetatable({}, Handler)
16-
self.query = ts.parse(
8+
---@param ctx render.md.handler.Context
9+
---@return render.md.Mark[]
10+
function M.parse(ctx)
11+
local query = ts.parse(
1712
'markdown_inline',
1813
[[
1914
(code_span) @code
@@ -32,35 +27,21 @@ function Handler.new(buf)
3227
(shortcut_link) @shortcut
3328
]]
3429
)
35-
self.renders = {
30+
---@type table<string, render.md.Render>
31+
local renders = {
3632
code = require('render-markdown.render.inline.code'),
3733
highlight = require('render-markdown.render.inline.highlight'),
3834
link = require('render-markdown.render.inline.link'),
3935
shortcut = require('render-markdown.render.inline.shortcut'),
4036
}
41-
self.context = Context.get(buf)
42-
return self
43-
end
44-
45-
---@param root TSNode
46-
---@return render.md.Mark[]
47-
function Handler:run(root)
48-
local marks = Marks.new(self.context, true)
49-
self.context.view:nodes(root, self.query, function(capture, node)
50-
local render = self.renders[capture]
51-
assert(render, 'unhandled inline capture: ' .. capture)
52-
render:execute(self.context, marks, node)
37+
local context = Context.get(ctx.buf)
38+
local marks = Marks.new(context, true)
39+
context.view:nodes(ctx.root, query, function(capture, node)
40+
local render = renders[capture]
41+
assert(render, ('unhandled inline capture: %s'):format(capture))
42+
render:execute(context, marks, node)
5343
end)
5444
return marks:get()
5545
end
5646

57-
---@class render.md.handler.MarkdownInline: render.md.Handler
58-
local M = {}
59-
60-
---@param ctx render.md.handler.Context
61-
---@return render.md.Mark[]
62-
function M.parse(ctx)
63-
return Handler.new(ctx.buf):run(ctx.root)
64-
end
65-
6647
return M

lua/render-markdown/health.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ local state = require('render-markdown.state')
55
local M = {}
66

77
---@private
8-
M.version = '8.7.0'
8+
M.version = '8.7.1'
99

1010
function M.check()
1111
M.start('versions')

lua/render-markdown/lib/node.lua

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ end
6464
---@return integer[]
6565
function Node:sections()
6666
local result = {} ---@type integer[]
67-
local levels = 0
67+
local levels = 0 ---@type integer
6868
local section = self:parent('section')
6969
while section do
7070
local level = section:level(false)
@@ -96,12 +96,13 @@ function Node:level(parent)
9696
end
9797

9898
---@param target string
99+
---@param outside string
99100
---@return integer, render.md.Node?
100-
function Node:level_in_section(target)
101+
function Node:level_in(target, outside)
101102
local level = 0
102103
local root = nil ---@type TSNode?
103104
local node = self.node ---@type TSNode?
104-
while node and node:type() ~= 'section' do
105+
while node and node:type() ~= outside do
105106
if node:type() == target then
106107
level = level + 1
107108
root = node

lua/render-markdown/render/inline/link.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
local Base = require('render-markdown.render.base')
22

3-
---@class render.md.link.Data
3+
---@class render.md.inline.link.Data
44
---@field icon render.md.mark.Text
55
---@field autolink boolean
66

77
---@class render.md.render.inline.Link: render.md.Render
8-
---@field private data render.md.link.Data
8+
---@field private data render.md.inline.link.Data
99
local Render = setmetatable({}, Base)
1010
Render.__index = Render
1111

lua/render-markdown/render/markdown/bullet.lua

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ function Render:setup()
2727
if not marker then
2828
return false
2929
end
30-
local level, root = self.node:level_in_section('list')
30+
local level, root = self.node:level_in('list', 'section')
3131
---@type render.md.bullet.Context
3232
local ctx = {
3333
level = level,
@@ -54,17 +54,17 @@ end
5454
---@param ctx render.md.bullet.Context
5555
---@return string?
5656
function Render.get_string(values, ctx)
57-
if type(values) == 'function' then
58-
return values(ctx)
59-
elseif type(values) == 'string' then
60-
return values
61-
else
57+
if type(values) == 'table' then
6258
local value = list.cycle(values, ctx.level)
6359
if type(value) == 'table' then
6460
return list.clamp(value, ctx.index)
6561
else
6662
return value
6763
end
64+
elseif type(values) == 'function' then
65+
return values(ctx)
66+
else
67+
return values
6868
end
6969
end
7070

lua/render-markdown/render/markdown/quote.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ function Render:setup()
2323
return false
2424
end
2525
local callout = self.context.callout:get(self.node)
26-
local level = self.node:level_in_section('block_quote')
26+
local level = self.node:level_in('block_quote', 'section')
2727
local icon = callout and callout.config.quote_icon or config.icon
2828
local highlight = callout and callout.config.highlight or config.highlight
2929
self.data = {
@@ -90,7 +90,7 @@ function Render:markers()
9090
if capture == 'marker' then
9191
-- marker nodes are a single '>' at the start of a block quote
9292
-- overlay the only range if it is at the current level
93-
if node:level_in_section('block_quote') == self.data.level then
93+
if node:level_in('block_quote', 'section') == self.data.level then
9494
self:marker(node, 1)
9595
end
9696
elseif capture == 'continuation' then

0 commit comments

Comments
 (0)