From c9e490e042fd99b5a4c480029ab2680f80bc5bf0 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Fri, 21 Jan 2022 17:13:44 +0100 Subject: [PATCH 1/3] Escape file name for file to edit Use `fnameescape` before trying to edit a file when you open it through a link. --- lua/test/action_spec.lua | 7 ++++++- lua/zettelkasten/action.lua | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/lua/test/action_spec.lua b/lua/test/action_spec.lua index d720f4c..240f27d 100644 --- a/lua/test/action_spec.lua +++ b/lua/test/action_spec.lua @@ -1,7 +1,12 @@ local action = require 'zettelkasten.action' before_each(function() - _G.vim = {g = {}, b = {}, loop = {fs_scandir = function() end}} + _G.vim = { + g = {}, + b = {}, + fn = {fnameescape = function(input) return input end}, + loop = {fs_scandir = function() end} + } end) after_each(function() _G.vim = nil end) diff --git a/lua/zettelkasten/action.lua b/lua/zettelkasten/action.lua index 2eff445..86868a1 100644 --- a/lua/zettelkasten/action.lua +++ b/lua/zettelkasten/action.lua @@ -11,7 +11,7 @@ function A.open(link) if not link or not link.ref then return end local fname = f.get_zettel_by_anchor(link.anchor) or f.get_zettel_by_ref(link.ref) or link.ref - vim.api.nvim_command(string.format("edit %s", fname)) + vim.api.nvim_command(string.format("edit %s", vim.fn.fnameescape(fname))) end -- Gets the input at the current buffer cursor and opens it From 6b65c5085fdc06006c729647936b28f7115a808b Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Fri, 21 Jan 2022 17:15:32 +0100 Subject: [PATCH 2/3] Fix small test errors --- lua/test/action_spec.lua | 2 +- lua/test/files_spec.lua | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lua/test/action_spec.lua b/lua/test/action_spec.lua index 240f27d..0eb32a2 100644 --- a/lua/test/action_spec.lua +++ b/lua/test/action_spec.lua @@ -107,7 +107,7 @@ end) describe("create_link", function() it("substitutes the argument text with a link", function() - pending() + pending("not implemented") vim.fn = {getpos = function() return {1, 2, 3} end} vim.api = { nvim_buf_get_lines = function() return {"hi", 1, 2} end, diff --git a/lua/test/files_spec.lua b/lua/test/files_spec.lua index 0e23b7d..c5874a6 100644 --- a/lua/test/files_spec.lua +++ b/lua/test/files_spec.lua @@ -19,7 +19,7 @@ local function simple_api_mock(files) end describe("get_anchors_and_paths", function() - before_each(function() get_api_mock = simple_api_mock end) + before_each(function() Get_api_mock = simple_api_mock end) after_each(function() _G.vim = nil end) it("should return anchor-keyed table pointing to filename of zettel", @@ -27,7 +27,7 @@ describe("get_anchors_and_paths", function() local file_list = {} file_list["someDir/1910291645 this-is-a-testfile.md"] = "1910291645 this-is-a-testfile.md" - _G.vim = get_api_mock(file_list) + _G.vim = Get_api_mock(file_list) local expected = { ["1910291645"] = "someDir/1910291645 this-is-a-testfile.md" @@ -43,7 +43,7 @@ describe("get_anchors_and_paths", function() ["1910271456 this-is-wrong-extension.txt"] = "1910271456 this-is-wrong-extension.txt", ["1812 this-is-ignored.md"] = "1812 this-is-ignored.md" } - _G.vim = get_api_mock(file_list) + _G.vim = Get_api_mock(file_list) local expected = { ["1910291645"] = "someDir/1910291645 this-is-a-testfile.md", @@ -57,7 +57,7 @@ describe("get_anchors_and_paths", function() ["mydirectory/1910291645 myfile.wiki"] = "1910291645 myfile.wiki", ["mydirectory/2345678901 another.wiki"] = "2345678901 another.wiki" } - _G.vim = get_api_mock(file_list) + _G.vim = Get_api_mock(file_list) vim.g['zettel_extension'] = '.wiki' local expected = { @@ -71,7 +71,7 @@ describe("get_anchors_and_paths", function() end) describe("get_all_files", function() - it("should recurse into directories if recursive argument passed in ", + it("should recurse into directories if recursive argument passed in", function() local files = { {"1910271456 testfile.md", "file"}, @@ -91,7 +91,7 @@ describe("get_all_files", function() end, fs_scandir_next = function() if #files == 0 then return nil end - local fname, ftype = unpack(table.remove(files)) + local fname, ftype = table.unpack(table.remove(files)) return fname, ftype end }) From da4688e583dc53cd6ba017fc7a9d37ead57a9697 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Fri, 21 Jan 2022 17:55:42 +0100 Subject: [PATCH 3/3] Add integration pipeline Added woodpecker pipeline for linting and unit testing. --- .luacheckrc | 3 +++ .woodpecker.yml | 12 ++++++++++++ 2 files changed, 15 insertions(+) create mode 100644 .luacheckrc create mode 100644 .woodpecker.yml diff --git a/.luacheckrc b/.luacheckrc new file mode 100644 index 0000000..c8a3f4e --- /dev/null +++ b/.luacheckrc @@ -0,0 +1,3 @@ +globals = { + "vim", +} diff --git a/.woodpecker.yml b/.woodpecker.yml new file mode 100644 index 0000000..2f9a185 --- /dev/null +++ b/.woodpecker.yml @@ -0,0 +1,12 @@ +# branches: main + +pipeline: + code_lint: + image: pipelinecomponents/luacheck + commands: + - luacheck lua/zettelkasten + + unit_tests: + image: imega/busted + commands: + - busted test -C lua