fix: nil because i'm new on lua
parent
edcceb144c
commit
2440a208d1
|
@ -54,11 +54,6 @@ local ts = require('tsql')
|
||||||
ts.t(ts.buf_match.any(), ts.ts_query.from_scm("string"), ts.sink_by.print()):do_nvim()
|
ts.t(ts.buf_match.any(), ts.ts_query.from_scm("string"), ts.sink_by.print()):do_nvim()
|
||||||
```
|
```
|
||||||
|
|
||||||
Here's the same thing in a one-liner
|
|
||||||
```lua
|
|
||||||
:lua local ts = require('tsql'); ts.t(ts.buf_match.any(), ts.ts_query.from_scm("string"), ts.sink_by.print()):do_nvim()
|
|
||||||
```
|
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
Use your favorite package manager to install the plugin. For example, with [vim-plug](https://github.com/junegunn/vim-plug):
|
Use your favorite package manager to install the plugin. For example, with [vim-plug](https://github.com/junegunn/vim-plug):
|
||||||
|
|
50
lua/tsql.lua
50
lua/tsql.lua
|
@ -17,38 +17,37 @@ M.sink_by = {}
|
||||||
---@alias Format fun(nodes: QNode[]): string
|
---@alias Format fun(nodes: QNode[]): string
|
||||||
M.format = {}
|
M.format = {}
|
||||||
|
|
||||||
M.format.default = M.format.display
|
|
||||||
|
|
||||||
---@class Sink
|
---@class Sink
|
||||||
---@field sink fun(self, nodes: QNode[])
|
---@field sink fun(self, nodes: QNode[])
|
||||||
M.Sink = {}
|
M.Sink = {}
|
||||||
M.Sink.__index = M.Sink
|
M.Sink.__index = M.Sink
|
||||||
|
|
||||||
---@return Sink
|
---@type Ctor<fun(nodes: QNode[]), Sink>
|
||||||
---@param func fun(self, nodes:QNode[])
|
|
||||||
function M.sink_by.pure_fn(func)
|
function M.sink_by.pure_fn(func)
|
||||||
return setmetatable({
|
local self = setmetatable({
|
||||||
sink = func
|
sink = function(_, nodes)
|
||||||
|
return func(nodes)
|
||||||
|
end
|
||||||
}, M.Sink)
|
}, M.Sink)
|
||||||
|
self.__index = M.Sink
|
||||||
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
---@return Sink
|
---@return Sink
|
||||||
function M.sink_by.highlight()
|
function M.sink_by.highlight()
|
||||||
return setmetatable({
|
return M.sink_by.pure_fn(function(nodes)
|
||||||
---@type fun(nodes: QNode[])
|
for _, node in ipairs(nodes) do
|
||||||
sink = function(nodes)
|
vim.highlight.range(
|
||||||
for _, node in ipairs(nodes) do
|
node.buf.bufnr,
|
||||||
vim.highlight.range(
|
M.config.nvim_ns,
|
||||||
node.buf.bufnr,
|
M.config.nvim_hl_group,
|
||||||
M.config.nvim_ns,
|
{ node.start.row_0, node.start.col_0 },
|
||||||
M.config.nvim_hl_group,
|
{ node.end_ex_col.row_0, node.end_ex_col.col_0 },
|
||||||
{ node.start.row_0, node.start.col_0 },
|
{}
|
||||||
{ node.end_ex_col.row_0, node.end_ex_col.col_0 },
|
)
|
||||||
{}
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
}, M.Sink)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
---@type Format
|
---@type Format
|
||||||
|
@ -67,8 +66,14 @@ end
|
||||||
function M.format.display(nodes)
|
function M.format.display(nodes)
|
||||||
local texts = {}
|
local texts = {}
|
||||||
for _, node in ipairs(nodes) do
|
for _, node in ipairs(nodes) do
|
||||||
local text = vim.api.nvim_buf_get_text(node.buf.bufnr, node.start.row_0, node.start.col_0, node.end_ex_col.row_0,
|
local text = vim.api.nvim_buf_get_text(
|
||||||
node.end_ex_col.col_0)
|
node.buf.bufnr,
|
||||||
|
node.start.row_0,
|
||||||
|
node.start.col_0,
|
||||||
|
node.end_ex_col.row_0,
|
||||||
|
node.end_ex_col.col_0,
|
||||||
|
{}
|
||||||
|
)
|
||||||
table.insert(texts, table.concat(text, '\n'))
|
table.insert(texts, table.concat(text, '\n'))
|
||||||
end
|
end
|
||||||
return table.concat(texts, '\n\n')
|
return table.concat(texts, '\n\n')
|
||||||
|
@ -83,6 +88,7 @@ function M.format.dump(nodes)
|
||||||
end
|
end
|
||||||
|
|
||||||
M.format.debug = M.format.dump
|
M.format.debug = M.format.dump
|
||||||
|
M.format.default = M.format.display
|
||||||
|
|
||||||
---@param format Format | nil
|
---@param format Format | nil
|
||||||
---@return Sink
|
---@return Sink
|
||||||
|
@ -214,6 +220,7 @@ end
|
||||||
function M.Store:new()
|
function M.Store:new()
|
||||||
local o = { highlighting = {} }
|
local o = { highlighting = {} }
|
||||||
setmetatable(o, self)
|
setmetatable(o, self)
|
||||||
|
self.__index = self
|
||||||
return o
|
return o
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -233,6 +240,7 @@ function M.setup(config)
|
||||||
end, { nargs = "?", desc = "tsql DSL invocation" })
|
end, { nargs = "?", desc = "tsql DSL invocation" })
|
||||||
|
|
||||||
M.store = M.Store:new()
|
M.store = M.Store:new()
|
||||||
|
print("tsql v0.0.1")
|
||||||
end
|
end
|
||||||
|
|
||||||
return M
|
return M
|
||||||
|
|
|
@ -15,6 +15,7 @@ local M = {}
|
||||||
---from `vim.treesitter.get_parser(bufnr: number):lang() -> string [may fail]`
|
---from `vim.treesitter.get_parser(bufnr: number):lang() -> string [may fail]`
|
||||||
---@field is_loaded boolean whether it is loaded
|
---@field is_loaded boolean whether it is loaded
|
||||||
M.QBuf = {}
|
M.QBuf = {}
|
||||||
|
M.QBuf.__index = M.QBuf
|
||||||
|
|
||||||
---@return string language
|
---@return string language
|
||||||
---NOTE: may fail with string
|
---NOTE: may fail with string
|
||||||
|
@ -52,7 +53,7 @@ function M.QBuf:new(bufnr, path, filetype, lang, is_loaded)
|
||||||
is_loaded = is_loaded
|
is_loaded = is_loaded
|
||||||
}
|
}
|
||||||
setmetatable(qbuf, self)
|
setmetatable(qbuf, self)
|
||||||
self.__index = self
|
qbuf.__index = self
|
||||||
return qbuf
|
return qbuf
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -86,6 +87,7 @@ end
|
||||||
---NOTE: assigns `match_fn` private field
|
---NOTE: assigns `match_fn` private field
|
||||||
function M.BufMatch.new(match_fn)
|
function M.BufMatch.new(match_fn)
|
||||||
local self = setmetatable({}, M.BufMatch)
|
local self = setmetatable({}, M.BufMatch)
|
||||||
|
self.__index = M.BufMatch
|
||||||
self.match_fn = match_fn
|
self.match_fn = match_fn
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
-- Interface-only file for type-hints
|
||||||
|
--
|
||||||
|
|
||||||
|
---@generic T
|
||||||
|
---@generic R
|
||||||
|
---
|
||||||
|
---@alias Ctor<T, R> fun(arg: T): R
|
||||||
|
---A good practice is to only has a single argument per ctor/class method.
|
||||||
|
---If you need multiple arguments, having explicit names is much better than
|
||||||
|
---positional args, unless you want currying.
|
|
@ -0,0 +1,13 @@
|
||||||
|
# Simple location for me to use as a neovim repl
|
||||||
|
|
||||||
|
```lua
|
||||||
|
:lua local ts = require('tsql'); ts.t(ts.buf_match.any(), ts.ts_query.from_scm("string"), ts.sink_by.print()):do_nvim();
|
||||||
|
|
||||||
|
:lua local ts = require('tsql'); local tsql = ts.t(ts.buf_match.any(), ts.ts_query.from_scm("string"), ts.sink_by.print()); print(vim.inspect(tsql.buf_match));
|
||||||
|
|
||||||
|
-- print found bufs
|
||||||
|
:lua local t = require('tsql'); print(vim.inspect(t.nvim_get_qbufs()))
|
||||||
|
|
||||||
|
-- check that buf filter works
|
||||||
|
:lua local t = require('tsql'); print(vim.inspect(t.buf_match.any():filter_on(t.nvim_get_qbufs())))
|
||||||
|
```
|
Loading…
Reference in New Issue