Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mogulla3/rspec.nvim
RSpec runner for Neovim written in Lua.
https://github.com/mogulla3/rspec.nvim
lua neovim rspec
Last synced: about 11 hours ago
JSON representation
RSpec runner for Neovim written in Lua.
- Host: GitHub
- URL: https://github.com/mogulla3/rspec.nvim
- Owner: mogulla3
- Created: 2022-08-28T01:02:55.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-04-06T12:06:49.000Z (10 months ago)
- Last Synced: 2024-04-17T05:18:25.490Z (10 months ago)
- Topics: lua, neovim, rspec
- Language: Lua
- Homepage:
- Size: 64.5 KB
- Stars: 8
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# rspec.nvim
RSpec runner for Neovim. Written in Lua.
## Demo
When spec passed:
When spec failed:
## Features
- Asynchronous rspec execution. Does not block your editing
- Various rspec execution commands (inspired by test.vim)
- Smart selection of rspec command and execution path
- Automatically add failed examples to the quickfix list
- Quickly view last results with floating window
- Jump from product code file to spec file (or vice versa)## Requirements
- Neovim >= 0.8.0
- RSpec >= 3.9.0## Installation
[packer.nvim](https://github.com/wbthomason/packer.nvim)
```lua
use { "mogulla3/rspec.nvim" }
```[vim-plug](https://github.com/junegunn/vim-plug)
```vim
Plug "mogulla3/rspec.nvim"
```## Usage
### Setup
When using the default settings:
```lua
require('rspec').setup()
```Or if you want to change some settings:
```lua
require('rspec').setup(
-- File format to allow rspec to run
allowed_file_format = function(filename)
return vim.endswith(filename, "_spec.rb")
end,-- RSpec formatter. "progress", "p", "documentation" and "d" can be specified.
-- If none of the above, use "progress".
formatter = "progress",-- Whether or not to focus on a window when `ShowLastSpecResult` command executed.
focus_on_last_spec_result_window = true,-- Whether or not to open the quickfix window when the spec fails.
open_quickfix_when_spec_failed = true,-- File path to save the last spec result.
last_result_path = vim.fn.stdpath("data") .. "/" .. "rspec_last_result",-- File path to save the last failed spec result.
last_failed_result_path = vim.fn.stdpath("data") .. "/" .. "rspec_last_failed_result",-- Command to open the file to jump to.
-- Examples of other alternatives: vsplit, split, tabedit
jump_command = "edit",-- Directories to ignore when jumping with the RSpecJump command
--
-- For example, suppose you want to jump from "src/foo/bar.rb" to "spec/foo/bar_spec.rb".
--
-- However, rspec.nvim would by default try to find "spec/src/foo/bar_spec.rb" and return an error saying it cannot be found.
-- In this case, you would want to treat the "src/" directory as equivalent to the "app/" in Rails or the "lib/" directory in a gem.
--
-- So you can specify the following for the ignored_dirs_on_jump option, which will give you the expected jumps.
-- ```
-- ignored_dirs_on_jump = { "src" }
-- ```
ignored_dirs_on_jump = {},
)
```### Commands
Then, you can use the following commands.
|Command|Description|
|:--|:--|
|`:RSpecCurrentFile`|Run rspec on the current file.|
|`:RSpecNearest`|Run rspec on the example nearest to the cursor position.|
|`:RSpecRerun`|Rerun rspec with the last command.|
|`:RSpecOnlyFailures`|Run rspec on the current file with `--only-failures` option. [^1]|
|`:RSpecShowLastResult`|Show last spec result on floating window.|
|`:RSpecAbort`|Abort running rspec.|
|`:RSpecJump`, `:RSpecJump!`|Jump from product code file to spec file (or vice versa). With `!`, if the file to jump to does not exist, attempt to create and then jump to it.|Below is the recommended key mappings.
```lua
vim.keymap.set("n", "rn", ":RSpecNearest", { noremap = true, silent = true })
vim.keymap.set("n", "rf", ":RSpecCurrentFile", { noremap = true, silent = true })
vim.keymap.set("n", "rr", ":RSpecRerun", { noremap = true, silent = true })
vim.keymap.set("n", "rF", ":RSpecOnlyFailures", { noremap = true, silent = true })
vim.keymap.set("n", "rs", ":RSpecShowLastResult", { noremap = true, silent = true })
```And below is the recommended user command.
```lua
local rspec = require("rspec")-- This is a shortcut command for the RSpecJump and RSpecJump!.
vim.api.nvim_create_user_command('RJ', function(args)
rspec.jump({ force = args.bang })
end, { bang = true })
```## Smart selection of rspec command and execution path
### `rspec` command
rspec.nvim selects rspec commands to run in the following order.
1. `bin/rspec`
1. `bundle exec rspec`
1. `rspec`Search the parent directory from the current directory and determine if `bin/rspec` or `Gemfile` exists.
Assuming the development of Rails applications or the use of [Bundler](https://bundler.io/), the order of priority is considered the most natural.
### execution path
If `bin/rspec` or `bundle exec rspec` is selected, the current directory is automatically moved and then rspec is run.
- `bin/rspec` : Go to a directory in the same hierarchy as the `bin/`.
- `bundle exec rspec` : Go to the directory where `Gemfile` is locatedSo you can run rspec from neovim even if your current directory is somewhere deep.
## Asynchronous rspec execution
rspec.nvim runs `rspec` asynchronously, so it doesn't block your editing.
[^1]: Note that the `example_status_persistence_file_path` setting in `spec_helper.rb` must be enabled beforehand.