/
/
/
1
2local function switch_case()
3 local line, col = unpack(vim.api.nvim_win_get_cursor(0))
4 local word = vim.fn.expand('<cword>')
5 local word_start = vim.fn.matchstrpos(vim.fn.getline('.'), '\\k*\\%' .. (col+1) .. 'c\\k*')[2]
6
7 -- Detect camelCase
8 if word:find('[a-z][A-Z]') then
9 -- Convert camelCase to snake_case
10 local snake_case_word = word:gsub('([a-z])([A-Z])', '%1_%2'):lower()
11 vim.api.nvim_buf_set_text(0, line - 1, word_start, line - 1, word_start + #word, {snake_case_word})
12 -- Detect snake_case
13 elseif word:find('_[a-z]') then
14 -- Convert snake_case to camelCase
15 local camel_case_word = word:gsub('(_)([a-z])', function(_, l) return l:upper() end)
16 vim.api.nvim_buf_set_text(0, line - 1, word_start, line - 1, word_start + #word, {camel_case_word})
17 else
18 print("Not a snake_case or camelCase word")
19 end
20end
21
22return { switch_case = switch_case }
23