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
111
112
113
114
115
116
117
118
119
120
121
122
|
local ls = require"luasnip"
local s = ls.snippet
local sn = ls.snippet_node
local t = ls.text_node
local i = ls.insert_node
local c = ls.choice_node
local d = ls.dynamic_node
-- visibility allows to reuse it pasing the first option to show for the
-- snippet
local visibility
visibility = function (_, _, _, initial_text)
local possibles = {'private', 'public', 'protected'}
local options = {}
for _, value in pairs(possibles) do
if value == initial_text then
table.insert(options, 1, t(value .. ' ') )
else
table.insert(options, t(value .. ' '))
end
end
return sn(nil, { c(1, options) })
end
local promo_property
promo_property = function()
return sn(
nil,
c(1, {
-- Order is important, sn(...) first would cause infinite loop of expansion.
t(""),
sn(nil, {
t({ "", "\t" }),
d(1, visibility, {}, "private"),
i(2, '$var'),
t(","),
d(3, promo_property, {})
}),
})
)
end
ls.snippets = {
php = {
-- variable
s("v", {
t({ "/**", " * @var " }),
i(1, "types"),
t({""," */", "private $"}),
i(2, "name"),
t(";", ""),
}),
-- __construct
s("_c", {
d(1, visibility, {}),
t('function __construct('),
c(2, {
sn(nil, {
i(1, '$var'),
t({")", "{", "\t"}),
i(2, ''),
t({"", "}"}),
}),
sn(nil, {
d(1, promo_property, {}),
t({"",") {", "}"}),
}),
}),
}),
-- function
s("fn", {
d(1, visibility, {}, "public"),
t("function "),
i(2, "name"),
t("("),
i(3, "$arg"),
t(")"),
c(4, {
sn(nil, {
t(': '),
i(1, "void"),
}),
t(""),
}),
t({"", "{", ""}),
t("\t"), i(0, ""),
t({"", "}"})
}),
-- Route
s("ro", {
t("Route::"),
c(1, {
t("get"),
t("post"),
t("put"),
t("view"),
}),
t("('"),
i(2, "uri"),
t("', "),
c(3, {
sn(nil, {
t({'function () {', '\t'}),
i(1, ''),
t({'', '});'}),
}),
sn(nil, {
t('['),
i(1, 'Controller'),
t("::class, '"),
i(2, 'method'),
t("']);"),
})
}),
}),
}
}
|