linked_editing_range_spec.lua (2980B)
1 local t = require('test.testutil') 2 local n = require('test.functional.testnvim')() 3 local t_lsp = require('test.functional.plugin.lsp.testutil') 4 5 local eq = t.eq 6 local exec_lua = n.exec_lua 7 local insert = n.insert 8 local feed = n.feed 9 10 local clear_notrace = t_lsp.clear_notrace 11 local create_server_definition = t_lsp.create_server_definition 12 13 describe('vim.lsp.linked_editing_range', function() 14 before_each(function() 15 clear_notrace() 16 17 insert([[ 18 hello 19 hello 20 hello]]) 21 22 exec_lua(create_server_definition) 23 exec_lua(function() 24 vim.lsp.linked_editing_range.enable() 25 26 _G.server = _G._create_server({ 27 capabilities = { 28 linkedEditingRangeProvider = true, 29 }, 30 handlers = { 31 ['textDocument/linkedEditingRange'] = function(_, _, callback) 32 callback(nil, { 33 ranges = { 34 { start = { line = 0, character = 0 }, ['end'] = { line = 0, character = 5 } }, 35 { start = { line = 1, character = 0 }, ['end'] = { line = 1, character = 5 } }, 36 { start = { line = 2, character = 0 }, ['end'] = { line = 2, character = 5 } }, 37 }, 38 }) 39 end, 40 }, 41 }) 42 43 _G.server_id = vim.lsp.start({ name = 'dummy', cmd = _G.server.cmd }) 44 end) 45 end) 46 47 it('initiates linked editing', function() 48 exec_lua(function() 49 local win = vim.api.nvim_get_current_win() 50 vim.api.nvim_win_set_cursor(win, { 1, 0 }) 51 end) 52 -- Deletion 53 feed('ldw') 54 eq( 55 { 56 'h', 57 'h', 58 'h', 59 }, 60 exec_lua(function() 61 return vim.api.nvim_buf_get_lines(0, 0, -1, false) 62 end) 63 ) 64 -- Insertion 65 feed('Apt<Esc>') 66 eq( 67 { 68 'hpt', 69 'hpt', 70 'hpt', 71 }, 72 exec_lua(function() 73 return vim.api.nvim_buf_get_lines(0, 0, -1, false) 74 end) 75 ) 76 -- Undo/redo 77 feed('0xx') 78 eq( 79 { 80 't', 81 't', 82 't', 83 }, 84 exec_lua(function() 85 return vim.api.nvim_buf_get_lines(0, 0, -1, false) 86 end) 87 ) 88 feed('u') 89 eq( 90 { 91 'pt', 92 'pt', 93 'pt', 94 }, 95 exec_lua(function() 96 return vim.api.nvim_buf_get_lines(0, 0, -1, false) 97 end) 98 ) 99 feed('u') 100 eq( 101 { 102 'hpt', 103 'hpt', 104 'hpt', 105 }, 106 exec_lua(function() 107 return vim.api.nvim_buf_get_lines(0, 0, -1, false) 108 end) 109 ) 110 feed('<C-r><C-r>') 111 eq( 112 { 113 't', 114 't', 115 't', 116 }, 117 exec_lua(function() 118 return vim.api.nvim_buf_get_lines(0, 0, -1, false) 119 end) 120 ) 121 -- Disabling 122 exec_lua(function() 123 vim.lsp.linked_editing_range.enable(false, { client_id = _G.server_id }) 124 end) 125 feed('Ipp<Esc>') 126 eq( 127 { 128 'ppt', 129 't', 130 't', 131 }, 132 exec_lua(function() 133 return vim.api.nvim_buf_get_lines(0, 0, -1, false) 134 end) 135 ) 136 end) 137 end)