From ea0f4bf8ffade657b1d45152dbc183d4679e75c4 Mon Sep 17 00:00:00 2001 From: Elvis Claros Castro Date: Fri, 12 Jul 2024 11:18:14 -0300 Subject: Feat: PI --- lua/pi/snips/ft/php.lua | 163 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 lua/pi/snips/ft/php.lua (limited to 'lua/pi/snips/ft/php.lua') diff --git a/lua/pi/snips/ft/php.lua b/lua/pi/snips/ft/php.lua new file mode 100644 index 0000000..72936d8 --- /dev/null +++ b/lua/pi/snips/ft/php.lua @@ -0,0 +1,163 @@ +local ls = require "luasnip" +local composer = require "composer" + +local snippet_from_nodes = ls.sn +local c = ls.choice_node +local t = ls.text_node +local d = ls.dynamic_node +local f = ls.function_node +local i = ls.insert_node +local fmt = require("luasnip.extras.fmt").fmt + +local visibility = function(position, default) + local possibles = { "private", "protected", "public" } + local options = {} + + for _, value in pairs(possibles) do + if value == default then + table.insert(options, 1, t(value)) + else + table.insert(options, t(value)) + end + end + + return c(position, options) +end + +local var_name = function(args) + return snippet_from_nodes(nil, { + i(1, args[1][1]:gsub("^%u", string.lower):gsub("Interface", "") or ""), + }) +end + +local class_name = function() + return vim.fn.expand "%:t:r" +end + +local M = {} + +M.v = fmt( + [[ +/** + * @var {} + */ +{} {} ${}; +]], + { + i(1, "type"), + visibility(2, "private"), + i(3, "Type"), + i(4, "var"), + } +) + +M.class = fmt( + [[ + + */ + private ObjectProphecy ${}; +]], + { + i(1, "Type"), + d(2, var_name, { 1 }), + } +) + +M.iop = fmt( + [[$this->{} = $this->prophesize({}::class);]], + { + i(1, ""), + i(2, ""), + } +) + +M.arg = fmt([[{} ${}]], { + i(1, "Type"), + d(2, var_name, { 1 }), +}) + +M._c = fmt( + [[{} function __construct({}) {{ + {} +}}]], + { + visibility(1, "public"), + i(2), + i(0), + } +) + +M._p = fmt( + [[{} function __construct( + {} +) {{ +}}]], + { + visibility(1, "public"), + i(2), + } +) + +M.strict = t "declare(strict_types=1);" + +M["fn"] = fmt( + [[{} function {}({}): {} +{{ + {} +}}]], + { visibility(1, "public"), i(2), i(3), i(4, "void"), i(0) } +) + +M["then"] = fmt( + [[->then( + function ({}) {{ + {} + }} +)]], + { i(1, ""), i(2, "") } +) + +M.test = fmt( + [[/** + * @test + */ +public function it_{}(): void +{{ + {} +}} +]], + { i(1, ""), i(0, "") } +) + +return M -- cgit v1.2.3