Created commands (#18)

* Created `Runner` command

* Remove unnesessary temp variable

* Created `AutoRunner` command

`AutoRunner` command executes the `Runner` command every time a file is saved.

* Updated formatting

* Fix descriptions

* Created `AutoRunnerStop` command

`AutoRunnerStop` - stops `AutoRunner` and closes its window

* Automatic formatting

* Added command description to readme

* Update table

Added lua command column to "Commands" table.

* Update function description

Specified that `autorun` can accept buffer number as an argument.

* Fix `autorun` function

When saving a file, now function now checks if `_terminal_windows` exists and call the last shell command, otherwise it calls the vim command.

* Moved `user_commands`

`user_commands` now are created when `setup()` is called.

* Fix README

Removed the line stating that the `setup()` function in optional.
This commit is contained in:
Kristofers Solo 2023-09-03 17:35:14 +03:00 committed by GitHub
parent 6248f8b855
commit 237f7b72c1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 83 additions and 31 deletions

View File

@ -3,6 +3,7 @@
A customizable Neovim plugin to run code inside the editor A customizable Neovim plugin to run code inside the editor
## Demo ## Demo
![](./demo/demo.gif) ![](./demo/demo.gif)
## Table of Contents ## Table of Contents
@ -53,11 +54,24 @@ A customizable Neovim plugin to run code inside the editor
## Usage ## Usage
### Commands
| Command | lua | Description |
|-------------------|------------------------------------|------------------------------------------|
| `:Runner` | `require('runner').run()` | Runs code in buffer |
| `:AutoRunner` | `require('runner').autorun()` | Runs code in buffer on every file save |
| `:AutoRunnerStop` | `require('runner').autorun_stop()` | Stops `AutoRunner` and closes the window |
### Lua
```lua ```lua
require('runner').run() require('runner').run()
require('runner').autorun()
require('runner').autorun_stop()
-- Can also be called with the buffer number where the code is: -- Can also be called with the buffer number where the code is:
-- require('runner').run( <buffer_number> ) -- require('runner').run( <buffer_number> )
-- require('runner').autorun( <buffer_number> )
-- To set a mapping -- To set a mapping
vim.keymap.set('n', '<leader><space>', require('runner').run) vim.keymap.set('n', '<leader><space>', require('runner').run)
@ -67,7 +81,7 @@ A customizable Neovim plugin to run code inside the editor
#### `setup(options)` #### `setup(options)`
Using this setup function is **optional**. Runner comes with the following defaults: Runner comes with the following defaults:
```lua ```lua
require('runner').setup({ require('runner').setup({
@ -177,6 +191,7 @@ A customizable Neovim plugin to run code inside the editor
['Custom'] = helpers.shell_handler('cargo ', true), ['Custom'] = helpers.shell_handler('cargo ', true),
})) }))
``` ```
## Advanced handlers configurations ## Advanced handlers configurations
For creating dynamic handlers like one for each `npm` or `cargo` script, you can write your own handler function that generates the other handlers, gives them to the choice handler, and runs it itself. For creating dynamic handlers like one for each `npm` or `cargo` script, you can write your own handler function that generates the other handlers, gives them to the choice handler, and runs it itself.
@ -187,22 +202,26 @@ A customizable Neovim plugin to run code inside the editor
This project uses [StyLua](https://github.com/JohnnyMorganz/StyLua) for enforcing code style, and has a [pre-commit](https://pre-commit.com/) hook setup for running it automatically. `runner.nvim` also has a Github Action that runs the linter on every Pull request. If a check doesn't pass on a specific Pull request, please lint the code and commit it again. This project uses [StyLua](https://github.com/JohnnyMorganz/StyLua) for enforcing code style, and has a [pre-commit](https://pre-commit.com/) hook setup for running it automatically. `runner.nvim` also has a Github Action that runs the linter on every Pull request. If a check doesn't pass on a specific Pull request, please lint the code and commit it again.
For running them locally, you have to have them installed on your system: For running them locally, you have to have them installed on your system:
- [StyLua Installation](https://github.com/JohnnyMorganz/StyLua#installation) - [StyLua Installation](https://github.com/JohnnyMorganz/StyLua#installation)
- [pre-commit Installation](https://pre-commit.com/#install) - [pre-commit Installation](https://pre-commit.com/#install)
#### Some useful commands: #### Some useful commands
- Install the pre-commit hook - Install the pre-commit hook
```bash ```bash
pre-commit install pre-commit install
``` ```
- Check for StyLua errors - Check for StyLua errors
```bash ```bash
stylua --check lua/ stylua --check lua/
``` ```
- Fix StyLua errors - Fix StyLua errors
```bash ```bash
stylua lua/ stylua lua/
``` ```

View File

@ -5,6 +5,7 @@ local config = require('runner.config')
M._terminal_buffer = nil M._terminal_buffer = nil
M._terminal_window = nil M._terminal_window = nil
M._last_command = nil M._last_command = nil
M._last_handler = nil
M.create_buffer = function() M.create_buffer = function()
if M._terminal_buffer then if M._terminal_buffer then

View File

@ -9,6 +9,18 @@ M._handlers = handlers
M.setup = function(options) M.setup = function(options)
config.setup(options) config.setup(options)
vim.api.nvim_create_user_command('Runner', function()
require('runner').run()
end, { desc = 'Run code inside the editor' })
vim.api.nvim_create_user_command('AutoRunner', function()
require('runner').autorun()
end, { desc = 'Execute `Runner` on a file save' })
vim.api.nvim_create_user_command('AutoRunnerStop', function()
require('runner').autorun_stop()
end, { desc = 'Stop `AutoRunner`' })
end end
--- **Overrides** the handler for the specified filetype --- **Overrides** the handler for the specified filetype
@ -28,29 +40,49 @@ M.set_handler = function(filetype, handler)
M._handlers[filetype] = handler M._handlers[filetype] = handler
end end
--- @param bufnr integer?
M.run = function(bufnr) M.run = function(bufnr)
local buffer
if bufnr == nil or bufnr == 0 then if bufnr == nil or bufnr == 0 then
buffer = vim.api.nvim_get_current_buf() bufnr = vim.api.nvim_get_current_buf()
else
buffer = bufnr
end end
if buffer == utils._terminal_buffer then if bufnr == utils._terminal_buffer then
helpers.shell_handler(utils._last_command, false)() helpers.shell_handler(utils._last_command, false)()
return return
end end
local filetype = vim.filetype.match { buf = buffer } local filetype = vim.filetype.match { buf = bufnr }
local handler = M._handlers[filetype] local handler = M._handlers[filetype]
if not handler then if not handler then
print(string.format("No handler defined for filetype '%s'", filetype)) print('No handler defined for filetype ' .. filetype)
return return
end end
handler(buffer) utils._last_handler = handler
handler(bufnr)
end
--- @param bufnr integer?
M.autorun = function(bufnr)
M.run(bufnr)
vim.api.nvim_create_autocmd('BufWritePost', {
group = vim.api.nvim_create_augroup('AutoRunner', { clear = true }),
pattern = '*',
callback = function()
if utils._terminal_window then
helpers.shell_handler(utils._last_command, false)()
else
utils._last_handler(bufnr)
end
end,
})
end
M.autorun_stop = function()
vim.api.nvim_del_augroup_by_name('AutoRunner')
vim.api.nvim_win_close(utils._terminal_window, true)
end end
return M return M