Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add extras for filetype workflow #53

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
22 changes: 22 additions & 0 deletions .github/workflows/test.yml
@@ -0,0 +1,22 @@
---
on: [push, pull_request]
name: default

jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
nvim-versions: ['stable', 'nightly']
name: test
steps:
- name: checkout
uses: actions/checkout@v3

- uses: rhysd/action-setup-vim@v1
with:
neovim: true
version: ${{ matrix.nvim-versions }}

- name: run tests
run: ./run test
4 changes: 4 additions & 0 deletions .luarc.json
@@ -0,0 +1,4 @@
{
"$schema": "https://raw.githubusercontent.com/sumneko/vscode-lua/master/setting/schema.json",
"Lua.workspace.checkThirdParty": false
}
24 changes: 24 additions & 0 deletions lua/dial/extras.lua
@@ -0,0 +1,24 @@
local M = {}

-- Private function that takes care of the filetype resolution
function M._resolve_ft()
local ft = vim.o.filetype
if require("dial.config").augends.group[ft] then
return ft
else
return "default"
end
end

M.group_from_ft = [["..require("dial.extras")._resolve_ft().."]]

---@param ... table Tables to be concatenated
function M.concat_lists(...)
local sink = {}
for _, l in ipairs{...} do
vim.list_extend(sink, l)
end
return sink
end

return M
2 changes: 1 addition & 1 deletion lua/dial/handle.lua
Expand Up @@ -215,7 +215,7 @@ end
---@param selected_range {from: integer, to?: integer}
---@param direction direction
---@param tier integer
---@return {result?: string}
---@return {line?: string}
function Handler:operate_visual(line, selected_range, direction, tier)
if self.active_augend == nil then
return {}
Expand Down
59 changes: 31 additions & 28 deletions lua/dial/map.lua
Expand Up @@ -3,63 +3,66 @@ local M = {}
local command = require "dial.command"
local util = require "dial.util"

---Sandwich input string between <Cmd> and <CR>.
---@param body string
local function cmdcr(body)
local cmd_sequences = "<Cmd>"
local cr_sequences = "<CR>"
return cmd_sequences .. body .. cr_sequences
end

---Output command sequence which provides dial operation.
---@param direction direction
---@param mode mode
---@param group_name? string
---@param group_name? string|fun():string
---@return fun():nil
local function _cmd_sequence(direction, mode, group_name)
return function()
local select
if group_name == nil then
select = cmdcr([[lua require"dial.command".select_augend_]] .. mode .. "()")
local name
if type(group_name) == "function" then
name = group_name()
else
select = cmdcr([[lua require"dial.command".select_augend_]] .. mode .. [[("]] .. group_name .. [[")]])
name = group_name
end

local selector = require("dial.command")["select_augend_" .. mode]
selector(name)

vim.go.opfunc = ("dial#operator#%s_%s"):format(direction, mode)
vim.fn[vim.go.opfunc]("unused_type") -- same as g@

if mode == "normal" then
require("dial.command").textobj()
end
-- command.select_augend_normal(vim.v.count, group_name)
local setopfunc = cmdcr([[let &opfunc="dial#operator#]] .. direction .. "_" .. mode .. [["]])
local textobj = util.if_expr(mode == "normal", cmdcr [[lua require("dial.command").textobj()]], "")
return select .. setopfunc .. "g@" .. textobj

end
end

---@param group_name? string
---@return string
---@param group_name? string|fun():string
---@return fun():nil
function M.inc_normal(group_name)
return _cmd_sequence("increment", "normal", group_name)
end

---@param group_name? string
---@return string
---@param group_name? string|fun():string
---@return fun():nil
function M.dec_normal(group_name)
return _cmd_sequence("decrement", "normal", group_name)
end

---@param group_name? string
---@return string
---@param group_name? string|fun():string
---@return fun():nil
function M.inc_visual(group_name)
return _cmd_sequence("increment", "visual", group_name)
end

---@param group_name? string
---@return string
---@param group_name? string|fun():string
---@return fun():nil
function M.dec_visual(group_name)
return _cmd_sequence("decrement", "visual", group_name)
end

---@param group_name? string
---@return string
---@param group_name? string|fun():string
---@return fun():nil
function M.inc_gvisual(group_name)
return _cmd_sequence("increment", "gvisual", group_name)
end

---@param group_name? string
---@return string
---@param group_name? string|fun():string
---@return fun():nil
function M.dec_gvisual(group_name)
return _cmd_sequence("decrement", "gvisual", group_name)
end
Expand Down
12 changes: 6 additions & 6 deletions plugin/dial.vim
Expand Up @@ -4,12 +4,12 @@ let s:save_cpo = &cpo " save user coptions
set cpo&vim " reset them to defaults

lua << EOF
vim.api.nvim_set_keymap("n", "<Plug>(dial-increment)", require("dial.map").inc_normal(), {noremap = true})
vim.api.nvim_set_keymap("n", "<Plug>(dial-decrement)", require("dial.map").dec_normal(), {noremap = true})
vim.api.nvim_set_keymap("v", "<Plug>(dial-increment)", require("dial.map").inc_visual() .. "gv", {noremap = true})
vim.api.nvim_set_keymap("v", "<Plug>(dial-decrement)", require("dial.map").dec_visual() .. "gv", {noremap = true})
vim.api.nvim_set_keymap("v", "g<Plug>(dial-increment)", require("dial.map").inc_gvisual() .. "gv", {noremap = true})
vim.api.nvim_set_keymap("v", "g<Plug>(dial-decrement)", require("dial.map").dec_gvisual() .. "gv", {noremap = true})
-- vim.api.nvim_set_keymap("n", "<Plug>(dial-increment)", require("dial.map").inc_normal(), {noremap = true})
-- vim.api.nvim_set_keymap("n", "<Plug>(dial-decrement)", require("dial.map").dec_normal(), {noremap = true})
-- vim.api.nvim_set_keymap("v", "<Plug>(dial-increment)", require("dial.map").inc_visual() .. "gv", {noremap = true})
-- vim.api.nvim_set_keymap("v", "<Plug>(dial-decrement)", require("dial.map").dec_visual() .. "gv", {noremap = true})
-- vim.api.nvim_set_keymap("v", "g<Plug>(dial-increment)", require("dial.map").inc_gvisual() .. "gv", {noremap = true})
-- vim.api.nvim_set_keymap("v", "g<Plug>(dial-decrement)", require("dial.map").dec_gvisual() .. "gv", {noremap = true})
EOF

command! -range -nargs=? DialIncrement lua require"dial.command".command("increment", {from = <line1>, to = <line2>}, {<f-args>})
Expand Down
24 changes: 24 additions & 0 deletions run
@@ -0,0 +1,24 @@
#!/usr/bin/env bash

TESTS_INIT=tests/minimal_init.lua
TESTS_DIR=tests/


function test {

nvim \
--headless \
--noplugin \
-u ${TESTS_INIT} \
-c "PlenaryBustedDirectory ${TESTS_DIR} { minimal_init = '${TESTS_INIT}' }"
}


function help {
echo "$0 <task> <args>"
echo "Tasks:"
compgen -A function | cat -n
}

TIMEFORMAT="Task completed in %3lR"
time ${@:-default}
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
30 changes: 30 additions & 0 deletions tests/dial/extas_spec.lua
@@ -0,0 +1,30 @@
local et = require("dial.extras")

describe("Test functions in module extras", function()


describe("Test concat_lists", function()
it("concat_lists works with more than 2 lists", function()
assert.are.same(et.concat_lists({ 1 }, { 2 }, { 3, 4 }), { 1, 2, 3, 4 })
end)
end)

describe("Test _resolve_ft", function()
it("If there is no group for the current ft, resolve 'default'", function()
vim.o.filetype = "python"

require("dial.config").augends:register_group {}
assert.are.same(et._resolve_ft(), "default")
end)

it("if there is then return ft", function()

require("dial.config").augends:register_group { python = {} }

require("dial.extras")
vim.o.filetype = "python"
assert.are.same(et._resolve_ft(), "python")

end)
end)
end)
11 changes: 11 additions & 0 deletions tests/minimal_init.lua
@@ -0,0 +1,11 @@
local plenary_dir = os.getenv("PLENARY_DIR") or "/tmp/plenary.nvim"
local is_not_a_directory = vim.fn.isdirectory(plenary_dir) == 0
if is_not_a_directory then
vim.fn.system({"git", "clone", "https://github.com/nvim-lua/plenary.nvim", plenary_dir})
end

vim.opt.rtp:append(".")
vim.opt.rtp:append(plenary_dir)

vim.cmd("runtime plugin/plenary.vim")
require("plenary.busted")