Skip to content

Commit 44f5a8e

Browse files
committed
feat(extract_variable,vim): add extract variable for vim
1 parent 52f67bc commit 44f5a8e

File tree

5 files changed

+111
-1
lines changed

5 files changed

+111
-1
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
call refactoring_toolbox#adapters#vim#begin_script()
2+
3+
function refactoring_toolbox#extract_variable#adapters#vim_language#make()
4+
return s:self
5+
endfunction
6+
7+
let s:self = #{}
8+
9+
function s:self.makeVariableUsage(name)
10+
return 'l:'.a:name
11+
endfunction
12+
13+
function s:self.makeAssignation(name, value)
14+
return 'let l:'.a:name.' = '.a:value
15+
endfunction
16+
17+
call refactoring_toolbox#adapters#vim#end_script()

autoload/refactoring_toolbox/extract_variable/main.vim

+9
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,13 @@ function refactoring_toolbox#extract_variable#main#extractVariableForTypescript(
2727
\ )
2828
endfunction
2929

30+
function refactoring_toolbox#extract_variable#main#extractVariableForVim() range
31+
call refactoring_toolbox#usage#increment('VimExtractVariable')
32+
33+
call refactoring_toolbox#extract_variable#variable_extractor#execute(
34+
\ refactoring_toolbox#adapters#input#make(),
35+
\ refactoring_toolbox#extract_variable#adapters#vim_language#make(),
36+
\ )
37+
endfunction
38+
3039
call refactoring_toolbox#adapters#vim#end_script()

bin/test

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,4 @@ installVader ()
2828

2929
installVader
3030

31-
vim -esNu tests/fixtures/vimrc -c 'Vader! -x '"${1-tests/**}"
31+
vim -esNu tests/fixtures/vimrc -c 'Vader! -x -q '"${1-tests/**}"

ftplugin/vim/refactoring-toolbox.vim

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
try
2+
call refactoring_toolbox#adapters#vim#begin_ftplugin('refactoring_toolbox')
3+
catch /plugin_loaded/
4+
finish
5+
endtry
6+
7+
function s:registerMappings()
8+
if s:mappingIsEnabled()
9+
call s:addBufferVisualMapping(
10+
\ '<LocalLeader>ev',
11+
\ '<Plug>refactoring_toolbox_vim_ExtractVariable',
12+
\ 'refactoring_toolbox#extract_variable#main#extractVariableForVim()'
13+
\ )
14+
endif
15+
endfunction
16+
17+
function s:mappingIsEnabled()
18+
return !exists('no_plugin_maps') && !exists('no_typescript_maps')
19+
endfunction
20+
21+
function s:addBufferNormalMapping(keys, name, executeFunction)
22+
if !hasmapto(a:name, 'n')
23+
call s:addUniqueBufferNormalMapping(a:keys, a:name)
24+
endif
25+
26+
call s:addUniqueScriptAndBufferNormalMapping(a:name, ':call '.a:executeFunction.'<Enter>')
27+
endfunction
28+
29+
function s:addUniqueBufferNormalMapping(left, right)
30+
execute 'nmap <buffer> <unique> '.a:left.' '.a:right
31+
32+
call refactoring_toolbox#adapters#vim#appendFileTypeUndo('nunmap <buffer> '.a:left)
33+
endfunction
34+
35+
function s:addUniqueScriptAndBufferNormalMapping(left, right)
36+
execute 'nnoremap <script> <buffer> <unique> '.a:left.' '.a:right
37+
38+
call refactoring_toolbox#adapters#vim#appendFileTypeUndo('nunmap <script> <buffer> '.a:left)
39+
endfunction
40+
41+
function s:addBufferVisualMapping(keys, name, executeFunction)
42+
if !hasmapto(a:name, 'v')
43+
call s:addUniqueBufferVisualMapping(a:keys, a:name)
44+
endif
45+
46+
call s:addUniqueScriptAndBufferVisualMapping(a:name, ':call '.a:executeFunction.'<Enter>')
47+
endfunction
48+
49+
function s:addUniqueBufferVisualMapping(left, right)
50+
execute 'vmap <buffer> <unique> '.a:left.' '.a:right
51+
52+
call refactoring_toolbox#adapters#vim#appendFileTypeUndo('vunmap <buffer> '.a:left)
53+
endfunction
54+
55+
function s:addUniqueScriptAndBufferVisualMapping(left, right)
56+
execute 'vnoremap <script> <buffer> <unique> '.a:left.' '.a:right
57+
58+
call refactoring_toolbox#adapters#vim#appendFileTypeUndo('vunmap <script> <buffer> '.a:left)
59+
endfunction
60+
61+
call s:registerMappings()
62+
63+
call refactoring_toolbox#adapters#vim#end_ftplugin()

tests/extract_variable/vim.vader

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
Given vim:
2+
3+
function s:someFunction()
4+
5+
return 42
6+
endfunction
7+
8+
Do:
9+
/42\<Enter>
10+
viw
11+
;ev
12+
someVariable\<Enter>
13+
14+
Expect:
15+
16+
function s:someFunction()
17+
18+
let l:someVariable = 42
19+
20+
return l:someVariable
21+
endfunction

0 commit comments

Comments
 (0)