args passed to debugger
This commit is contained in:
parent
c303f4a474
commit
b3600561aa
|
@ -650,7 +650,8 @@ local plugins = {
|
||||||
local label = {}
|
local label = {}
|
||||||
|
|
||||||
for severity, icon in pairs(icons) do
|
for severity, icon in pairs(icons) do
|
||||||
local n = #vim.diagnostic.get(props.buf, { severity = vim.diagnostic.severity[string.upper(severity)] })
|
local n = #vim.diagnostic.get(props.buf,
|
||||||
|
{ severity = vim.diagnostic.severity[string.upper(severity)] })
|
||||||
if n > 0 then
|
if n > 0 then
|
||||||
table.insert(label, { icon .. " " .. n .. " ", group = "DiagnosticSign" .. severity })
|
table.insert(label, { icon .. " " .. n .. " ", group = "DiagnosticSign" .. severity })
|
||||||
end
|
end
|
||||||
|
@ -763,6 +764,9 @@ local plugins = {
|
||||||
program = function()
|
program = function()
|
||||||
return vim.fn.input("Path to executable: ", vim.fn.getcwd() .. "/", "file")
|
return vim.fn.input("Path to executable: ", vim.fn.getcwd() .. "/", "file")
|
||||||
end,
|
end,
|
||||||
|
args = function()
|
||||||
|
require('custom.utils').tokenize_args(vim.fn.input("args: "))
|
||||||
|
end,
|
||||||
cwd = "${workspaceFolder}",
|
cwd = "${workspaceFolder}",
|
||||||
-- FIXME: perhaps we can put the stdio somewhere more practical
|
-- FIXME: perhaps we can put the stdio somewhere more practical
|
||||||
stopOnEntry = false,
|
stopOnEntry = false,
|
||||||
|
|
|
@ -0,0 +1,67 @@
|
||||||
|
local M = {}
|
||||||
|
-- this function will split a string into a table of tokens, like it would
|
||||||
|
-- be passed into the `argv` of a program that was executed from the commandline
|
||||||
|
--
|
||||||
|
-- @param string raw string of cli args that should be split
|
||||||
|
-- @return table tokens args as a table
|
||||||
|
M.tokenize_args = function(raw)
|
||||||
|
-- NOTE: string.gmatch is does not use regex, but a smaller pattern matcher!
|
||||||
|
-- A complete regex parser would be larger than lua itself. See
|
||||||
|
-- [Programming in Lua 20.2](https://www.lua.org/pil/20.2.html).
|
||||||
|
--
|
||||||
|
-- Notable differences:
|
||||||
|
-- '-' is ungreedy wildcard
|
||||||
|
-- '*?' does not work
|
||||||
|
-- '|' is not or
|
||||||
|
--
|
||||||
|
-- This means we're better of implementing the lexer with an algorithm.
|
||||||
|
local t = {}
|
||||||
|
local current = ""
|
||||||
|
local in_str = false
|
||||||
|
local str_seek
|
||||||
|
for c in string.gmatch(raw, ".") do -- iterate through all chars
|
||||||
|
if c == ' ' and not in_str then
|
||||||
|
if string.len(current) > 0 then
|
||||||
|
table.insert(t, current)
|
||||||
|
current = ""
|
||||||
|
end
|
||||||
|
elseif c == '"' and not in_str then
|
||||||
|
in_str = true
|
||||||
|
str_seek = '"'
|
||||||
|
elseif c == "'" and not in_str then
|
||||||
|
in_str = true
|
||||||
|
str_seek = "'"
|
||||||
|
elseif c == str_seek and in_str then
|
||||||
|
in_str = false
|
||||||
|
table.insert(t, current)
|
||||||
|
current = ""
|
||||||
|
else
|
||||||
|
current = current .. c
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if string.len(current) > 0 then
|
||||||
|
table.insert(t, current)
|
||||||
|
end
|
||||||
|
return t
|
||||||
|
end
|
||||||
|
|
||||||
|
--- dumps a variable into a string, so it can be printed. This is meant for
|
||||||
|
--- debug prints
|
||||||
|
--- @param any t any variable
|
||||||
|
--- @return string t_dumped t dumped to string
|
||||||
|
M.dump = function(t)
|
||||||
|
if type(t) == 'table' then
|
||||||
|
local s = '{ '
|
||||||
|
for k, v in pairs(t) do
|
||||||
|
if type(k) ~= 'number' then k = '"' .. k .. '"' end
|
||||||
|
if k ~= 1 then
|
||||||
|
s = s .. ', '
|
||||||
|
end
|
||||||
|
s = s .. '[' .. k .. '] = \'' .. M.dump(v) .. '\''
|
||||||
|
end
|
||||||
|
return s .. ' }'
|
||||||
|
else
|
||||||
|
return tostring(t)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return M
|
Loading…
Reference in New Issue