-
-
Notifications
You must be signed in to change notification settings - Fork 82
Expand file tree
/
Copy pathcommand.lua
More file actions
53 lines (39 loc) · 1.07 KB
/
command.lua
File metadata and controls
53 lines (39 loc) · 1.07 KB
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
local M = {}
---Converts a path array to command name
---@param path string[]
---@return string
function M.path_to_command_name(path)
local name = 'Java'
for _, word in ipairs(path) do
local sub_words = vim.split(word, '_')
local changed_word = ''
for _, sub_word in ipairs(sub_words) do
local first_char = sub_word:sub(1, 1):upper()
local rest = sub_word:sub(2)
changed_word = changed_word .. first_char .. rest
end
name = name .. changed_word
end
return name
end
---Registers an API by creating a user command and adding to module table
---@param module table
---@param path string[]
---@param command fun()
---@param opts vim.api.keyset.user_command
function M.register_api(module, path, command, opts)
local name = M.path_to_command_name(path)
vim.api.nvim_create_user_command(name, command, opts or {})
local last_index = #path
local func_name = path[last_index]
table.remove(path, last_index)
local node = module
for _, v in ipairs(path) do
if not node[v] then
node[v] = {}
end
node = node[v]
end
node[func_name] = command
end
return M