1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
local ls = require("luasnip")
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
function string.starts(String,Start)
return string.sub(String,1,string.len(Start))==Start
end
local newline = function(text)
return t { "", text }
end
local visibility = function(_, _, _, inital)
local possibles = {'private', 'public', 'protected'}
local options = {}
for _, value in pairs(possibles) do
if value == inital then
table.insert(options, 1, t(value))
else
table.insert(options, t(value))
end
end
return snippet_from_nodes(nil, {
c(1, options)
})
end
local promoted_property
promoted_property = function()
return snippet_from_nodes(nil, {
c(1, {
t(""),
snippet_from_nodes(nil, {
newline "\t",
d(1, visibility, {}, "private"),
i(2, '$var'),
t ",",
d(3, promoted_property, {})
}),
}),
})
end
local namespace = function ()
local dir = vim.fn.expand('%:h')
local autoloads = vim.call('composer#query', 'autoload.psr-4')
if autoloads == nil then
return (dir:gsub("^%l", string.upper))
end
local globalNamespace
for key, value in pairs(autoloads) do
if string.starts(dir, value:sub(1, -2)) then
globalNamespace = key:sub(1, -2);
dir = dir:sub(#key + 1)
break
end
end
dir = dir:gsub("/", "\\")
return string.format("%s\\%s",globalNamespace, dir )
end
local class_name = function ()
local filename = vim.fn.expand('%:t:r')
return filename
end
local M = {
v = fmt(
[[
/**
* @var {}
*/
{} ${};
]], {
i(1, "type"),
d(2, visibility, { 1 }, "private"),
i(3, "var")
}),
class = fmt(
[[
<?php
declare(strict_types=1);
namespace [];
class []
{
[]
}
]],
{
f(namespace),
f(class_name),
i(0),
}, { delimiters = "[]"}),
}
return M
|