style: format lua using stylua

This commit is contained in:
arne314
2025-01-09 01:48:18 +01:00
parent 434dc5c6c4
commit e9824803b5
10 changed files with 114 additions and 143 deletions

10
.stylua.toml Normal file
View File

@@ -0,0 +1,10 @@
column_width = 120
line_endings = "Unix"
indent_type = "Spaces"
indent_width = 4
quote_style = "AutoPreferSingle"
call_parentheses = "Always"
collapse_simple_statement = "Always"
[sort_requires]
enabled = true

View File

@@ -4,29 +4,26 @@ local utils = require('typstar.utils')
local cfg = config.config.anki local cfg = config.config.anki
local function run_typstar_anki(args) local function run_typstar_anki(args)
local cwd = vim.fn.getcwd() local cwd = vim.fn.getcwd()
local anki_key = '' local anki_key = ''
if cfg.ankiKey ~= nil then if cfg.ankiKey ~= nil then anki_key = ' --anki-key ' .. cfg.ankiKey end
anki_key = ' --anki-key ' .. cfg.ankiKey
end
local cmd = string.format( local cmd = string.format(
'%s --root-dir %s --typst-cmd %s --anki-url %s %s %s', '%s --root-dir %s --typst-cmd %s --anki-url %s %s %s',
cfg.typstarAnkiCmd, cwd, cfg.typstCmd, cfg.ankiUrl, anki_key, args) cfg.typstarAnkiCmd,
cwd,
cfg.typstCmd,
cfg.ankiUrl,
anki_key,
args
)
utils.run_shell_command(cmd, true) utils.run_shell_command(cmd, true)
end end
function M.scan() function M.scan() run_typstar_anki('') end
run_typstar_anki('')
end
function M.scan_force() function M.scan_force() run_typstar_anki('--force-scan ' .. vim.fn.getcwd()) end
run_typstar_anki('--force-scan ' .. vim.fn.getcwd())
end
function M.scan_force_current() function M.scan_force_current() run_typstar_anki('--force-scan ' .. vim.fn.expand('%:p')) end
run_typstar_anki('--force-scan ' .. vim.fn.expand('%:p'))
end
return M return M

View File

@@ -1,16 +1,14 @@
local M = {} local M = {}
local cfg = require('typstar.config').config.snippets local cfg = require('typstar.config').config.snippets
local utils = require('typstar.utils')
local luasnip = require('luasnip') local luasnip = require('luasnip')
local utils = require('typstar.utils')
local fmta = require('luasnip.extras.fmt').fmta local fmta = require('luasnip.extras.fmt').fmta
local lsengines = require('luasnip.nodes.util.trig_engines') local lsengines = require('luasnip.nodes.util.trig_engines')
local ts = vim.treesitter local ts = vim.treesitter
local last_keystroke_time = nil local last_keystroke_time = nil
vim.api.nvim_create_autocmd('TextChangedI', { vim.api.nvim_create_autocmd('TextChangedI', {
callback = function() callback = function() last_keystroke_time = vim.loop.now() end,
last_keystroke_time = vim.loop.now()
end,
}) })
local lexical_result_cache = {} local lexical_result_cache = {}
local ts_markup_query = ts.query.parse('typst', '(text) @markup') local ts_markup_query = ts.query.parse('typst', '(text) @markup')
@@ -33,16 +31,13 @@ end
function M.visual(idx, default) function M.visual(idx, default)
default = default or '' default = default or ''
return luasnip.dynamic_node( return luasnip.dynamic_node(idx, function(args, parent)
idx, if #parent.snippet.env.LS_SELECT_RAW > 0 then
function(args, parent)
if (#parent.snippet.env.LS_SELECT_RAW > 0) then
return luasnip.snippet_node(nil, luasnip.text_node(parent.snippet.env.LS_SELECT_RAW)) return luasnip.snippet_node(nil, luasnip.text_node(parent.snippet.env.LS_SELECT_RAW))
else -- If LS_SELECT_RAW is empty, return an insert node else -- If LS_SELECT_RAW is empty, return an insert node
return luasnip.snippet_node(nil, luasnip.insert_node(1, default)) return luasnip.snippet_node(nil, luasnip.insert_node(1, default))
end end
end end)
)
end end
function M.ri(insert_node_id) function M.ri(insert_node_id)
@@ -58,11 +53,11 @@ function M.snip(trigger, expand, insert, condition, priority, wordTrig)
trigEngineOpts = { condition = condition }, trigEngineOpts = { condition = condition },
wordTrig = wordTrig, wordTrig = wordTrig,
priority = priority, priority = priority,
snippetType = 'autosnippet' snippetType = 'autosnippet',
}, },
fmta(expand, { unpack(insert) }), fmta(expand, { unpack(insert) }),
{ {
condition = function() return M.snippets_toggle end condition = function() return M.snippets_toggle end,
} }
) )
end end
@@ -75,17 +70,13 @@ function M.engine(trigger, opts)
local base_engine = lsengines.ecma(trigger, opts) local base_engine = lsengines.ecma(trigger, opts)
local condition = function() local condition = function()
local cached = lexical_result_cache[opts.condition] local cached = lexical_result_cache[opts.condition]
if cached ~= nil and cached[1] == last_keystroke_time then if cached ~= nil and cached[1] == last_keystroke_time then return cached[2] end
return cached[2]
end
local result = opts.condition() local result = opts.condition()
lexical_result_cache[opts.condition] = { last_keystroke_time, result } lexical_result_cache[opts.condition] = { last_keystroke_time, result }
return result return result
end end
return function(line, trig) return function(line, trig)
if not M.snippets_toggle or not condition() then if not M.snippets_toggle or not condition() then return nil end
return nil
end
return base_engine(line, trig) return base_engine(line, trig)
end end
end end
@@ -99,15 +90,12 @@ function M.setup()
if cfg.enable then if cfg.enable then
local autosnippets = {} local autosnippets = {}
for _, file in ipairs(cfg.modules) do for _, file in ipairs(cfg.modules) do
vim.list_extend( vim.list_extend(autosnippets, require(('typstar.snippets.%s'):format(file)))
autosnippets,
require(('typstar.snippets.%s'):format(file))
)
end end
luasnip.add_snippets('typst', autosnippets) luasnip.add_snippets('typst', autosnippets)
local jsregexp_ok, _ = pcall(require, "luasnip-jsregexp") local jsregexp_ok, _ = pcall(require, 'luasnip-jsregexp')
if not jsregexp_ok then if not jsregexp_ok then
jsregexp_ok, _ = pcall(require, "jsregexp") jsregexp_ok, _ = pcall(require, 'jsregexp')
end end
if not jsregexp_ok then if not jsregexp_ok then
vim.notify("WARNING: Most snippets won't work as jsregexp is not installed", vim.log.levels.WARN) vim.notify("WARNING: Most snippets won't work as jsregexp is not installed", vim.log.levels.WARN)

View File

@@ -24,14 +24,14 @@ local default_config = {
'matrix', 'matrix',
'markup', 'markup',
'visual', 'visual',
} },
}, },
} }
function M.merge_config(args) function M.merge_config(args)
M.config = vim.tbl_deep_extend('force', default_config, args or {}) M.config = vim.tbl_deep_extend('force', default_config, args or {})
M.config.excalidraw.templatePath = M.config.excalidraw.templatePath or M.config.excalidraw.templatePath = M.config.excalidraw.templatePath
{ or {
['%.excalidraw%.md$'] = M.config.typstarRoot .. '/res/excalidraw_template.excalidraw.md', ['%.excalidraw%.md$'] = M.config.typstarRoot .. '/res/excalidraw_template.excalidraw.md',
} }
end end

View File

@@ -12,7 +12,8 @@ local affix = [[
local function launch_obsidian(path) local function launch_obsidian(path)
print(string.format('Opening %s in Excalidraw', path)) print(string.format('Opening %s in Excalidraw', path))
utils.run_shell_command( utils.run_shell_command(
string.format('%s "obsidian://open?path=%s"', cfg.uriOpenCommand, utils.urlencode(path)), false string.format('%s "obsidian://open?path=%s"', cfg.uriOpenCommand, utils.urlencode(path)),
false
) )
end end
@@ -22,9 +23,7 @@ function M.insert_drawing()
local path = assets_dir .. '/' .. filename .. cfg.fileExtension local path = assets_dir .. '/' .. filename .. cfg.fileExtension
local path_inserted = cfg.assetsDir .. '/' .. filename .. cfg.fileExtensionInserted local path_inserted = cfg.assetsDir .. '/' .. filename .. cfg.fileExtensionInserted
if vim.fn.isdirectory(assets_dir) == 0 then if vim.fn.isdirectory(assets_dir) == 0 then vim.fn.mkdir(assets_dir, 'p') end
vim.fn.mkdir(assets_dir, 'p')
end
local found_match = false local found_match = false
for pattern, template_path in pairs(cfg.templatePath) do for pattern, template_path in pairs(cfg.templatePath) do
if string.match(path, pattern) then if string.match(path, pattern) then
@@ -44,9 +43,10 @@ end
function M.open_drawing() function M.open_drawing()
local line = vim.api.nvim_get_current_line() local line = vim.api.nvim_get_current_line()
local path = vim.fn.expand('%:p:h') .. local path = vim.fn.expand('%:p:h')
'/' .. string.match(line, '"(.*)' .. string.gsub(cfg.fileExtensionInserted, '%.', '%%%.')) .. .. '/'
'.excalidraw.md' .. string.match(line, '"(.*)' .. string.gsub(cfg.fileExtensionInserted, '%.', '%%%.'))
.. '.excalidraw.md'
launch_obsidian(path) launch_obsidian(path)
end end

View File

@@ -8,7 +8,6 @@ local cap = helper.cap
local math = helper.in_math local math = helper.in_math
local markup = helper.in_markup local markup = helper.in_markup
local letter_snippets = {} local letter_snippets = {}
local greek_letters_map = { local greek_letters_map = {
['a'] = 'alpha', ['a'] = 'alpha',
@@ -42,9 +41,7 @@ local trigger_greek = ''
local trigger_index_pre = '' local trigger_index_pre = ''
local trigger_index_post = '' local trigger_index_post = ''
local upper_first = function(str) local upper_first = function(str) return str:sub(1, 1):upper() .. str:sub(2, -1) end
return str:sub(1, 1):upper() .. str:sub(2, -1)
end
local greek_full = {} local greek_full = {}
for latin, greek in pairs(greek_letters_map) do for latin, greek in pairs(greek_letters_map) do
@@ -65,28 +62,33 @@ trigger_greek = table.concat(greek_keys, '|')
trigger_index_pre = '[A-Za-z]' .. '|' .. table.concat(greek_letters, '|') trigger_index_pre = '[A-Za-z]' .. '|' .. table.concat(greek_letters, '|')
trigger_index_post = table.concat(common_indices, '|') trigger_index_post = table.concat(common_indices, '|')
local get_greek = function(_, snippet) local get_greek = function(_, snippet) return s(nil, t(greek_letters_map[snippet.captures[1]])) end
return s(nil, t(greek_letters_map[snippet.captures[1]]))
end
local get_index = function(_, snippet) local get_index = function(_, snippet)
local letter, index = snippet.captures[1], snippet.captures[2] local letter, index = snippet.captures[1], snippet.captures[2]
local trigger = letter .. index local trigger = letter .. index
if index_conflicts_set[trigger] then if index_conflicts_set[trigger] then return s(nil, t(trigger)) end
return s(nil, t(trigger))
end
return s(nil, t(letter .. '_' .. index)) return s(nil, t(letter .. '_' .. index))
end end
table.insert(letter_snippets, snip(':([A-Za-z0-9])', '$<>$ ', { cap(1) }, markup)) table.insert(letter_snippets, snip(':([A-Za-z0-9])', '$<>$ ', { cap(1) }, markup))
table.insert(letter_snippets, snip(';(' .. trigger_greek .. ')', '$<>$ ', { d(1, get_greek) }, markup)) table.insert(letter_snippets, snip(';(' .. trigger_greek .. ')', '$<>$ ', { d(1, get_greek) }, markup))
table.insert(letter_snippets, snip(';(' .. trigger_greek .. ')', '<>', { d(1, get_greek) }, math)) table.insert(letter_snippets, snip(';(' .. trigger_greek .. ')', '<>', { d(1, get_greek) }, math))
table.insert(letter_snippets, table.insert(
snip('\\$(' .. trigger_index_pre .. ')\\$' .. '(' .. trigger_index_post .. ') ', letter_snippets,
'$<>$ ', { d(1, get_index) }, markup, 500)) snip(
table.insert(letter_snippets, '\\$(' .. trigger_index_pre .. ')\\$' .. '(' .. trigger_index_post .. ') ',
snip('(' .. trigger_index_pre .. ')' .. '(' .. trigger_index_post .. ') ', '<> ', { d(1, get_index) }, math, 200)) '$<>$ ',
{ d(1, get_index) },
markup,
500
)
)
table.insert(
letter_snippets,
snip('(' .. trigger_index_pre .. ')' .. '(' .. trigger_index_post .. ') ', '<> ', { d(1, get_index) }, math, 200)
)
return { return {
unpack(letter_snippets) unpack(letter_snippets),
} }

View File

@@ -8,7 +8,6 @@ local visual = helper.visual
local snip = helper.snip local snip = helper.snip
local start = helper.start_snip local start = helper.start_snip
local ctheorems = { local ctheorems = {
{ 'tem', 'theorem' }, { 'tem', 'theorem' },
{ 'pro', 'proof' }, { 'pro', 'proof' },
@@ -44,8 +43,8 @@ end
return { return {
start('dm', '$\n<>\t<>\n<>$', { cap(1), visual(1), cap(1) }, markup), start('dm', '$\n<>\t<>\n<>$', { cap(1), visual(1), cap(1) }, markup),
start('fla', '#flashcard(0)[<>][\n<>\t<>\n<>]', { i(1, "flashcard"), cap(1), visual(2), cap(1) }, markup), start('fla', '#flashcard(0)[<>][\n<>\t<>\n<>]', { i(1, 'flashcard'), cap(1), visual(2), cap(1) }, markup),
start('flA', '#flashcard(0, "<>")[\n<>\t<>\n<>]', { i(1, "flashcard"), cap(1), visual(2), cap(1) }, markup), start('flA', '#flashcard(0, "<>")[\n<>\t<>\n<>]', { i(1, 'flashcard'), cap(1), visual(2), cap(1) }, markup),
snip('IMP', '$=>>$ ', {}, markup), snip('IMP', '$=>>$ ', {}, markup),
snip('IFF', '$<<=>>$ ', {}, markup), snip('IFF', '$<<=>>$ ', {}, markup),
unpack(document_snippets), unpack(document_snippets),

View File

@@ -61,9 +61,7 @@ local lmat = function(_, sp)
ins_indx = ins_indx + 1 ins_indx = ins_indx + 1
for k = 2, cols do for k = 2, cols do
table.insert(nodes, t(', ')) table.insert(nodes, t(', '))
if k == cols then if k == cols then table.insert(nodes, t('dots, ')) end
table.insert(nodes, t('dots, '))
end
if j == k then if j == k then
table.insert(nodes, r(ins_indx, tostring(j) .. 'x' .. tostring(k), i(1, '1'))) table.insert(nodes, r(ins_indx, tostring(j) .. 'x' .. tostring(k), i(1, '1')))
else else

View File

@@ -5,8 +5,8 @@ local i = ls.insert_node
local s = ls.snippet_node local s = ls.snippet_node
local t = ls.text_node local t = ls.text_node
local utils = require('typstar.utils')
local helper = require('typstar.autosnippets') local helper = require('typstar.autosnippets')
local utils = require('typstar.utils')
local math = helper.in_math local math = helper.in_math
local snip = helper.snip local snip = helper.snip
@@ -46,16 +46,11 @@ local process_ts_query = function(bufnr, cursor, query, root, insert1, insert2,
if end_row == cursor[1] and end_col == cursor[2] then if end_row == cursor[1] and end_col == cursor[2] then
vim.schedule(function() -- to not interfere with luasnip vim.schedule(function() -- to not interfere with luasnip
local cursor_offset = 0 local cursor_offset = 0
local old_len1, new_len1 = utils.insert_text( local old_len1, new_len1 = utils.insert_text(bufnr, start_row, start_col, insert1, 0, cut_offset)
bufnr, start_row, start_col, insert1, 0, cut_offset) if start_row == cursor[1] then cursor_offset = cursor_offset + (new_len1 - old_len1) end
if start_row == cursor[1] then local old_len2, new_len2 =
cursor_offset = cursor_offset + (new_len1 - old_len1) utils.insert_text(bufnr, end_row, cursor[2] + cursor_offset, insert2, cut_offset, 0)
end if end_row == cursor[1] then cursor_offset = cursor_offset + (new_len2 - old_len2) end
local old_len2, new_len2 = utils.insert_text(
bufnr, end_row, cursor[2] + cursor_offset, insert2, cut_offset, 0)
if end_row == cursor[1] then
cursor_offset = cursor_offset + (new_len2 - old_len2)
end
vim.api.nvim_win_set_cursor(0, { cursor[1] + 1, cursor[2] + cursor_offset }) vim.api.nvim_win_set_cursor(0, { cursor[1] + 1, cursor[2] + cursor_offset })
end) end)
return true return true
@@ -76,9 +71,7 @@ local smart_wrap = function(args, parent, old_state, expand)
local expand1 = expand[5] and expand[2] .. '(' or expand[2] local expand1 = expand[5] and expand[2] .. '(' or expand[2]
local expand2 = expand[5] and expand[3] .. ')' or expand[3] local expand2 = expand[5] and expand[3] .. ')' or expand[3]
if process_ts_query(bufnr, cursor, ts_wrap_query, root, expand1, expand2) then if process_ts_query(bufnr, cursor, ts_wrap_query, root, expand1, expand2) then return s(nil, t()) end
return s(nil, t())
end
if #parent.env.LS_SELECT_RAW > 0 then if #parent.env.LS_SELECT_RAW > 0 then
return s(nil, t(expand1 .. table.concat(parent.env.LS_SELECT_RAW) .. expand2)) return s(nil, t(expand1 .. table.concat(parent.env.LS_SELECT_RAW) .. expand2))
end end
@@ -90,5 +83,5 @@ for _, val in pairs(operations) do
end end
return { return {
unpack(snippets) unpack(snippets),
} }

View File

@@ -20,7 +20,7 @@ end
function M.insert_text_block(snip) function M.insert_text_block(snip)
local line_num = M.get_cursor_pos()[1] + 1 local line_num = M.get_cursor_pos()[1] + 1
local lines = {} local lines = {}
for line in snip:gmatch '[^\r\n]+' do for line in snip:gmatch('[^\r\n]+') do
table.insert(lines, line) table.insert(lines, line)
end end
vim.api.nvim_buf_set_lines(vim.api.nvim_get_current_buf(), line_num, line_num, false, lines) vim.api.nvim_buf_set_lines(vim.api.nvim_get_current_buf(), line_num, line_num, false, lines)
@@ -35,41 +35,28 @@ function M.run_shell_command(cmd, show_output)
end end
end end
if show_output then if show_output then
vim.fn.jobstart( vim.fn.jobstart(cmd, {
cmd, on_stdout = function(_, data, _) handle_output(data, false) end,
{ on_stderr = function(_, data, _) handle_output(data, true) end,
on_stdout = function(_, data, _)
handle_output(data, false)
end,
on_stderr = function(_, data, _)
handle_output(data, true)
end,
stdout_buffered = false, stdout_buffered = false,
stderr_buffered = true, stderr_buffered = true,
} })
)
else else
vim.fn.jobstart(cmd) vim.fn.jobstart(cmd)
end end
end end
function M.char_to_hex(c) function M.char_to_hex(c) return string.format('%%%02X', string.byte(c)) end
return string.format("%%%02X", string.byte(c))
end
function M.urlencode(url) function M.urlencode(url)
if url == nil then if url == nil then return '' end
return ''
end
url = string.gsub(url, '\n', '\r\n') url = string.gsub(url, '\n', '\r\n')
url = string.gsub(url, '([^%w _%%%-%.~])', M.char_to_hex) url = string.gsub(url, '([^%w _%%%-%.~])', M.char_to_hex)
url = string.gsub(url, ' ', '%%20') url = string.gsub(url, ' ', '%%20')
return url return url
end end
function M.get_treesitter_root(bufnr) function M.get_treesitter_root(bufnr) return ts.get_parser(bufnr):parse()[1]:root() end
return ts.get_parser(bufnr):parse()[1]:root()
end
function M.treesitter_match_start_end(match) function M.treesitter_match_start_end(match)
local start_row, start_col, _, _ = match[1]:range() local start_row, start_col, _, _ = match[1]:range()
@@ -83,11 +70,8 @@ function M.cursor_within_treesitter_query(query, match_tolerance, cursor)
for _, match, _ in query:iter_matches(M.get_treesitter_root(bufnr), bufnr, cursor[1], cursor[1] + 1) do for _, match, _ in query:iter_matches(M.get_treesitter_root(bufnr), bufnr, cursor[1], cursor[1] + 1) do
if match then if match then
local start_row, start_col, end_row, end_col = M.treesitter_match_start_end(match) local start_row, start_col, end_row, end_col = M.treesitter_match_start_end(match)
local matched = M.cursor_within_coords(cursor, start_row, end_row, start_col, end_col, local matched = M.cursor_within_coords(cursor, start_row, end_row, start_col, end_col, match_tolerance)
match_tolerance) if matched then return true end
if matched then
return true
end
end end
end end
return false return false