diff --git a/lua/runner/handlers/languages/rust/get-tests.sh b/lua/runner/handlers/languages/rust/get-tests.sh new file mode 100755 index 0000000..5b92a7e --- /dev/null +++ b/lua/runner/handlers/languages/rust/get-tests.sh @@ -0,0 +1,2 @@ +cargo test --test 2>&1 | grep " " | awk '{$1=$1};1' + diff --git a/lua/runner/handlers/languages/rust/init.lua b/lua/runner/handlers/languages/rust/init.lua index cf6bfe0..cc0d83f 100644 --- a/lua/runner/handlers/languages/rust/init.lua +++ b/lua/runner/handlers/languages/rust/init.lua @@ -13,15 +13,34 @@ return function(buffer) end end - local handlers = { - ['Test'] = helpers.shell_handler('cargo test'), - ['Custom'] = helpers.shell_handler('cargo ', true), - } + local run_handlers = {} for _, bin in pairs(bins) do - handlers['Run "' .. bin .. '"'] = helpers.shell_handler('cargo run --bin ' .. bin) + run_handlers['Run "' .. bin .. '"'] = helpers.shell_handler('cargo run --bin ' .. bin) end - helpers.choice(handlers)(buffer) + utils.run_command(utils.script_path() .. 'get-tests.sh', function(output) + local bins = {} + + for _, line in pairs(output) do + for _, data in pairs(line) do + if vim.trim(data) ~= '' then + bins[#bins + 1] = data + end + end + end + + local handlers = { + ['Test'] = helpers.shell_handler('cargo test'), + ['Custom'] = helpers.shell_handler('cargo ', true), + unpack(run_handlers), + } + + for _, bin in pairs(bins) do + handlers['Test "' .. bin .. '"'] = helpers.shell_handler('cargo test --test ' .. bin) + end + + helpers.choice(handlers)(buffer) + end) end) end