From 365bebd79aac81216f01c61fedf45f5acaffb71c Mon Sep 17 00:00:00 2001 From: L3MON4D3 Date: Fri, 28 Jun 2024 22:07:17 +0200 Subject: [PATCH] fix(loaders): trim whitespace around comma and at start/end of "scope". Closes #1199. Apparently this is supported by vscode, and its' no biggie, so let's just do it too. --- lua/luasnip/loaders/from_vscode.lua | 2 +- lua/luasnip/loaders/util.lua | 6 ++++++ tests/unit/loader_spec.lua | 17 +++++++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 tests/unit/loader_spec.lua diff --git a/lua/luasnip/loaders/from_vscode.lua b/lua/luasnip/loaders/from_vscode.lua index f8c3f7b..7cc8c9c 100644 --- a/lua/luasnip/loaders/from_vscode.lua +++ b/lua/luasnip/loaders/from_vscode.lua @@ -102,7 +102,7 @@ local function get_file_snippets(file) -- vscode documents `,`, but `.` also works. -- an entry `false` in this list will cause a `ft=nil` for the snippet. - local filetypes = parts.scope and vim.split(parts.scope, "[.,]") + local filetypes = parts.scope and util.scopestring_to_filetypes(parts.scope) or { false } local contexts = {} diff --git a/lua/luasnip/loaders/util.lua b/lua/luasnip/loaders/util.lua index 59333af..c2686e0 100644 --- a/lua/luasnip/loaders/util.lua +++ b/lua/luasnip/loaders/util.lua @@ -281,6 +281,11 @@ local function normalize_opts(opts) } end +local function scopestring_to_filetypes(str) + local str_trimmed = str:gsub("^%s+", ""):gsub("%s+$", "") + return vim.split(str_trimmed, "%s*[.,]%s*") +end + return { filetypelist_to_set = filetypelist_to_set, split_lines = split_lines, @@ -296,4 +301,5 @@ return { get_load_fts = get_load_fts, add_file_snippets = add_file_snippets, normalize_opts = normalize_opts, + scopestring_to_filetypes = scopestring_to_filetypes } diff --git a/tests/unit/loader_spec.lua b/tests/unit/loader_spec.lua new file mode 100644 index 0000000..e085bc6 --- /dev/null +++ b/tests/unit/loader_spec.lua @@ -0,0 +1,17 @@ +local ls_helpers = require("helpers") +local exec_lua, _, exec = + ls_helpers.exec_lua, ls_helpers.feed, ls_helpers.exec + +describe("luasnip.loaders.util:", function() + ls_helpers.clear() + exec("set rtp+=" .. os.getenv("LUASNIP_SOURCE")) + + it("Correctly splits scopes with spaces.", function() + local res = exec_lua[[return require("luasnip.loaders.util").scopestring_to_filetypes("javascript, typescript")]] + assert.are.same({"javascript", "typescript"}, res) + local res = exec_lua[[return require("luasnip.loaders.util").scopestring_to_filetypes(" javascript, typescript")]] + assert.are.same({"javascript", "typescript"}, res) + local res = exec_lua[[return require("luasnip.loaders.util").scopestring_to_filetypes("javascript , typescript ")]] + assert.are.same({"javascript", "typescript"}, res) + end) +end)