@@ -34,6 +34,78 @@ fill hole" code action, *et voila!*
34
34
[ hls ] : https://github.com/haskell/haskell-language-server/releases
35
35
36
36
37
+ ## Editor Configuration
38
+
39
+ ### Enabling Jump to Hole
40
+
41
+ Set the ` haskell.plugin.tactics.config.hole_severity ` config option to ` 4 ` , or
42
+ ` hint ` if your editor uses a GUI for its configuration. This has the potential
43
+ to negatively impact performance --- please holler if you notice any appreciable
44
+ slowdown by enabling this option.
45
+
46
+
47
+ ### coc.nvim
48
+
49
+ The following vimscript maps Wingman code-actions to your leader key:
50
+
51
+ ``` viml
52
+ " use [h and ]h to navigate between holes
53
+ nnoremap <silent> [h :<C-U>call CocActionAsync('diagnosticPrevious', 'hint')<CR>
54
+ nnoremap <silent> ]h :<C-U>call <SID>JumpToNextHole()<CR>
55
+
56
+ " <leader>d to perform a pattern match, <leader>n to fill a hole
57
+ nnoremap <silent> <leader>d :<C-u>set operatorfunc=<SID>WingmanDestruct<CR>g@l
58
+ nnoremap <silent> <leader>n :<C-u>set operatorfunc=<SID>WingmanFillHole<CR>g@l
59
+
60
+ " beta only
61
+ nnoremap <silent> <leader>r :<C-u>set operatorfunc=<SID>WingmanRefine<CR>g@l
62
+ nnoremap <silent> <leader>c :<C-u>set operatorfunc=<SID>WingmanUseCtor<CR>g@l
63
+ nnoremap <silent> <leader>a :<C-u>set operatorfunc=<SID>WingmanDestructAll<CR>g@l
64
+
65
+
66
+ function! s:JumpToNextHole()
67
+ call CocActionAsync('diagnosticNext', 'hint')
68
+ endfunction
69
+
70
+ function! s:GotoNextHole()
71
+ " wait for the hole diagnostics to reload
72
+ sleep 500m
73
+ " and then jump to the next hole
74
+ normal 0
75
+ call <SID>JumpToNextHole()
76
+ endfunction
77
+
78
+ function! s:WingmanRefine(type)
79
+ call CocAction('codeAction', a:type, ['refactor.wingman.refine'])
80
+ call <SID>GotoNextHole()
81
+ endfunction
82
+
83
+ function! s:WingmanDestruct(type)
84
+ call CocAction('codeAction', a:type, ['refactor.wingman.caseSplit'])
85
+ call <SID>GotoNextHole()
86
+ endfunction
87
+
88
+ function! s:WingmanDestructAll(type)
89
+ call CocAction('codeAction', a:type, ['refactor.wingman.splitFuncArgs'])
90
+ call <SID>GotoNextHole()
91
+ endfunction
92
+
93
+ function! s:WingmanFillHole(type)
94
+ call CocAction('codeAction', a:type, ['refactor.wingman.fillHole'])
95
+ call <SID>GotoNextHole()
96
+ endfunction
97
+
98
+ function! s:WingmanUseCtor(type)
99
+ call CocAction('codeAction', a:type, ['refactor.wingman.useConstructor'])
100
+ call <SID>GotoNextHole()
101
+ endfunction
102
+ ```
103
+
104
+ ### Other Editors
105
+
106
+ Please open a PR if you have a working configuration!
107
+
108
+
37
109
## Features
38
110
39
111
* [ Type-directed code synthesis] [ auto ] , including pattern matching and recursion
0 commit comments