Add edit_alternate.vim

https://github.com/tjdevries/edit_alternate.vim

This works for switching between classes and tests in Drupal modules,
which is something I was struggling to do with Projectionist.

Different to Projectionist, though, this plugin doesn't create an
alternate file if it doesn't exist, and doesn't prompt to select from
multiple options and returns the first matching one.
This commit is contained in:
Oliver Davies 2024-08-11 01:52:07 +01:00
parent 3fa266d1dc
commit 9a7863e5e0
3 changed files with 74 additions and 0 deletions

View file

@ -187,6 +187,10 @@ rec {
# Themes
vimPlugins.catppuccin-nvim
vimPlugins.conf-vim
vimPlugins.edit-alternate-vim
vimPlugins.standard-vim
# Configuration.
opdavies-nvim
];

View file

@ -1,5 +1,35 @@
final: prev: {
vimPlugins = prev.vimPlugins // {
conf-vim = final.vimUtils.buildVimPlugin {
name = "conf-vim";
src = final.fetchFromGitHub {
owner = "tjdevries";
repo = "conf.vim";
rev = "master";
sha256 = "AjiTJsoim0BAnyfqk1IQzNsa6jhFM2+A66E7q9sJqz0=";
};
};
edit-alternate-vim = final.vimUtils.buildVimPlugin {
name = "edit-alternate-vim";
src = final.fetchFromGitHub {
owner = "tjdevries";
repo = "edit_alternate.vim";
rev = "master";
sha256 = "mEKnqYAhgrdxPRoKf4S4yYecdFIHGg8bDxpqPuC1+S4=";
};
};
standard-vim = final.vimUtils.buildVimPlugin {
name = "standard-vim";
src = final.fetchFromGitHub {
owner = "tjdevries";
repo = "standard.vim";
rev = "master";
sha256 = "9VwkvV1Dv6cE4uDkPp36DozjWJOclDR883yDMYw000E=";
};
};
tabline-vim = final.vimUtils.buildVimPlugin {
name = "tabline-vim";
src = final.fetchFromGitHub {

40
plugin/edit_alternate.lua Normal file
View file

@ -0,0 +1,40 @@
vim.fn["edit_alternate#rule#add"]("php", function(filename)
if filename:find "Test.php$" then
filename = filename:gsub("Test.php$", ".php")
if filename:find "tests/src/" then
-- Drupal tests. Remove the `src/{type}` from the path.
return filename:gsub("tests/src/(.-)/", "src/")
else
return filename:gsub("tests/", "src/")
end
else
filename = filename:gsub(".php$", "Test.php")
if filename:find "modules/custom" then
-- Drupal test types.
local test_types = { "Functional", "FunctionalJavaScript", "Kernel", "Unit" }
for _, test_type in ipairs(test_types) do
local filename_with_test_type = filename:gsub("src/", string.format("tests/src/%s/", test_type))
-- Return the first matching test file that exists.
if vim.fn.filereadable(filename_with_test_type) == 1 then
return filename_with_test_type
end
end
end
end
end)
if vim.fn.filereadable "fractal.config.js" == 1 then
vim.fn["edit_alternate#rule#add"]("twig", function(filename)
return (filename:gsub("%.twig$", ".config.yml"))
end)
vim.fn["edit_alternate#rule#add"]("yml", function(filename)
return (filename:gsub("%.config.yml$", ".twig"))
end)
end
vim.keymap.set("n", "<leader>ea", "<CMD>EditAlternate<CR>", { silent = true })