not sure yet, nix flake...

This commit is contained in:
RingOfStorms (Joshua Bell) 2024-04-03 16:09:01 -05:00
parent 633916dd9a
commit 43df590ba2
49 changed files with 132 additions and 2453 deletions

View file

@ -1,7 +0,0 @@
-- Autoload all files in this tools dir, minus this init again
for _, file in ipairs(vim.fn.readdir(vim.fn.stdpath("config") .. "/lua/tools", [[v:val =~ '\.lua$']])) do
if file ~= "init.lua" then
local tool = string.sub(file, 0, -5)
require("tools." .. tool)
end
end

View file

@ -1,20 +0,0 @@
-- Function to remove item from quickfix list
function RemoveQFItem()
local curqfidx = vim.fn.line(".") - 1
local qfall = vim.fn.getqflist()
table.remove(qfall, curqfidx + 1) -- Lua is 1-indexed
vim.fn.setqflist(qfall, "r")
vim.cmd(curqfidx .. "cfirst")
vim.cmd("copen")
end
-- Command to call the function
vim.api.nvim_create_user_command("RemoveQFItem", RemoveQFItem, {})
-- Auto command to map 'dd' in quickfix window
vim.api.nvim_create_autocmd("FileType", {
pattern = "qf",
callback = function()
vim.keymap.set("n", "dd", RemoveQFItem, { buffer = true, silent = true })
end,
})

View file

@ -1,86 +0,0 @@
-- Scratch files
local scratch = function(extension)
os.execute("mkdir -p ~/dev/scratches/")
local date = os.date("%Y-%m-%dT%H:%M:%S")
local filepath = "~/dev/scratches/scratch_" .. date .. extension
vim.cmd("execute 'edit " .. filepath .. "'")
end
local U = require("util")
U.keymaps({
{
"<leader>fsw",
function()
require("telescope.builtin").live_grep({
search_dirs = { "~/dev/scratches/" },
})
end,
desc = "Find Words in Scratches",
},
{
"<leader>fsf",
function()
require("telescope.builtin").find_files({
search_dirs = { "~/dev/scratches/" },
})
end,
desc = "Find Scratches",
},
{
"<leader>ss",
function()
scratch(".txt")
end,
desc = "New text scratch file",
},
{
"<leader>sn",
function()
scratch(".json")
end,
desc = "New json scratch file",
},
{
"<leader>sm",
function()
scratch(".md")
end,
desc = "New markdown scratch file",
},
{
"<leader>sq",
function()
scratch(".sql")
end,
desc = "New sql scratch file",
},
{
"<leader>st",
function()
scratch(".ts")
end,
desc = "New typescript scratch file",
},
{
"<leader>sb",
function()
scratch(".sh")
end,
desc = "New shell scratch file",
},
{
"<leader>sj",
function()
scratch(".js")
end,
desc = "New javascript scratch file",
},
{
"<leader>sr",
function()
scratch(".rs")
end,
desc = "New rust scratch file",
},
})

View file

@ -1,119 +0,0 @@
--PREREQ: https://github.com/darold/pgFormatter
-- Based on this video: https://www.youtube.com/watch?v=v3o9YaHBM4Q
local rust_sqlx_f = function()
return vim.treesitter.query.parse(
"rust",
[[
; query macro
(macro_invocation
(scoped_identifier
path: (identifier) @_path (#eq? @_path "sqlx")
name: (identifier) @_name (#any-of? @_name "query" "query_scalar"))
(token_tree
. (raw_string_literal) @sql (#offset! @sql 1 0 -1 0))
)
; query_as macro
(macro_invocation
(scoped_identifier
path: (identifier) @_path (#eq? @_path "sqlx")
name: (identifier) @_name (#eq? @_name "query_as"))
(token_tree
(_) . (raw_string_literal) @sql (#offset! @sql 1 0 -1 0))
)
; query and query_as function
(call_expression
(scoped_identifier
path: (identifier) @_path (#eq? @_path "sqlx")
name: (identifier) @_name (#contains? @_name "query"))
(arguments
(raw_string_literal) @sql (#offset! @sql 1 0 -1 0))
)
]]
)
end
local get_root = function(bufnr)
local parser = vim.treesitter.get_parser(bufnr, "rust", {})
local tree = parser:parse()[1]
return tree:root()
end
local format_dat_sql = function(bufnr)
local rust_sqlx = rust_sqlx_f()
bufnr = bufnr or vim.api.nvim_get_current_buf()
if vim.bo[bufnr].filetype ~= "rust" then
vim.notify "can only be used in rust"
return
end
local root = get_root(bufnr)
local changes = {}
for id, node in rust_sqlx:iter_captures(root, bufnr, 0, -1) do
local name = rust_sqlx.captures[id]
if name == "sql" then
-- range: { row_start [1], col_start [2], row_end [3], col_end }
local range = { node:range() }
local indentation = string.rep(" ", range[2])
local node_text = vim.treesitter.get_node_text(node, bufnr)
if node_text:match('r#"\n(.*\n)+?%s*"#$') == nil then
-- text is invalid because it does not have newlines in raw string literal
goto continue
end
local text = node_text:sub(4, -3) -- get just the inside of the raw string literal
-- TODO get current spaces for indentation and run pg_format with that indendation amount
local formatted = vim.fn.system({ "pg_format", "-L" }, text)
local lines = {}
for line in formatted:gmatch("[^\r\n]+") do
lines[#lines + 1] = line
end
for idx, line in ipairs(lines) do
lines[idx] = indentation .. line
end
-- Fix indentation of end of raw string literal as well
local last_line = vim.api.nvim_buf_get_lines(bufnr, range[3], range[3] + 1, true)[1]:match("^%s*(.*)")
-- print("LAST LINE", last_line)
lines[#lines + 1] = indentation .. last_line
table.insert(changes, 1, {
start = range[1] + 1,
final = range[3] + 1,
formatted = lines,
})
-- Some left overs from me attempting to get this to work inside of a null_ls formatter
-- changes[#changes + 1] = {
-- col = 0,
-- row = range[1] + 2,
-- end_col = -1,
-- end_row = range[3] + 1,
-- text = table.concat(lines, '\n'),
-- }
::continue::
end
end
-- return changes
-- print("Change", vim.inspect(changes))
for _, change in ipairs(changes) do
vim.api.nvim_buf_set_lines(bufnr, change.start, change.final, false, change.formatted)
end
end
vim.api.nvim_create_user_command("SqlxFormat", function()
format_dat_sql()
end, {})