diff --git a/lua/ivy/controller.lua b/lua/ivy/controller.lua index c0194eb..0af4afa 100644 --- a/lua/ivy/controller.lua +++ b/lua/ivy/controller.lua @@ -34,7 +34,12 @@ controller.update = function(text) vim.schedule(function() window.set_items(controller.items(text)) vim.cmd "syntax clear IvyMatch" - vim.cmd("syntax match IvyMatch '[(" .. text .. ")]'") + if #text > 0 then + -- Escape characters so they do not throw an error when vim tries to use + -- the "text" as a regex + local escaped_text = string.gsub(text, "([-/])", "\\%1") + vim.cmd("syntax match IvyMatch '[" .. escaped_text .. "]'") + end end) end diff --git a/lua/ivy/controller_test.lua b/lua/ivy/controller_test.lua new file mode 100644 index 0000000..9865142 --- /dev/null +++ b/lua/ivy/controller_test.lua @@ -0,0 +1,51 @@ +local vim_mock = require "ivy.vim_mock" +local window = require "ivy.window" +local controller = require "ivy.controller" + +-- The number of the mock buffer where all the test completions gets put +local buffer_number = 10 + +before_each(function() + vim_mock.reset() + window.initialize() +end) + +after_each(function() + controller.destroy() +end) + +it("will run", function(t) + controller.run("Testing", function() + return { { content = "Some content" } } + end, function() + return {} + end) + + local lines = vim_mock.get_lines() + local completion_lines = lines[buffer_number] + + t.assert_equal(#completion_lines, 1) + t.assert_equal(completion_lines[1], "Some content") +end) + +it("will not try and highlight the buffer if there is nothing to highlight", function(t) + controller.items = function() + return { { content = "Hello" } } + end + + controller.update "" + local commands = vim_mock.get_commands() + t.assert_equal(#commands, 1) +end) + +it("will escape a - when passing it to be highlighted", function(t) + controller.items = function() + return { { content = "Hello" } } + end + + controller.update "some-file" + local commands = vim_mock.get_commands() + local syntax_command = commands[2] + + t.assert_equal("syntax match IvyMatch '[some\\-file]'", syntax_command) +end)