feat(nvim): add drupalclass snippet
Add a new `drupalclass` snippet for Luasnip that scaffolds a new PHP class that's opinionated for Drupal applications. The class name is based on the filename (minus the file extension) and the namespace is generated automatically from the directory structure based on the location of the `src` directory. It also includes the `Tests` entry within the namespace if the file is witin a `tests` directory.
This commit is contained in:
parent
f2ac465543
commit
b94e7267ce
|
@ -2,10 +2,63 @@ local fmta = require("luasnip.extras.fmt").fmta
|
|||
local ls = require "luasnip"
|
||||
|
||||
local c = ls.choice_node
|
||||
local f = ls.function_node
|
||||
local i = ls.insert_node
|
||||
local t = ls.text_node
|
||||
|
||||
local M = {
|
||||
|
||||
drupalclass = fmta([[
|
||||
<<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace <>;
|
||||
|
||||
final class <> {
|
||||
|
||||
<>
|
||||
|
||||
}]],
|
||||
{
|
||||
f(function()
|
||||
local filepath = vim.fn.expand('%:h')
|
||||
local filepath_parts = vim.fn.split(filepath, "/")
|
||||
|
||||
if not vim.tbl_contains(filepath_parts, "src") then
|
||||
return ""
|
||||
end
|
||||
|
||||
local namespace_parts = { "Drupal" }
|
||||
|
||||
local is_test_file = vim.tbl_contains(filepath_parts, "tests")
|
||||
if is_test_file then
|
||||
table.insert(namespace_parts, "Tests")
|
||||
end
|
||||
|
||||
-- Find and add the module name.
|
||||
for k, v in ipairs(filepath_parts) do
|
||||
if v == "src" then
|
||||
if is_test_file then
|
||||
table.insert(namespace_parts, filepath_parts[k - 2])
|
||||
else
|
||||
table.insert(namespace_parts, filepath_parts[k - 1])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Add the rest of the namespace.
|
||||
local namespace = vim.split(filepath, "src/")
|
||||
local final_part = (namespace[2] or ""):gsub("/", "\\")
|
||||
table.insert(namespace_parts, final_part)
|
||||
|
||||
return table.concat(namespace_parts, "\\")
|
||||
end),
|
||||
f(function() return vim.fn.expand("%:t:r"); end),
|
||||
i(0),
|
||||
}
|
||||
),
|
||||
|
||||
func = fmta("function <>(<>)<> {\n <>\n}<>", { i(1), i(2), i(3), i(4), i(0) }),
|
||||
|
||||
met = fmta(
|
||||
|
|
Loading…
Reference in a new issue