Skip to content

Commit

Permalink
Add keybindings and jump to hole to the README (#1712)
Browse files Browse the repository at this point in the history
  • Loading branch information
isovector committed Apr 12, 2021
1 parent 0227133 commit dfc3e2b
Showing 1 changed file with 72 additions and 0 deletions.
72 changes: 72 additions & 0 deletions plugins/hls-tactics-plugin/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,78 @@ fill hole" code action, *et voila!*
[hls]: https://github.com/haskell/haskell-language-server/releases


## Editor Configuration

### Enabling Jump to Hole

Set the `haskell.plugin.tactics.config.hole_severity` config option to `4`, or
`hint` if your editor uses a GUI for its configuration. This has the potential
to negatively impact performance --- please holler if you notice any appreciable
slowdown by enabling this option.


### coc.nvim

The following vimscript maps Wingman code-actions to your leader key:

```viml
" use [h and ]h to navigate between holes
nnoremap <silent> [h :<C-U>call CocActionAsync('diagnosticPrevious', 'hint')<CR>
nnoremap <silent> ]h :<C-U>call <SID>JumpToNextHole()<CR>
" <leader>d to perform a pattern match, <leader>n to fill a hole
nnoremap <silent> <leader>d :<C-u>set operatorfunc=<SID>WingmanDestruct<CR>g@l
nnoremap <silent> <leader>n :<C-u>set operatorfunc=<SID>WingmanFillHole<CR>g@l
" beta only
nnoremap <silent> <leader>r :<C-u>set operatorfunc=<SID>WingmanRefine<CR>g@l
nnoremap <silent> <leader>c :<C-u>set operatorfunc=<SID>WingmanUseCtor<CR>g@l
nnoremap <silent> <leader>a :<C-u>set operatorfunc=<SID>WingmanDestructAll<CR>g@l
function! s:JumpToNextHole()
call CocActionAsync('diagnosticNext', 'hint')
endfunction
function! s:GotoNextHole()
" wait for the hole diagnostics to reload
sleep 500m
" and then jump to the next hole
normal 0
call <SID>JumpToNextHole()
endfunction
function! s:WingmanRefine(type)
call CocAction('codeAction', a:type, ['refactor.wingman.refine'])
call <SID>GotoNextHole()
endfunction
function! s:WingmanDestruct(type)
call CocAction('codeAction', a:type, ['refactor.wingman.caseSplit'])
call <SID>GotoNextHole()
endfunction
function! s:WingmanDestructAll(type)
call CocAction('codeAction', a:type, ['refactor.wingman.splitFuncArgs'])
call <SID>GotoNextHole()
endfunction
function! s:WingmanFillHole(type)
call CocAction('codeAction', a:type, ['refactor.wingman.fillHole'])
call <SID>GotoNextHole()
endfunction
function! s:WingmanUseCtor(type)
call CocAction('codeAction', a:type, ['refactor.wingman.useConstructor'])
call <SID>GotoNextHole()
endfunction
```

### Other Editors

Please open a PR if you have a working configuration!


## Features

* [Type-directed code synthesis][auto], including pattern matching and recursion
Expand Down

0 comments on commit dfc3e2b

Please sign in to comment.