diff --git a/lua/tabnine/binary.lua b/lua/tabnine/binary.lua index b8c7662..fa77619 100644 --- a/lua/tabnine/binary.lua +++ b/lua/tabnine/binary.lua @@ -8,7 +8,7 @@ local TabnineBinary = {} local config = require("tabnine.config") local api_version = "4.4.223" -local binaries_path = utils.script_path() .. "/binaries" +local binaries_path = utils.module_dir() .. "/binaries" local function arch_and_platform() local os_uname = uv.os_uname() diff --git a/lua/tabnine/chat/binary.lua b/lua/tabnine/chat/binary.lua index 259d1af..75d5a1f 100644 --- a/lua/tabnine/chat/binary.lua +++ b/lua/tabnine/chat/binary.lua @@ -13,7 +13,7 @@ local function binary_name() end end -local binary_path = utils.script_path() .. "/../chat/target/release/" .. binary_name() +local binary_path = utils.module_dir() .. "/chat/target/release/" .. binary_name() function ChatBinary:available() return vim.fn.executable(binary_path) == 1 diff --git a/lua/tabnine/chat/init.lua b/lua/tabnine/chat/init.lua index 261e9d8..d8e8c14 100644 --- a/lua/tabnine/chat/init.lua +++ b/lua/tabnine/chat/init.lua @@ -9,8 +9,8 @@ local get_symbols_request = nil local M = { enabled = false } -local CHAT_STATE_FILE = utils.script_path() .. "/../chat_state.json" -local CHAT_SETTINGS_FILE = utils.script_path() .. "/../chat_settings.json" +local CHAT_STATE_FILE = utils.module_dir() .. "/chat_state.json" +local CHAT_SETTINGS_FILE = utils.module_dir() .. "/chat_settings.json" local chat_state = nil local chat_settings = nil diff --git a/lua/tabnine/status.lua b/lua/tabnine/status.lua index 513f651..93f0333 100644 --- a/lua/tabnine/status.lua +++ b/lua/tabnine/status.lua @@ -3,7 +3,7 @@ local fn = vim.fn local utils = require("tabnine.utils") local M = {} -local DISABLED_FILE = utils.script_path() .. "/.disabled" +local DISABLED_FILE = utils.module_dir() .. "/.disabled" local config = require("tabnine.config") local state = require("tabnine.state") local tabnine_binary = require("tabnine.binary") diff --git a/lua/tabnine/utils.lua b/lua/tabnine/utils.lua index 3acd5a2..929b4e3 100644 --- a/lua/tabnine/utils.lua +++ b/lua/tabnine/utils.lua @@ -37,9 +37,18 @@ function M.subset(tbl, from, to) return { unpack(tbl, from, to) } end -function M.script_path() +---returns the directory of the running script +---@return string +function M.script_dir() local str = debug.getinfo(2, "S").source:sub(2) - return str:match("(.*/)") .. "../.." + return str:match("(.*/)") or "./" +end + +---returns the directory of the root of the module +---@return string +function M.module_dir() + -- HACK: This only works if this file is not moved! + return M.script_dir() .. "../.." end function M.prequire(...) @@ -111,14 +120,17 @@ function M.set(array) return uniqueValues end -function M.select_range(range) +---Selects a given range of text +---@param range table +---@param selection_mode? 'charwise'|'linewise'|'blockwise'|'v'|'V'|'' +function M.select_range(range, selection_mode) local start_row, start_col, end_row, end_col = range[1][1], range[1][2], range[2][1], range[2][2] local v_table = { charwise = "v", linewise = "V", blockwise = "" } selection_mode = selection_mode or "charwise" -- Normalise selection_mode - if vim.tbl_contains(vim.tbl_keys(v_table), selection_mode) then selection_mode = v_table[selection_mode] end + selection_mode = v_table[selection_mode] or selection_mode -- enter visual mode if normal or operator-pending (no) mode -- Why? According to https://learnvimscriptthehardway.stevelosh.com/chapters/15.html