@enjoys/context-engine 1.4.1 → 1.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (424) hide show
  1. package/data/codeLens/awk.json +1 -1
  2. package/data/codeLens/azcli.json +10 -10
  3. package/data/codeLens/c.json +1 -1
  4. package/data/codeLens/caddy.json +1 -1
  5. package/data/codeLens/crontab.json +1 -1
  6. package/data/codeLens/doctest.json +10 -10
  7. package/data/codeLens/hcl.json +1 -1
  8. package/data/codeLens/html.json +1 -1
  9. package/data/codeLens/lua.json +1 -1
  10. package/data/codeLens/nginx.json +1 -1
  11. package/data/codeLens/pla.json +10 -10
  12. package/data/codeLens/xml.json +1 -1
  13. package/data/commands/angular.json +670 -312
  14. package/data/commands/c.json +30 -30
  15. package/data/commands/cpp.json +30 -30
  16. package/data/commands/crontab.json +25 -30
  17. package/data/commands/cypher.json +26 -30
  18. package/data/commands/dockerfile.json +26 -2
  19. package/data/commands/doctest.json +23 -24
  20. package/data/commands/dotenv.json +24 -11
  21. package/data/commands/ecl.json +26 -30
  22. package/data/commands/flow9.json +24 -24
  23. package/data/commands/freemarker2.json +24 -18
  24. package/data/commands/graphql.json +25 -11
  25. package/data/commands/html.json +25 -11
  26. package/data/commands/ini.json +26 -12
  27. package/data/commands/javascript.json +29 -30
  28. package/data/commands/less.json +25 -29
  29. package/data/commands/lexon.json +23 -11
  30. package/data/commands/liquid.json +26 -11
  31. package/data/commands/m3.json +26 -12
  32. package/data/commands/manifest.json +35 -731
  33. package/data/commands/markdown.json +26 -12
  34. package/data/commands/mdx.json +23 -10
  35. package/data/commands/mips.json +26 -18
  36. package/data/commands/msdax.json +23 -11
  37. package/data/commands/nestjs.json +516 -273
  38. package/data/commands/nextjs.json +250 -123
  39. package/data/commands/objective-c.json +26 -24
  40. package/data/commands/pascal.json +27 -24
  41. package/data/commands/pascaligo.json +26 -24
  42. package/data/commands/perl.json +30 -30
  43. package/data/commands/pla.json +23 -11
  44. package/data/commands/postiats.json +26 -24
  45. package/data/commands/powerquery.json +23 -11
  46. package/data/commands/powershell.json +28 -30
  47. package/data/commands/protobuf.json +27 -30
  48. package/data/commands/qsharp.json +26 -30
  49. package/data/commands/razor.json +25 -29
  50. package/data/commands/react.json +244 -210
  51. package/data/commands/redshift.json +27 -18
  52. package/data/commands/restructuredtext.json +29 -30
  53. package/data/commands/sb.json +23 -11
  54. package/data/commands/scheme.json +25 -18
  55. package/data/commands/scss.json +26 -29
  56. package/data/commands/shadcn.json +564 -410
  57. package/data/commands/sol.json +27 -30
  58. package/data/commands/sparql.json +25 -11
  59. package/data/commands/sql.json +16 -2
  60. package/data/commands/ssh_config.json +31 -30
  61. package/data/commands/st.json +23 -11
  62. package/data/commands/systemverilog.json +26 -24
  63. package/data/commands/tailwindcss.json +60 -53
  64. package/data/commands/tcl.json +23 -18
  65. package/data/commands/toml.json +25 -11
  66. package/data/commands/twig.json +23 -10
  67. package/data/commands/vb.json +27 -24
  68. package/data/commands/wgsl.json +24 -11
  69. package/data/commands/yaml.json +29 -30
  70. package/data/completion/awk.json +906 -202
  71. package/data/completion/azcli.json +886 -237
  72. package/data/completion/bicep.json +862 -367
  73. package/data/completion/crontab.json +906 -202
  74. package/data/completion/dotenv.json +895 -169
  75. package/data/completion/graphql.json +895 -180
  76. package/data/completion/hcl.json +906 -191
  77. package/data/completion/ini.json +906 -136
  78. package/data/completion/json.json +895 -169
  79. package/data/completion/lexon.json +856 -295
  80. package/data/completion/makefile.json +906 -202
  81. package/data/completion/markdown.json +906 -224
  82. package/data/completion/mdx.json +895 -87
  83. package/data/completion/mips.json +872 -377
  84. package/data/completion/perl.json +961 -202
  85. package/data/completion/pla.json +895 -154
  86. package/data/completion/powershell.json +906 -224
  87. package/data/completion/protobuf.json +884 -180
  88. package/data/completion/ssh_config.json +906 -158
  89. package/data/completion/xml.json +906 -158
  90. package/data/definition/abap.json +127 -1
  91. package/data/definition/apex.json +97 -1
  92. package/data/definition/coffee.json +51 -1
  93. package/data/definition/dart.json +105 -1
  94. package/data/definition/elixir.json +115 -1
  95. package/data/definition/flow9.json +208 -1
  96. package/data/definition/freemarker2.json +283 -1
  97. package/data/definition/html.json +853 -558
  98. package/data/definition/java.json +1127 -183
  99. package/data/definition/kotlin.json +72 -1
  100. package/data/definition/r.json +692 -83
  101. package/data/definition/ruby.json +789 -669
  102. package/data/definition/rust.json +852 -206
  103. package/data/definition/sb.json +339 -1
  104. package/data/definition/st.json +367 -1
  105. package/data/documentRangeFormatting/nestjs.json +57 -17
  106. package/data/documentRangeFormatting/nextjs.json +57 -17
  107. package/data/documentRangeFormatting/react.json +82 -78
  108. package/data/documentSymbol/abap.json +54 -12
  109. package/data/documentSymbol/apex.json +40 -10
  110. package/data/documentSymbol/awk.json +15 -1
  111. package/data/documentSymbol/bicep.json +39 -39
  112. package/data/documentSymbol/c.json +1 -1
  113. package/data/documentSymbol/clojure.json +46 -46
  114. package/data/documentSymbol/css.json +96 -96
  115. package/data/documentSymbol/dart.json +109 -19
  116. package/data/documentSymbol/dockerfile.json +1 -1
  117. package/data/documentSymbol/elixir.json +39 -39
  118. package/data/documentSymbol/go.json +1 -1
  119. package/data/documentSymbol/graphql.json +1 -1
  120. package/data/documentSymbol/hcl.json +1 -1
  121. package/data/documentSymbol/html.json +29 -1
  122. package/data/documentSymbol/java.json +1 -1
  123. package/data/documentSymbol/javascript.json +1 -1
  124. package/data/documentSymbol/julia.json +46 -46
  125. package/data/documentSymbol/kotlin.json +74 -14
  126. package/data/documentSymbol/less.json +25 -25
  127. package/data/documentSymbol/lua.json +22 -1
  128. package/data/documentSymbol/makefile.json +15 -1
  129. package/data/documentSymbol/markdown.json +36 -1
  130. package/data/documentSymbol/mysql.json +32 -32
  131. package/data/documentSymbol/nginx.json +1 -1
  132. package/data/documentSymbol/pascal.json +46 -46
  133. package/data/documentSymbol/perl.json +1 -1
  134. package/data/documentSymbol/pgsql.json +39 -39
  135. package/data/documentSymbol/php.json +1 -1
  136. package/data/documentSymbol/powershell.json +1 -1
  137. package/data/documentSymbol/protobuf.json +1 -1
  138. package/data/documentSymbol/python.json +1 -1
  139. package/data/documentSymbol/r.json +67 -67
  140. package/data/documentSymbol/redshift.json +60 -18
  141. package/data/documentSymbol/ruby.json +1 -1
  142. package/data/documentSymbol/rust.json +1 -1
  143. package/data/documentSymbol/scala.json +116 -20
  144. package/data/documentSymbol/scheme.json +25 -25
  145. package/data/documentSymbol/scss.json +39 -39
  146. package/data/documentSymbol/shell.json +1 -1
  147. package/data/documentSymbol/sql.json +1 -1
  148. package/data/documentSymbol/swift.json +88 -16
  149. package/data/documentSymbol/typescript.json +1 -1
  150. package/data/documentSymbol/vb.json +53 -53
  151. package/data/documentSymbol/yaml.json +1 -1
  152. package/data/foldingRange/angular.json +100 -99
  153. package/data/foldingRange/nestjs.json +94 -26
  154. package/data/foldingRange/nextjs.json +94 -26
  155. package/data/foldingRange/react.json +118 -120
  156. package/data/foldingRange/shadcn.json +94 -93
  157. package/data/formatting/abap.json +19 -11
  158. package/data/formatting/angular.json +63 -21
  159. package/data/formatting/apex.json +19 -11
  160. package/data/formatting/awk.json +1 -1
  161. package/data/formatting/azcli.json +18 -18
  162. package/data/formatting/bicep.json +18 -18
  163. package/data/formatting/c.json +1 -1
  164. package/data/formatting/caddy.json +1 -1
  165. package/data/formatting/cameligo.json +18 -18
  166. package/data/formatting/clojure.json +18 -18
  167. package/data/formatting/coffee.json +18 -18
  168. package/data/formatting/cpp.json +1 -1
  169. package/data/formatting/crontab.json +1 -1
  170. package/data/formatting/csharp.json +1 -1
  171. package/data/formatting/css.json +73 -73
  172. package/data/formatting/cypher.json +18 -18
  173. package/data/formatting/dart.json +43 -15
  174. package/data/formatting/docker-compose.json +24 -24
  175. package/data/formatting/dockerfile.json +1 -1
  176. package/data/formatting/doctest.json +18 -18
  177. package/data/formatting/dotenv.json +1 -1
  178. package/data/formatting/ecl.json +18 -18
  179. package/data/formatting/elixir.json +43 -18
  180. package/data/formatting/flow9.json +18 -18
  181. package/data/formatting/freemarker2.json +18 -18
  182. package/data/formatting/go.json +1 -1
  183. package/data/formatting/graphql.json +1 -1
  184. package/data/formatting/hcl.json +26 -1
  185. package/data/formatting/html.json +26 -1
  186. package/data/formatting/ini.json +1 -1
  187. package/data/formatting/java.json +1 -1
  188. package/data/formatting/javascript.json +1 -1
  189. package/data/formatting/julia.json +18 -18
  190. package/data/formatting/kotlin.json +33 -13
  191. package/data/formatting/less.json +48 -18
  192. package/data/formatting/lexon.json +18 -18
  193. package/data/formatting/liquid.json +18 -18
  194. package/data/formatting/lua.json +1 -1
  195. package/data/formatting/m3.json +18 -18
  196. package/data/formatting/makefile.json +1 -1
  197. package/data/formatting/markdown.json +26 -1
  198. package/data/formatting/mdx.json +18 -18
  199. package/data/formatting/mips.json +18 -18
  200. package/data/formatting/msdax.json +18 -18
  201. package/data/formatting/mysql.json +43 -18
  202. package/data/formatting/nginx.json +1 -1
  203. package/data/formatting/objective-c.json +18 -18
  204. package/data/formatting/pascal.json +18 -18
  205. package/data/formatting/pascaligo.json +18 -18
  206. package/data/formatting/perl.json +1 -1
  207. package/data/formatting/pgsql.json +43 -18
  208. package/data/formatting/php.json +1 -1
  209. package/data/formatting/pla.json +18 -18
  210. package/data/formatting/postiats.json +18 -18
  211. package/data/formatting/powerquery.json +18 -18
  212. package/data/formatting/powershell.json +1 -1
  213. package/data/formatting/protobuf.json +1 -1
  214. package/data/formatting/python.json +1 -1
  215. package/data/formatting/qsharp.json +18 -18
  216. package/data/formatting/r.json +32 -32
  217. package/data/formatting/razor.json +18 -18
  218. package/data/formatting/redis-cli.json +1 -1
  219. package/data/formatting/redis.json +18 -18
  220. package/data/formatting/redshift.json +43 -18
  221. package/data/formatting/restructuredtext.json +18 -18
  222. package/data/formatting/ruby.json +1 -1
  223. package/data/formatting/rust.json +1 -1
  224. package/data/formatting/sb.json +18 -18
  225. package/data/formatting/scala.json +48 -16
  226. package/data/formatting/scheme.json +18 -18
  227. package/data/formatting/scss.json +48 -18
  228. package/data/formatting/shadcn.json +63 -61
  229. package/data/formatting/shell.json +1 -1
  230. package/data/formatting/sol.json +18 -18
  231. package/data/formatting/sparql.json +18 -18
  232. package/data/formatting/sql.json +1 -1
  233. package/data/formatting/ssh_config.json +1 -1
  234. package/data/formatting/st.json +18 -18
  235. package/data/formatting/swift.json +58 -18
  236. package/data/formatting/systemd.json +1 -1
  237. package/data/formatting/systemverilog.json +18 -18
  238. package/data/formatting/tcl.json +18 -18
  239. package/data/formatting/toml.json +1 -1
  240. package/data/formatting/twig.json +18 -18
  241. package/data/formatting/typescript.json +1 -1
  242. package/data/formatting/vb.json +18 -18
  243. package/data/formatting/wgsl.json +18 -18
  244. package/data/formatting/xml.json +26 -1
  245. package/data/formatting/yaml.json +1 -1
  246. package/data/hover/apex.json +281 -6
  247. package/data/hover/awk.json +251 -6
  248. package/data/hover/crontab.json +251 -6
  249. package/data/hover/dotenv.json +242 -4
  250. package/data/hover/graphql.json +251 -6
  251. package/data/hover/lexon.json +250 -5
  252. package/data/hover/markdown.json +226 -9
  253. package/data/hover/mdx.json +250 -5
  254. package/data/hover/perl.json +251 -6
  255. package/data/hover/pla.json +264 -5
  256. package/data/hover/powershell.json +252 -7
  257. package/data/hover/protobuf.json +251 -6
  258. package/data/hover/redis.json +355 -40
  259. package/data/hover/ssh_config.json +251 -6
  260. package/data/hover/xml.json +231 -7
  261. package/data/inlineCompletions/c.json +49 -1
  262. package/data/inlineCompletions/cpp.json +61 -1
  263. package/data/inlineCompletions/csharp.json +73 -1
  264. package/data/inlineCompletions/css.json +125 -125
  265. package/data/inlineCompletions/dart.json +136 -26
  266. package/data/inlineCompletions/elixir.json +34 -34
  267. package/data/inlineCompletions/go.json +67 -1
  268. package/data/inlineCompletions/html.json +1 -1
  269. package/data/inlineCompletions/java.json +67 -1
  270. package/data/inlineCompletions/javascript.json +97 -1
  271. package/data/inlineCompletions/kotlin.json +88 -18
  272. package/data/inlineCompletions/less.json +76 -28
  273. package/data/inlineCompletions/lua.json +37 -1
  274. package/data/inlineCompletions/mysql.json +34 -34
  275. package/data/inlineCompletions/pgsql.json +34 -34
  276. package/data/inlineCompletions/php.json +43 -1
  277. package/data/inlineCompletions/python.json +73 -1
  278. package/data/inlineCompletions/ruby.json +49 -1
  279. package/data/inlineCompletions/rust.json +61 -1
  280. package/data/inlineCompletions/scala.json +130 -25
  281. package/data/inlineCompletions/scss.json +34 -34
  282. package/data/inlineCompletions/shell.json +1 -1
  283. package/data/inlineCompletions/sql.json +43 -1
  284. package/data/inlineCompletions/swift.json +112 -22
  285. package/data/inlineCompletions/typescript.json +97 -1
  286. package/data/linkedEditingRange/azcli.json +6 -6
  287. package/data/linkedEditingRange/crontab.json +6 -6
  288. package/data/linkedEditingRange/docker-compose.json +6 -6
  289. package/data/linkedEditingRange/doctest.json +6 -6
  290. package/data/linkedEditingRange/dotenv.json +13 -6
  291. package/data/linkedEditingRange/ini.json +13 -6
  292. package/data/linkedEditingRange/json.json +13 -6
  293. package/data/linkedEditingRange/lexon.json +6 -6
  294. package/data/linkedEditingRange/mips.json +6 -6
  295. package/data/linkedEditingRange/msdax.json +6 -6
  296. package/data/linkedEditingRange/nestjs.json +18 -10
  297. package/data/linkedEditingRange/nextjs.json +24 -11
  298. package/data/linkedEditingRange/pla.json +6 -6
  299. package/data/linkedEditingRange/react.json +74 -75
  300. package/data/linkedEditingRange/redis-cli.json +6 -6
  301. package/data/linkedEditingRange/redis.json +6 -6
  302. package/data/linkedEditingRange/ssh_config.json +6 -6
  303. package/data/linkedEditingRange/systemd.json +6 -6
  304. package/data/linkedEditingRange/toml.json +13 -6
  305. package/data/linkedEditingRange/wgsl.json +6 -6
  306. package/data/linkedEditingRange/xml.json +13 -13
  307. package/data/linkedEditingRange/yaml.json +13 -6
  308. package/data/onTypeFormatting/angular.json +63 -14
  309. package/data/onTypeFormatting/nestjs.json +64 -16
  310. package/data/onTypeFormatting/nextjs.json +72 -17
  311. package/data/onTypeFormatting/react.json +148 -127
  312. package/data/onTypeFormatting/shadcn.json +63 -54
  313. package/data/rangeSemanticTokens/angular.json +196 -140
  314. package/data/rangeSemanticTokens/nestjs.json +195 -27
  315. package/data/rangeSemanticTokens/nextjs.json +199 -28
  316. package/data/rangeSemanticTokens/react.json +77 -216
  317. package/data/rangeSemanticTokens/shadcn.json +203 -140
  318. package/data/rename/angular.json +121 -131
  319. package/data/rename/nestjs.json +122 -32
  320. package/data/rename/nextjs.json +116 -31
  321. package/data/rename/react.json +133 -88
  322. package/data/rename/shadcn.json +73 -79
  323. package/data/selectionRange/abap.json +58 -34
  324. package/data/selectionRange/angular.json +126 -95
  325. package/data/selectionRange/apex.json +58 -34
  326. package/data/selectionRange/awk.json +56 -34
  327. package/data/selectionRange/azcli.json +43 -24
  328. package/data/selectionRange/bicep.json +56 -34
  329. package/data/selectionRange/c.json +62 -39
  330. package/data/selectionRange/caddy.json +53 -34
  331. package/data/selectionRange/cameligo.json +56 -34
  332. package/data/selectionRange/clojure.json +57 -34
  333. package/data/selectionRange/coffee.json +59 -34
  334. package/data/selectionRange/cpp.json +73 -44
  335. package/data/selectionRange/crontab.json +39 -29
  336. package/data/selectionRange/csharp.json +69 -39
  337. package/data/selectionRange/css.json +95 -55
  338. package/data/selectionRange/cypher.json +57 -34
  339. package/data/selectionRange/dart.json +65 -34
  340. package/data/selectionRange/docker-compose.json +54 -34
  341. package/data/selectionRange/dockerfile.json +56 -34
  342. package/data/selectionRange/doctest.json +47 -24
  343. package/data/selectionRange/dotenv.json +33 -24
  344. package/data/selectionRange/ecl.json +58 -34
  345. package/data/selectionRange/elixir.json +63 -34
  346. package/data/selectionRange/flow9.json +57 -34
  347. package/data/selectionRange/freemarker2.json +58 -34
  348. package/data/selectionRange/go.json +64 -39
  349. package/data/selectionRange/graphql.json +58 -34
  350. package/data/selectionRange/hcl.json +56 -34
  351. package/data/selectionRange/html.json +63 -34
  352. package/data/selectionRange/ini.json +38 -24
  353. package/data/selectionRange/java.json +68 -39
  354. package/data/selectionRange/javascript.json +65 -39
  355. package/data/selectionRange/julia.json +65 -39
  356. package/data/selectionRange/kotlin.json +68 -39
  357. package/data/selectionRange/less.json +58 -34
  358. package/data/selectionRange/lexon.json +38 -24
  359. package/data/selectionRange/liquid.json +58 -34
  360. package/data/selectionRange/lua.json +59 -34
  361. package/data/selectionRange/m3.json +57 -34
  362. package/data/selectionRange/makefile.json +53 -34
  363. package/data/selectionRange/markdown.json +57 -34
  364. package/data/selectionRange/mdx.json +63 -34
  365. package/data/selectionRange/mips.json +43 -29
  366. package/data/selectionRange/msdax.json +52 -34
  367. package/data/selectionRange/mysql.json +51 -34
  368. package/data/selectionRange/nestjs.json +35 -21
  369. package/data/selectionRange/nextjs.json +35 -22
  370. package/data/selectionRange/nginx.json +53 -34
  371. package/data/selectionRange/objective-c.json +64 -39
  372. package/data/selectionRange/pascal.json +53 -34
  373. package/data/selectionRange/pascaligo.json +57 -34
  374. package/data/selectionRange/perl.json +59 -34
  375. package/data/selectionRange/pgsql.json +50 -34
  376. package/data/selectionRange/php.json +65 -39
  377. package/data/selectionRange/pla.json +52 -29
  378. package/data/selectionRange/postiats.json +61 -34
  379. package/data/selectionRange/powerquery.json +56 -34
  380. package/data/selectionRange/powershell.json +65 -39
  381. package/data/selectionRange/protobuf.json +58 -34
  382. package/data/selectionRange/python.json +66 -39
  383. package/data/selectionRange/qsharp.json +62 -39
  384. package/data/selectionRange/r.json +57 -34
  385. package/data/selectionRange/razor.json +63 -34
  386. package/data/selectionRange/react.json +103 -87
  387. package/data/selectionRange/redis-cli.json +38 -24
  388. package/data/selectionRange/redis.json +38 -24
  389. package/data/selectionRange/redshift.json +49 -34
  390. package/data/selectionRange/restructuredtext.json +58 -34
  391. package/data/selectionRange/ruby.json +65 -39
  392. package/data/selectionRange/rust.json +73 -44
  393. package/data/selectionRange/sb.json +43 -29
  394. package/data/selectionRange/scala.json +65 -39
  395. package/data/selectionRange/scheme.json +52 -34
  396. package/data/selectionRange/scss.json +58 -34
  397. package/data/selectionRange/shadcn.json +120 -89
  398. package/data/selectionRange/shell.json +1 -1
  399. package/data/selectionRange/sol.json +63 -39
  400. package/data/selectionRange/sparql.json +58 -34
  401. package/data/selectionRange/sql.json +50 -34
  402. package/data/selectionRange/ssh_config.json +37 -29
  403. package/data/selectionRange/st.json +49 -29
  404. package/data/selectionRange/swift.json +73 -44
  405. package/data/selectionRange/systemd.json +47 -34
  406. package/data/selectionRange/systemverilog.json +62 -39
  407. package/data/selectionRange/tailwindcss.json +49 -34
  408. package/data/selectionRange/tcl.json +57 -34
  409. package/data/selectionRange/toml.json +49 -29
  410. package/data/selectionRange/twig.json +58 -34
  411. package/data/selectionRange/typescript.json +75 -44
  412. package/data/selectionRange/vb.json +59 -39
  413. package/data/selectionRange/wgsl.json +61 -34
  414. package/data/selectionRange/xml.json +51 -34
  415. package/data/selectionRange/yaml.json +54 -34
  416. package/data/semanticTokens/angular.json +269 -198
  417. package/data/semanticTokens/nestjs.json +245 -35
  418. package/data/semanticTokens/nextjs.json +265 -38
  419. package/data/semanticTokens/react.json +230 -215
  420. package/data/semanticTokens/shadcn.json +235 -180
  421. package/data/signatureHelp/nestjs.json +201 -128
  422. package/data/signatureHelp/nextjs.json +185 -127
  423. package/data/signatureHelp/react.json +285 -281
  424. package/package.json +1 -1
@@ -1,203 +1,962 @@
1
- {
2
- "language": "perl",
3
- "completions": [
4
- {
5
- "label": "shebang",
6
- "kind": 15,
7
- "detail": "Perl shebang",
8
- "documentation": {
9
- "value": "Perl script shebang with strict and warnings."
10
- },
11
- "insertText": "#!/usr/bin/env perl\nuse strict;\nuse warnings;\n\n${1:# code}",
12
- "insertTextRules": 4,
13
- "sortText": "00_shebang"
14
- },
15
- {
16
- "label": "use strict",
17
- "kind": 14,
18
- "detail": "Enable strict mode",
19
- "documentation": {
20
- "value": "Enable strict variable checking."
21
- },
22
- "insertText": "use strict;\nuse warnings;",
23
- "insertTextRules": 4,
24
- "sortText": "00_strict"
25
- },
26
- {
27
- "label": "my variable",
28
- "kind": 15,
29
- "detail": "Lexical variable",
30
- "documentation": {
31
- "value": "Declare a lexical (local scope) variable."
32
- },
33
- "insertText": "my $${1:var} = ${2:value};",
34
- "insertTextRules": 4,
35
- "sortText": "01_my"
36
- },
37
- {
38
- "label": "my array",
39
- "kind": 15,
40
- "detail": "Array variable",
41
- "documentation": {
42
- "value": "Declare an array."
43
- },
44
- "insertText": "my @${1:arr} = (${2:1, 2, 3});",
45
- "insertTextRules": 4,
46
- "sortText": "01_array"
47
- },
48
- {
49
- "label": "my hash",
50
- "kind": 15,
51
- "detail": "Hash variable",
52
- "documentation": {
53
- "value": "Declare a hash (dictionary)."
54
- },
55
- "insertText": "my %${1:hash} = (\n ${2:key1} => '${3:value1}',\n ${4:key2} => '${5:value2}',\n);",
56
- "insertTextRules": 4,
57
- "sortText": "01_hash"
58
- },
59
- {
60
- "label": "sub",
61
- "kind": 15,
62
- "detail": "Subroutine",
63
- "documentation": {
64
- "value": "Define a subroutine (function)."
65
- },
66
- "insertText": "sub ${1:name} {\n my (${2:$param}) = @_;\n ${3:# body}\n return ${4:$result};\n}",
67
- "insertTextRules": 4,
68
- "sortText": "01_sub"
69
- },
70
- {
71
- "label": "if",
72
- "kind": 15,
73
- "detail": "If statement",
74
- "documentation": {
75
- "value": "Conditional if statement."
76
- },
77
- "insertText": "if (${1:condition}) {\n ${2:# code}\n}",
78
- "insertTextRules": 4,
79
- "sortText": "02_if"
80
- },
81
- {
82
- "label": "if-else",
83
- "kind": 15,
84
- "detail": "If-elsif-else",
85
- "documentation": {
86
- "value": "Full conditional."
87
- },
88
- "insertText": "if (${1:condition}) {\n ${2:# true}\n} elsif (${3:other}) {\n ${4:# elsif}\n} else {\n ${5:# else}\n}",
89
- "insertTextRules": 4,
90
- "sortText": "02_ifelse"
91
- },
92
- {
93
- "label": "foreach",
94
- "kind": 15,
95
- "detail": "Foreach loop",
96
- "documentation": {
97
- "value": "Iterate over a list."
98
- },
99
- "insertText": "foreach my $${1:item} (@${2:list}) {\n ${3:print \"$item\\n\";}\n}",
100
- "insertTextRules": 4,
101
- "sortText": "02_foreach"
102
- },
103
- {
104
- "label": "while",
105
- "kind": 15,
106
- "detail": "While loop",
107
- "documentation": {
108
- "value": "Loop while condition is true."
109
- },
110
- "insertText": "while (${1:condition}) {\n ${2:# body}\n}",
111
- "insertTextRules": 4,
112
- "sortText": "02_while"
113
- },
114
- {
115
- "label": "regex match",
116
- "kind": 15,
117
- "detail": "Regex match",
118
- "documentation": {
119
- "value": "Match a string against a regex pattern."
120
- },
121
- "insertText": "if ($${1:str} =~ /${2:pattern}/) {\n ${3:print \"matched\\n\";}\n}",
122
- "insertTextRules": 4,
123
- "sortText": "03_regex"
124
- },
125
- {
126
- "label": "regex substitute",
127
- "kind": 15,
128
- "detail": "Regex substitution",
129
- "documentation": {
130
- "value": "Replace text using a regex pattern."
131
- },
132
- "insertText": "$${1:str} =~ s/${2:pattern}/${3:replacement}/g;",
133
- "insertTextRules": 4,
134
- "sortText": "03_subst"
135
- },
136
- {
137
- "label": "open file",
138
- "kind": 15,
139
- "detail": "Open file",
140
- "documentation": {
141
- "value": "Open a file for reading."
142
- },
143
- "insertText": "open(my $${1:fh}, '<', '${2:file.txt}') or die \"Cannot open: $!\";\nwhile (my $line = <$${1:fh}>) {\n chomp $line;\n ${3:print \"$line\\n\";}\n}\nclose($${1:fh});",
144
- "insertTextRules": 4,
145
- "sortText": "03_open"
146
- },
147
- {
148
- "label": "write file",
149
- "kind": 15,
150
- "detail": "Write to file",
151
- "documentation": {
152
- "value": "Open and write to a file."
153
- },
154
- "insertText": "open(my $${1:fh}, '>', '${2:output.txt}') or die \"Cannot open: $!\";\nprint $${1:fh} \"${3:content}\\n\";\nclose($${1:fh});",
155
- "insertTextRules": 4,
156
- "sortText": "03_write"
157
- },
158
- {
159
- "label": "one-liner",
160
- "kind": 15,
161
- "detail": "Perl one-liner pattern",
162
- "documentation": {
163
- "value": "Common Perl one-liner patterns used on servers."
164
- },
165
- "insertText": "perl -${1:n}e '${2:print if /pattern/}' ${3:file.txt}",
166
- "insertTextRules": 4,
167
- "sortText": "04_oneliner"
168
- },
169
- {
170
- "label": "chomp",
171
- "kind": 14,
172
- "detail": "Remove newline",
173
- "documentation": {
174
- "value": "Remove trailing newline from a string."
175
- },
176
- "insertText": "chomp($${1:line});",
177
- "insertTextRules": 4,
178
- "sortText": "05_chomp"
179
- },
180
- {
181
- "label": "split",
182
- "kind": 14,
183
- "detail": "Split string",
184
- "documentation": {
185
- "value": "Split a string into an array."
186
- },
187
- "insertText": "my @${1:parts} = split(/${2:,}/, $${3:str});",
188
- "insertTextRules": 4,
189
- "sortText": "05_split"
190
- },
191
- {
192
- "label": "join",
193
- "kind": 14,
194
- "detail": "Join array",
195
- "documentation": {
196
- "value": "Join array elements into a string."
197
- },
198
- "insertText": "my $${1:result} = join('${2:,}', @${3:arr});",
199
- "insertTextRules": 4,
200
- "sortText": "05_join"
201
- }
202
- ]
1
+ {
2
+ "language": "perl",
3
+ "completions": [
4
+ {
5
+ "label": "shebang",
6
+ "kind": 15,
7
+ "detail": "Perl shebang",
8
+ "documentation": {
9
+ "value": "Perl script shebang with strict and warnings."
10
+ },
11
+ "insertText": "#!/usr/bin/env perl\nuse strict;\nuse warnings;\n\n${1:# code}",
12
+ "insertTextRules": 4,
13
+ "sortText": "00_shebang"
14
+ },
15
+ {
16
+ "label": "use strict",
17
+ "kind": 14,
18
+ "detail": "Enable strict mode",
19
+ "documentation": {
20
+ "value": "Enable strict variable checking."
21
+ },
22
+ "insertText": "use strict;\nuse warnings;",
23
+ "insertTextRules": 4,
24
+ "sortText": "00_strict"
25
+ },
26
+ {
27
+ "label": "my variable",
28
+ "kind": 15,
29
+ "detail": "Lexical variable",
30
+ "documentation": {
31
+ "value": "Declare a lexical (local scope) variable."
32
+ },
33
+ "insertText": "my $${1:var} = ${2:value};",
34
+ "insertTextRules": 4,
35
+ "sortText": "01_my"
36
+ },
37
+ {
38
+ "label": "my array",
39
+ "kind": 15,
40
+ "detail": "Array variable",
41
+ "documentation": {
42
+ "value": "Declare an array."
43
+ },
44
+ "insertText": "my @${1:arr} = (${2:1, 2, 3});",
45
+ "insertTextRules": 4,
46
+ "sortText": "01_array"
47
+ },
48
+ {
49
+ "label": "my hash",
50
+ "kind": 15,
51
+ "detail": "Hash variable",
52
+ "documentation": {
53
+ "value": "Declare a hash (dictionary)."
54
+ },
55
+ "insertText": "my %${1:hash} = (\n ${2:key1} => '${3:value1}',\n ${4:key2} => '${5:value2}',\n);",
56
+ "insertTextRules": 4,
57
+ "sortText": "01_hash"
58
+ },
59
+ {
60
+ "label": "sub",
61
+ "kind": 15,
62
+ "detail": "Subroutine",
63
+ "documentation": {
64
+ "value": "Define a subroutine (function)."
65
+ },
66
+ "insertText": "sub ${1:name} {\n my (${2:$param}) = @_;\n ${3:# body}\n return ${4:$result};\n}",
67
+ "insertTextRules": 4,
68
+ "sortText": "01_sub"
69
+ },
70
+ {
71
+ "label": "if",
72
+ "kind": 15,
73
+ "detail": "If statement",
74
+ "documentation": {
75
+ "value": "Conditional if statement."
76
+ },
77
+ "insertText": "if (${1:condition}) {\n ${2:# code}\n}",
78
+ "insertTextRules": 4,
79
+ "sortText": "02_if"
80
+ },
81
+ {
82
+ "label": "if-else",
83
+ "kind": 15,
84
+ "detail": "If-elsif-else",
85
+ "documentation": {
86
+ "value": "Full conditional."
87
+ },
88
+ "insertText": "if (${1:condition}) {\n ${2:# true}\n} elsif (${3:other}) {\n ${4:# elsif}\n} else {\n ${5:# else}\n}",
89
+ "insertTextRules": 4,
90
+ "sortText": "02_ifelse"
91
+ },
92
+ {
93
+ "label": "foreach",
94
+ "kind": 15,
95
+ "detail": "Foreach loop",
96
+ "documentation": {
97
+ "value": "Iterate over a list."
98
+ },
99
+ "insertText": "foreach my $${1:item} (@${2:list}) {\n ${3:print \"$item\\n\";}\n}",
100
+ "insertTextRules": 4,
101
+ "sortText": "02_foreach"
102
+ },
103
+ {
104
+ "label": "while",
105
+ "kind": 15,
106
+ "detail": "While loop",
107
+ "documentation": {
108
+ "value": "Loop while condition is true."
109
+ },
110
+ "insertText": "while (${1:condition}) {\n ${2:# body}\n}",
111
+ "insertTextRules": 4,
112
+ "sortText": "02_while"
113
+ },
114
+ {
115
+ "label": "regex match",
116
+ "kind": 15,
117
+ "detail": "Regex match",
118
+ "documentation": {
119
+ "value": "Match a string against a regex pattern."
120
+ },
121
+ "insertText": "if ($${1:str} =~ /${2:pattern}/) {\n ${3:print \"matched\\n\";}\n}",
122
+ "insertTextRules": 4,
123
+ "sortText": "03_regex"
124
+ },
125
+ {
126
+ "label": "regex substitute",
127
+ "kind": 15,
128
+ "detail": "Regex substitution",
129
+ "documentation": {
130
+ "value": "Replace text using a regex pattern."
131
+ },
132
+ "insertText": "$${1:str} =~ s/${2:pattern}/${3:replacement}/g;",
133
+ "insertTextRules": 4,
134
+ "sortText": "03_subst"
135
+ },
136
+ {
137
+ "label": "open file",
138
+ "kind": 15,
139
+ "detail": "Open file",
140
+ "documentation": {
141
+ "value": "Open a file for reading."
142
+ },
143
+ "insertText": "open(my $${1:fh}, '<', '${2:file.txt}') or die \"Cannot open: $!\";\nwhile (my $line = <$${1:fh}>) {\n chomp $line;\n ${3:print \"$line\\n\";}\n}\nclose($${1:fh});",
144
+ "insertTextRules": 4,
145
+ "sortText": "03_open"
146
+ },
147
+ {
148
+ "label": "write file",
149
+ "kind": 15,
150
+ "detail": "Write to file",
151
+ "documentation": {
152
+ "value": "Open and write to a file."
153
+ },
154
+ "insertText": "open(my $${1:fh}, '>', '${2:output.txt}') or die \"Cannot open: $!\";\nprint $${1:fh} \"${3:content}\\n\";\nclose($${1:fh});",
155
+ "insertTextRules": 4,
156
+ "sortText": "03_write"
157
+ },
158
+ {
159
+ "label": "one-liner",
160
+ "kind": 15,
161
+ "detail": "Perl one-liner pattern",
162
+ "documentation": {
163
+ "value": "Common Perl one-liner patterns used on servers."
164
+ },
165
+ "insertText": "perl -${1:n}e '${2:print if /pattern/}' ${3:file.txt}",
166
+ "insertTextRules": 4,
167
+ "sortText": "04_oneliner"
168
+ },
169
+ {
170
+ "label": "chomp",
171
+ "kind": 14,
172
+ "detail": "Remove newline",
173
+ "documentation": {
174
+ "value": "Remove trailing newline from a string."
175
+ },
176
+ "insertText": "chomp($${1:line});",
177
+ "insertTextRules": 4,
178
+ "sortText": "05_chomp"
179
+ },
180
+ {
181
+ "label": "split",
182
+ "kind": 14,
183
+ "detail": "Split string",
184
+ "documentation": {
185
+ "value": "Split a string into an array."
186
+ },
187
+ "insertText": "my @${1:parts} = split(/${2:,}/, $${3:str});",
188
+ "insertTextRules": 4,
189
+ "sortText": "05_split"
190
+ },
191
+ {
192
+ "label": "join",
193
+ "kind": 14,
194
+ "detail": "Join array",
195
+ "documentation": {
196
+ "value": "Join array elements into a string."
197
+ },
198
+ "insertText": "my $${1:result} = join('${2:,}', @${3:arr});",
199
+ "insertTextRules": 4,
200
+ "sortText": "05_join"
201
+ },
202
+ {
203
+ "label": "my",
204
+ "kind": 17,
205
+ "detail": "Keyword: my",
206
+ "documentation": {
207
+ "value": "Declare lexical variable."
208
+ },
209
+ "insertText": "my",
210
+ "insertTextRules": 0,
211
+ "sortText": "00_kw"
212
+ },
213
+ {
214
+ "label": "our",
215
+ "kind": 17,
216
+ "detail": "Keyword: our",
217
+ "documentation": {
218
+ "value": "Declare package variable."
219
+ },
220
+ "insertText": "our",
221
+ "insertTextRules": 0,
222
+ "sortText": "00_kw"
223
+ },
224
+ {
225
+ "label": "local",
226
+ "kind": 17,
227
+ "detail": "Keyword: local",
228
+ "documentation": {
229
+ "value": "Dynamic scoping."
230
+ },
231
+ "insertText": "local",
232
+ "insertTextRules": 0,
233
+ "sortText": "00_kw"
234
+ },
235
+ {
236
+ "label": "sub",
237
+ "kind": 17,
238
+ "detail": "Keyword: sub",
239
+ "documentation": {
240
+ "value": "Define subroutine."
241
+ },
242
+ "insertText": "sub",
243
+ "insertTextRules": 0,
244
+ "sortText": "00_kw"
245
+ },
246
+ {
247
+ "label": "return",
248
+ "kind": 17,
249
+ "detail": "Keyword: return",
250
+ "documentation": {
251
+ "value": "Return from subroutine."
252
+ },
253
+ "insertText": "return",
254
+ "insertTextRules": 0,
255
+ "sortText": "00_kw"
256
+ },
257
+ {
258
+ "label": "if",
259
+ "kind": 17,
260
+ "detail": "Keyword: if",
261
+ "documentation": {
262
+ "value": "Conditional."
263
+ },
264
+ "insertText": "if",
265
+ "insertTextRules": 0,
266
+ "sortText": "00_kw"
267
+ },
268
+ {
269
+ "label": "elsif",
270
+ "kind": 17,
271
+ "detail": "Keyword: elsif",
272
+ "documentation": {
273
+ "value": "Else-if."
274
+ },
275
+ "insertText": "elsif",
276
+ "insertTextRules": 0,
277
+ "sortText": "00_kw"
278
+ },
279
+ {
280
+ "label": "else",
281
+ "kind": 17,
282
+ "detail": "Keyword: else",
283
+ "documentation": {
284
+ "value": "Else."
285
+ },
286
+ "insertText": "else",
287
+ "insertTextRules": 0,
288
+ "sortText": "00_kw"
289
+ },
290
+ {
291
+ "label": "unless",
292
+ "kind": 17,
293
+ "detail": "Keyword: unless",
294
+ "documentation": {
295
+ "value": "Negative conditional."
296
+ },
297
+ "insertText": "unless",
298
+ "insertTextRules": 0,
299
+ "sortText": "00_kw"
300
+ },
301
+ {
302
+ "label": "while",
303
+ "kind": 17,
304
+ "detail": "Keyword: while",
305
+ "documentation": {
306
+ "value": "While loop."
307
+ },
308
+ "insertText": "while",
309
+ "insertTextRules": 0,
310
+ "sortText": "00_kw"
311
+ },
312
+ {
313
+ "label": "until",
314
+ "kind": 17,
315
+ "detail": "Keyword: until",
316
+ "documentation": {
317
+ "value": "Until loop."
318
+ },
319
+ "insertText": "until",
320
+ "insertTextRules": 0,
321
+ "sortText": "00_kw"
322
+ },
323
+ {
324
+ "label": "for",
325
+ "kind": 17,
326
+ "detail": "Keyword: for",
327
+ "documentation": {
328
+ "value": "C-style for loop."
329
+ },
330
+ "insertText": "for",
331
+ "insertTextRules": 0,
332
+ "sortText": "00_kw"
333
+ },
334
+ {
335
+ "label": "foreach",
336
+ "kind": 17,
337
+ "detail": "Keyword: foreach",
338
+ "documentation": {
339
+ "value": "Foreach loop."
340
+ },
341
+ "insertText": "foreach",
342
+ "insertTextRules": 0,
343
+ "sortText": "00_kw"
344
+ },
345
+ {
346
+ "label": "do",
347
+ "kind": 17,
348
+ "detail": "Keyword: do",
349
+ "documentation": {
350
+ "value": "Do block or file."
351
+ },
352
+ "insertText": "do",
353
+ "insertTextRules": 0,
354
+ "sortText": "00_kw"
355
+ },
356
+ {
357
+ "label": "last",
358
+ "kind": 17,
359
+ "detail": "Keyword: last",
360
+ "documentation": {
361
+ "value": "Break out of loop."
362
+ },
363
+ "insertText": "last",
364
+ "insertTextRules": 0,
365
+ "sortText": "00_kw"
366
+ },
367
+ {
368
+ "label": "next",
369
+ "kind": 17,
370
+ "detail": "Keyword: next",
371
+ "documentation": {
372
+ "value": "Continue to next iteration."
373
+ },
374
+ "insertText": "next",
375
+ "insertTextRules": 0,
376
+ "sortText": "00_kw"
377
+ },
378
+ {
379
+ "label": "redo",
380
+ "kind": 17,
381
+ "detail": "Keyword: redo",
382
+ "documentation": {
383
+ "value": "Restart loop iteration."
384
+ },
385
+ "insertText": "redo",
386
+ "insertTextRules": 0,
387
+ "sortText": "00_kw"
388
+ },
389
+ {
390
+ "label": "eval",
391
+ "kind": 17,
392
+ "detail": "Keyword: eval",
393
+ "documentation": {
394
+ "value": "Evaluate and catch errors."
395
+ },
396
+ "insertText": "eval",
397
+ "insertTextRules": 0,
398
+ "sortText": "00_kw"
399
+ },
400
+ {
401
+ "label": "die",
402
+ "kind": 17,
403
+ "detail": "Keyword: die",
404
+ "documentation": {
405
+ "value": "Raise exception."
406
+ },
407
+ "insertText": "die",
408
+ "insertTextRules": 0,
409
+ "sortText": "00_kw"
410
+ },
411
+ {
412
+ "label": "warn",
413
+ "kind": 17,
414
+ "detail": "Keyword: warn",
415
+ "documentation": {
416
+ "value": "Print warning."
417
+ },
418
+ "insertText": "warn",
419
+ "insertTextRules": 0,
420
+ "sortText": "00_kw"
421
+ },
422
+ {
423
+ "label": "use",
424
+ "kind": 17,
425
+ "detail": "Keyword: use",
426
+ "documentation": {
427
+ "value": "Load module."
428
+ },
429
+ "insertText": "use",
430
+ "insertTextRules": 0,
431
+ "sortText": "00_kw"
432
+ },
433
+ {
434
+ "label": "require",
435
+ "kind": 17,
436
+ "detail": "Keyword: require",
437
+ "documentation": {
438
+ "value": "Require file or module."
439
+ },
440
+ "insertText": "require",
441
+ "insertTextRules": 0,
442
+ "sortText": "00_kw"
443
+ },
444
+ {
445
+ "label": "package",
446
+ "kind": 17,
447
+ "detail": "Keyword: package",
448
+ "documentation": {
449
+ "value": "Declare package."
450
+ },
451
+ "insertText": "package",
452
+ "insertTextRules": 0,
453
+ "sortText": "00_kw"
454
+ },
455
+ {
456
+ "label": "BEGIN",
457
+ "kind": 17,
458
+ "detail": "Keyword: BEGIN",
459
+ "documentation": {
460
+ "value": "Compile-time block."
461
+ },
462
+ "insertText": "BEGIN",
463
+ "insertTextRules": 0,
464
+ "sortText": "00_kw"
465
+ },
466
+ {
467
+ "label": "END",
468
+ "kind": 17,
469
+ "detail": "Keyword: END",
470
+ "documentation": {
471
+ "value": "Cleanup block."
472
+ },
473
+ "insertText": "END",
474
+ "insertTextRules": 0,
475
+ "sortText": "00_kw"
476
+ },
477
+ {
478
+ "label": "print",
479
+ "kind": 1,
480
+ "detail": "print()",
481
+ "documentation": {
482
+ "value": "Print to filehandle."
483
+ },
484
+ "insertText": "print ${1:\"Hello\\n\"};",
485
+ "insertTextRules": 4,
486
+ "sortText": "01_fn"
487
+ },
488
+ {
489
+ "label": "say",
490
+ "kind": 1,
491
+ "detail": "say()",
492
+ "documentation": {
493
+ "value": "Print with newline."
494
+ },
495
+ "insertText": "say ${1:\"Hello\"};",
496
+ "insertTextRules": 4,
497
+ "sortText": "01_fn"
498
+ },
499
+ {
500
+ "label": "chomp",
501
+ "kind": 1,
502
+ "detail": "chomp()",
503
+ "documentation": {
504
+ "value": "Remove trailing newline."
505
+ },
506
+ "insertText": "chomp(${1:$line});",
507
+ "insertTextRules": 4,
508
+ "sortText": "01_fn"
509
+ },
510
+ {
511
+ "label": "chop",
512
+ "kind": 1,
513
+ "detail": "chop()",
514
+ "documentation": {
515
+ "value": "Remove last character."
516
+ },
517
+ "insertText": "chop(${1:$str});",
518
+ "insertTextRules": 4,
519
+ "sortText": "01_fn"
520
+ },
521
+ {
522
+ "label": "push",
523
+ "kind": 1,
524
+ "detail": "push()",
525
+ "documentation": {
526
+ "value": "Append to array."
527
+ },
528
+ "insertText": "push @${1:array}, ${2:$value};",
529
+ "insertTextRules": 4,
530
+ "sortText": "01_fn"
531
+ },
532
+ {
533
+ "label": "pop",
534
+ "kind": 1,
535
+ "detail": "pop()",
536
+ "documentation": {
537
+ "value": "Remove last element."
538
+ },
539
+ "insertText": "my $${1:last} = pop @${2:array};",
540
+ "insertTextRules": 4,
541
+ "sortText": "01_fn"
542
+ },
543
+ {
544
+ "label": "shift",
545
+ "kind": 1,
546
+ "detail": "shift()",
547
+ "documentation": {
548
+ "value": "Remove first element."
549
+ },
550
+ "insertText": "my $${1:first} = shift @${2:array};",
551
+ "insertTextRules": 4,
552
+ "sortText": "01_fn"
553
+ },
554
+ {
555
+ "label": "unshift",
556
+ "kind": 1,
557
+ "detail": "unshift()",
558
+ "documentation": {
559
+ "value": "Prepend to array."
560
+ },
561
+ "insertText": "unshift @${1:array}, ${2:$value};",
562
+ "insertTextRules": 4,
563
+ "sortText": "01_fn"
564
+ },
565
+ {
566
+ "label": "splice",
567
+ "kind": 1,
568
+ "detail": "splice()",
569
+ "documentation": {
570
+ "value": "Array splice."
571
+ },
572
+ "insertText": "splice(@${1:array}, ${2:offset}, ${3:length});",
573
+ "insertTextRules": 4,
574
+ "sortText": "01_fn"
575
+ },
576
+ {
577
+ "label": "map",
578
+ "kind": 1,
579
+ "detail": "map {}",
580
+ "documentation": {
581
+ "value": "Transform list."
582
+ },
583
+ "insertText": "my @${1:result} = map { ${2:$_ * 2} } @${3:list};",
584
+ "insertTextRules": 4,
585
+ "sortText": "01_fn"
586
+ },
587
+ {
588
+ "label": "grep",
589
+ "kind": 1,
590
+ "detail": "grep {}",
591
+ "documentation": {
592
+ "value": "Filter list."
593
+ },
594
+ "insertText": "my @${1:matches} = grep { ${2:/$pattern/} } @${3:list};",
595
+ "insertTextRules": 4,
596
+ "sortText": "01_fn"
597
+ },
598
+ {
599
+ "label": "sort",
600
+ "kind": 1,
601
+ "detail": "sort {}",
602
+ "documentation": {
603
+ "value": "Sort list."
604
+ },
605
+ "insertText": "my @${1:sorted} = sort { $a <=> $b } @${2:list};",
606
+ "insertTextRules": 4,
607
+ "sortText": "01_fn"
608
+ },
609
+ {
610
+ "label": "reverse",
611
+ "kind": 1,
612
+ "detail": "reverse()",
613
+ "documentation": {
614
+ "value": "Reverse list."
615
+ },
616
+ "insertText": "my @${1:rev} = reverse @${2:list};",
617
+ "insertTextRules": 4,
618
+ "sortText": "01_fn"
619
+ },
620
+ {
621
+ "label": "join",
622
+ "kind": 1,
623
+ "detail": "join()",
624
+ "documentation": {
625
+ "value": "Join array to string."
626
+ },
627
+ "insertText": "my $${1:str} = join(\"${2:,}\", @${3:array});",
628
+ "insertTextRules": 4,
629
+ "sortText": "01_fn"
630
+ },
631
+ {
632
+ "label": "split",
633
+ "kind": 1,
634
+ "detail": "split()",
635
+ "documentation": {
636
+ "value": "Split string to array."
637
+ },
638
+ "insertText": "my @${1:parts} = split(/${2:,}/, $${3:str});",
639
+ "insertTextRules": 4,
640
+ "sortText": "01_fn"
641
+ },
642
+ {
643
+ "label": "keys",
644
+ "kind": 1,
645
+ "detail": "keys()",
646
+ "documentation": {
647
+ "value": "Array/hash keys."
648
+ },
649
+ "insertText": "my @${1:k} = keys %${2:hash};",
650
+ "insertTextRules": 4,
651
+ "sortText": "01_fn"
652
+ },
653
+ {
654
+ "label": "values",
655
+ "kind": 1,
656
+ "detail": "values()",
657
+ "documentation": {
658
+ "value": "Hash values."
659
+ },
660
+ "insertText": "my @${1:v} = values %${2:hash};",
661
+ "insertTextRules": 4,
662
+ "sortText": "01_fn"
663
+ },
664
+ {
665
+ "label": "exists",
666
+ "kind": 1,
667
+ "detail": "exists",
668
+ "documentation": {
669
+ "value": "Check key exists."
670
+ },
671
+ "insertText": "if (exists $${1:hash}{${2:key}}) { ${3:} }",
672
+ "insertTextRules": 4,
673
+ "sortText": "01_fn"
674
+ },
675
+ {
676
+ "label": "delete",
677
+ "kind": 1,
678
+ "detail": "delete",
679
+ "documentation": {
680
+ "value": "Delete hash key."
681
+ },
682
+ "insertText": "delete $${1:hash}{${2:key}};",
683
+ "insertTextRules": 4,
684
+ "sortText": "01_fn"
685
+ },
686
+ {
687
+ "label": "defined",
688
+ "kind": 1,
689
+ "detail": "defined()",
690
+ "documentation": {
691
+ "value": "Check if defined."
692
+ },
693
+ "insertText": "if (defined $${1:var}) { ${2:} }",
694
+ "insertTextRules": 4,
695
+ "sortText": "01_fn"
696
+ },
697
+ {
698
+ "label": "ref",
699
+ "kind": 1,
700
+ "detail": "ref()",
701
+ "documentation": {
702
+ "value": "Get reference type."
703
+ },
704
+ "insertText": "my $${1:type} = ref($${2:ref});",
705
+ "insertTextRules": 4,
706
+ "sortText": "01_fn"
707
+ },
708
+ {
709
+ "label": "length",
710
+ "kind": 1,
711
+ "detail": "length()",
712
+ "documentation": {
713
+ "value": "String length."
714
+ },
715
+ "insertText": "my $${1:len} = length($${2:str});",
716
+ "insertTextRules": 4,
717
+ "sortText": "01_fn"
718
+ },
719
+ {
720
+ "label": "substr",
721
+ "kind": 1,
722
+ "detail": "substr()",
723
+ "documentation": {
724
+ "value": "Substring."
725
+ },
726
+ "insertText": "my $${1:sub} = substr($${2:str}, ${3:0}, ${4:5});",
727
+ "insertTextRules": 4,
728
+ "sortText": "01_fn"
729
+ },
730
+ {
731
+ "label": "index",
732
+ "kind": 1,
733
+ "detail": "index()",
734
+ "documentation": {
735
+ "value": "Find substring."
736
+ },
737
+ "insertText": "my $${1:pos} = index($${2:str}, \"${3:needle}\");",
738
+ "insertTextRules": 4,
739
+ "sortText": "01_fn"
740
+ },
741
+ {
742
+ "label": "sprintf",
743
+ "kind": 1,
744
+ "detail": "sprintf()",
745
+ "documentation": {
746
+ "value": "Format string."
747
+ },
748
+ "insertText": "my $${1:s} = sprintf(\"${2:%s=%d}\", ${3:$name}, ${4:$val});",
749
+ "insertTextRules": 4,
750
+ "sortText": "01_fn"
751
+ },
752
+ {
753
+ "label": "open",
754
+ "kind": 1,
755
+ "detail": "open()",
756
+ "documentation": {
757
+ "value": "Open file."
758
+ },
759
+ "insertText": "open(my $${1:fh}, \"${2:<}\", \"${3:file.txt}\") or die \"Cannot open: $!\";",
760
+ "insertTextRules": 4,
761
+ "sortText": "01_fn"
762
+ },
763
+ {
764
+ "label": "close",
765
+ "kind": 1,
766
+ "detail": "close()",
767
+ "documentation": {
768
+ "value": "Close filehandle."
769
+ },
770
+ "insertText": "close($${1:fh});",
771
+ "insertTextRules": 4,
772
+ "sortText": "01_fn"
773
+ },
774
+ {
775
+ "label": "$_",
776
+ "kind": 14,
777
+ "detail": "Default variable",
778
+ "documentation": {
779
+ "value": "Default variable (topic)."
780
+ },
781
+ "insertText": "$_",
782
+ "insertTextRules": 0,
783
+ "sortText": "02_svar"
784
+ },
785
+ {
786
+ "label": "@_",
787
+ "kind": 14,
788
+ "detail": "Argument list",
789
+ "documentation": {
790
+ "value": "Subroutine arguments."
791
+ },
792
+ "insertText": "@_",
793
+ "insertTextRules": 0,
794
+ "sortText": "02_svar"
795
+ },
796
+ {
797
+ "label": "$!",
798
+ "kind": 14,
799
+ "detail": "OS error",
800
+ "documentation": {
801
+ "value": "System error message/number."
802
+ },
803
+ "insertText": "$!",
804
+ "insertTextRules": 0,
805
+ "sortText": "02_svar"
806
+ },
807
+ {
808
+ "label": "$@",
809
+ "kind": 14,
810
+ "detail": "Eval error",
811
+ "documentation": {
812
+ "value": "Error from eval."
813
+ },
814
+ "insertText": "$@",
815
+ "insertTextRules": 0,
816
+ "sortText": "02_svar"
817
+ },
818
+ {
819
+ "label": "%ENV",
820
+ "kind": 14,
821
+ "detail": "Environment",
822
+ "documentation": {
823
+ "value": "Environment hash."
824
+ },
825
+ "insertText": "$ENV{${1:HOME}}",
826
+ "insertTextRules": 4,
827
+ "sortText": "02_svar"
828
+ },
829
+ {
830
+ "label": "$0",
831
+ "kind": 14,
832
+ "detail": "Program name",
833
+ "documentation": {
834
+ "value": "Current script name."
835
+ },
836
+ "insertText": "$0",
837
+ "insertTextRules": 0,
838
+ "sortText": "02_svar"
839
+ },
840
+ {
841
+ "label": "subroutine",
842
+ "kind": 28,
843
+ "detail": "Sub definition",
844
+ "documentation": {
845
+ "value": "Named subroutine."
846
+ },
847
+ "insertText": "sub ${1:name} {\n my (${2:$arg1}) = @_;\n ${3:# body}\n return ${4:$result};\n}",
848
+ "insertTextRules": 4,
849
+ "sortText": "04_snip"
850
+ },
851
+ {
852
+ "label": "open read",
853
+ "kind": 28,
854
+ "detail": "Read file",
855
+ "documentation": {
856
+ "value": "Open and read file."
857
+ },
858
+ "insertText": "open(my $fh, \"<\", \"${1:file.txt}\") or die \"Cannot open: $!\";\nwhile (my $line = <$fh>) {\n chomp $line;\n ${2:print \"$line\\n\";}\n}\nclose($fh);",
859
+ "insertTextRules": 4,
860
+ "sortText": "04_snip"
861
+ },
862
+ {
863
+ "label": "open write",
864
+ "kind": 28,
865
+ "detail": "Write file",
866
+ "documentation": {
867
+ "value": "Open and write file."
868
+ },
869
+ "insertText": "open(my $fh, \">\", \"${1:output.txt}\") or die \"Cannot open: $!\";\nprint $fh \"${2:content}\\n\";\nclose($fh);",
870
+ "insertTextRules": 4,
871
+ "sortText": "04_snip"
872
+ },
873
+ {
874
+ "label": "regex match",
875
+ "kind": 28,
876
+ "detail": "Regex match",
877
+ "documentation": {
878
+ "value": "Match regex."
879
+ },
880
+ "insertText": "if ($${1:str} =~ /${2:pattern}/) {\n ${3:print \"Matched: $1\\n\";}\n}",
881
+ "insertTextRules": 4,
882
+ "sortText": "04_snip"
883
+ },
884
+ {
885
+ "label": "regex replace",
886
+ "kind": 28,
887
+ "detail": "Regex replace",
888
+ "documentation": {
889
+ "value": "Substitution."
890
+ },
891
+ "insertText": "$${1:str} =~ s/${2:pattern}/${3:replacement}/g;",
892
+ "insertTextRules": 4,
893
+ "sortText": "04_snip"
894
+ },
895
+ {
896
+ "label": "hash iteration",
897
+ "kind": 28,
898
+ "detail": "Iterate hash",
899
+ "documentation": {
900
+ "value": "While each hash."
901
+ },
902
+ "insertText": "while (my ($${1:key}, $${2:val}) = each %${3:hash}) {\n ${4:print \"$${1:key} => $${2:val}\\n\";}\n}",
903
+ "insertTextRules": 4,
904
+ "sortText": "04_snip"
905
+ },
906
+ {
907
+ "label": "try-catch",
908
+ "kind": 28,
909
+ "detail": "Eval/die",
910
+ "documentation": {
911
+ "value": "Error handling with eval."
912
+ },
913
+ "insertText": "eval {\n ${1:# risky code}\n};\nif ($@) {\n ${2:warn \"Error: $@\";}\n}",
914
+ "insertTextRules": 4,
915
+ "sortText": "04_snip"
916
+ },
917
+ {
918
+ "label": "module",
919
+ "kind": 28,
920
+ "detail": "Package module",
921
+ "documentation": {
922
+ "value": "Module boilerplate."
923
+ },
924
+ "insertText": "package ${1:MyModule};\n\nuse strict;\nuse warnings;\nuse Exporter qw(import);\n\nour @EXPORT_OK = qw(${2:func1});\n\nsub ${2:func1} {\n my (${3:$arg}) = @_;\n ${4:# body}\n}\n\n1;",
925
+ "insertTextRules": 4,
926
+ "sortText": "05_tpl"
927
+ },
928
+ {
929
+ "label": "Getopt",
930
+ "kind": 28,
931
+ "detail": "Getopt::Long",
932
+ "documentation": {
933
+ "value": "Command-line option parsing."
934
+ },
935
+ "insertText": "use Getopt::Long;\n\nmy ($${1:verbose}, $${2:output});\nGetOptions(\n \"verbose|v\" => \\$${1:verbose},\n \"output|o=s\" => \\$${2:output},\n) or die \"Invalid options\\n\";",
936
+ "insertTextRules": 4,
937
+ "sortText": "05_mod"
938
+ },
939
+ {
940
+ "label": "JSON::PP",
941
+ "kind": 28,
942
+ "detail": "JSON encode/decode",
943
+ "documentation": {
944
+ "value": "JSON processing."
945
+ },
946
+ "insertText": "use JSON::PP;\nmy $${1:data} = decode_json($${2:json_str});\nmy $${3:json} = encode_json($${4:hashref});",
947
+ "insertTextRules": 4,
948
+ "sortText": "05_mod"
949
+ },
950
+ {
951
+ "label": "File::Find",
952
+ "kind": 28,
953
+ "detail": "File::Find",
954
+ "documentation": {
955
+ "value": "Find files recursively."
956
+ },
957
+ "insertText": "use File::Find;\nfind(sub {\n return unless -f;\n return unless /\\.${1:pm}$/;\n ${2:print \"$File::Find::name\\n\";}\n}, \"${3:.}\");",
958
+ "insertTextRules": 4,
959
+ "sortText": "05_mod"
960
+ }
961
+ ]
203
962
  }