Compare commits

..

3 commits

Author SHA1 Message Date
50937a342f WIP: try and run with npx
Summary:

Test Plan:
2024-09-03 17:49:34 +01:00
4449fd5b45 chore: add arclint config with a load of linters
Summary:

Adds all the lint configs for arc to run before submitting changes. This is
only used on the personal Phorge instance atm, it can be run with the `arc
lint` command

Test Plan:

Creating a change will probably do it.
2024-07-24 22:23:47 +01:00
ea6727db40 chore: make public api consistent
Some checks failed
CI / Luacheck (pull_request) Successful in 1m2s
Conventional Tools Commitlint / Commitlint (pull_request) Successful in 35s
CI / Cargo Format (pull_request) Successful in 18s
CI / StyLua (pull_request) Failing after 4s
CI / Build and test (pull_request) Successful in 2m2s
Summary:

Right now we have two ways to access the public api we have `require('ivy')`
and `vim.ivy. Each way has a different api that will cause some confusion.

Now both apis are the same so anyone that wants to integrate with ivy can do so
without having to figure out what one they need to use.

Test Plan:

The unit tests cover most of the work, I have also been using this locally for
quite some time now with now issues.
2024-07-24 22:19:35 +01:00
5 changed files with 84 additions and 55 deletions

46
.arclint Normal file
View file

@ -0,0 +1,46 @@
{
"linters": {
"stylua": {
"type": "script-and-regex",
"script-and-regex.script": "sh -c 'stylua --check \"$0\" || true'",
"script-and-regex.regex": "/(?P<line>\\d+).*\\|\\-/m",
"include": "(\\.lua$)"
},
"luacheck": {
"type": "script-and-regex",
"script-and-regex.script": "sh -c 'luacheck \"$0\" || true'",
"script-and-regex.regex": "/^.*?:(?P<line>\\d+):(?P<char>\\d+):\\s+\\((?P<code>\\w+)\\) (?P<message>.*?)$/m",
"include": "(\\.lua$)"
},
"cargo": {
"type": "script-and-regex",
"script-and-regex.script": "sh -c 'cargo fmt --check --'",
"script-and-regex.regex": "/(?P<message>.*?)/",
"include": "(\\.rs$)"
},
"clippy": {
"type": "script-and-regex",
"script-and-regex.script": "sh -c 'cargo clippy --'",
"script-and-regex.regex": "/(?P<message>.*?)/",
"include": "(\\.rs$)"
},
"prettier": {
"type": "script-and-regex",
"script-and-regex.script": "prettier --check",
"script-and-regex.regex": "/(?P<message>.*?)/",
"include": "(\\.yml$|\\.json[c5]?$|\\.[tj]sx?$)"
},
"merge-conflict": {
"type": "merge-conflict"
},
"text": {
"type": "text"
},
"chmod": {
"type": "chmod"
},
"generated": {
"type": "generated"
}
}
}

View file

@ -21,7 +21,6 @@ git clone https://github.com/AdeAttwood/ivy.nvim ~/.config/nvim/pack/bundle/star
### Plugin managers
Using [lazy.nvim](https://github.com/folke/lazy.nvim)
```lua
{
"AdeAttwood/ivy.nvim",
@ -29,31 +28,6 @@ Using [lazy.nvim](https://github.com/folke/lazy.nvim)
},
```
Using [mini.deps](https://github.com/echasnovski/mini.deps)
```lua
local deps = require "mini.deps"
deps.later(function() -- Or `deps.now` if you want this to be loaded immediately
local build = function(args)
local obj = vim
.system(
{ "cargo", "build", "--release", string.format("%s%s%s", "--manifest-path=", args.path, "/Cargo.toml") },
{ text = true }
)
:wait()
vim.print(vim.inspect(obj))
end
deps.add {
source = "AdeAttwood/ivy.nvim",
hooks = {
post_install = build,
post_checkout = build,
},
}
end)
```
TODO: Add more plugin managers
### Setup / Configuration
@ -62,19 +36,19 @@ Ivy can be configured with minimal config that will give you all the defaults
provided by Ivy.
```lua
require("ivy").setup()
require('ivy').setup()
```
With Ivy you can configure your own backends.
```lua
require("ivy").setup {
require('ivy').setup {
backends = {
-- A backend module that will be registered
"ivy.backends.buffers",
-- Using a table so you can configure a custom keymap overriding the
-- default one.
{ "ivy.backends.files", { keymap = "<C-p>" } },
{ "ivy.backends.files", { keymap = "<C-p>" } }
},
}
```
@ -85,7 +59,7 @@ function, this can be used to load backends before or after the setup function
is called.
```lua
require("ivy").register_backend "ivy.backends.files"
require('ivy').register_backend("ivy.backends.files")
```
### Compiling
@ -143,30 +117,26 @@ customized when you register it.
Action can be run on selected candidates provide functionality
| Action | Key Map | Description |
| ------------------- | --------- | ---------------------------------------------------------------- |
| Complete | \<CR\> | Run the completion function, usually this will be opening a file |
| Vertical Split | \<C-v\> | Run the completion function in a new vertical split |
| Split | \<C-s\> | Run the completion function in a new split |
| Destroy | \<C-c\> | Close the results window |
| Clear | \<C-u\> | Clear the results window |
| Delete word | \<C-w\> | Delete the word under the cursor |
| Next | \<C-n\> | Move to the next candidate |
| Previous | \<C-p\> | Move to the previous candidate |
| Next Checkpoint | \<C-M-n\> | Move to the next candidate and keep Ivy open and focussed |
| Previous Checkpoint | \<C-M-n\> | Move to the previous candidate and keep Ivy open and focussed |
| -------------- | ----------- | ------------------------------------------------------------------------------ |
| Complete | \<CR\> |Run the completion function, usually this will be opening a file |
| Vertical Split | \<C-v\> |Run the completion function in a new vertical split |
| Split | \<C-s\> |Run the completion function in a new split |
| Destroy | \<C-c\> |Close the results window |
| Clear | \<C-u\> |Clear the results window |
| Delete word | \<C-w\> |Delete the word under the cursor |
| Next | \<C-n\> |Move to the next candidate |
| Previous | \<C-p\> |Move to the previous candidate |
| Next Checkpoint| \<C-M-n\> |Move to the next candidate and keep Ivy open and focussed |
| Previous Checkpoint| \<C-M-n\>|Move to the previous candidate and keep Ivy open and focussed |
Add your own keymaps for an action by adding a `ftplugin/ivy.lua` file in your config.
Just add a simple keymap like this:
```lua
vim.api.nvim_set_keymap(
"n",
"<esc>",
"<cmd>lua vim.ivy.destroy()<CR>",
{ noremap = true, silent = true, nowait = true }
)
vim.api.nvim_set_keymap( "n", "<esc>", "<cmd>lua vim.ivy.destroy()<CR>", { noremap = true, silent = true, nowait = true })
```
## API
### ivy.run
@ -220,9 +190,7 @@ vertical split action it will open the buffer in a new `vsplit`
end,
-- Action callback that will be called on the completion or checkpoint actions.
-- The currently selected item is passed in as the result.
function(result)
vim.cmd("edit " .. result)
end
function(result) vim.cmd("edit " .. result) end
)
```

View file

@ -1,9 +1,7 @@
local window = require "ivy.window"
local prompt = require "ivy.prompt"
local utils = require "ivy.utils"
local controller = {}
controller.action = utils.actions
controller.items = nil
controller.callback = nil

View file

@ -1,11 +1,28 @@
local controller = require "ivy.controller"
local libivy = require "ivy.libivy"
local config = require "ivy.config"
local utils = require "ivy.utils"
local register_backend = require "ivy.register_backend"
local ivy = {}
ivy.action = utils.actions
ivy.utils = utils
ivy.match = libivy.ivy_match
ivy.run = controller.run
ivy.register_backend = register_backend
ivy.checkpoint = controller.checkpoint
ivy.paste = controller.paste
ivy.complete = controller.complete
ivy.destroy = controller.destroy
ivy.input = controller.input
ivy.next = controller.next
ivy.previous = controller.previous
ivy.search = controller.search
-- Private variable to check if ivy has been setup, this is to prevent multiple
-- setups of ivy. This is only exposed for testing purposes.
---@private

View file

@ -1,9 +1,9 @@
local controller = require "ivy.controller"
local api = require "ivy"
-- Put the controller in to the vim global so we can access it in mappings
-- better without requires. You can call controller commands like `vim.ivy.xxx`.
-- luacheck: ignore
vim.ivy = controller
vim.ivy = api
vim.paste = (function(overridden)
return function(lines, phase)