mirror of
https://codeberg.org/FelipeLema/cmp-async-path
synced 2025-05-10 19:58:38 +00:00
feat: support windows path (#8)
addresses #6 Reviewed-on: https://codeberg.org/FelipeLema/cmp-async-path/pulls/8 Co-authored-by: fcying <fcyingmk2@gmail.com> Co-committed-by: fcying <fcyingmk2@gmail.com>
This commit is contained in:
parent
e3206e521c
commit
cebd760b34
@ -1,8 +1,18 @@
|
|||||||
local cmp = require 'cmp'
|
local cmp = require 'cmp'
|
||||||
|
local IS_WIN = vim.uv.os_uname().sysname == 'Windows_NT'
|
||||||
local NAME_REGEX = '\\%([^/\\\\:\\*?<>\'"`\\|]\\)'
|
local NAME_REGEX = '\\%([^/\\\\:\\*?<>\'"`\\|]\\)'
|
||||||
local PATH_REGEX = assert(vim.regex(
|
local PATH_REGEX
|
||||||
([[\%(\%(/PAT*[^/\\\\:\\*?<>\'"`\\| .~]\)\|\%(/\.\.\)\)*/\zePAT*$]]):gsub('PAT',
|
local PATH_SEPARATOR
|
||||||
|
|
||||||
|
if IS_WIN then
|
||||||
|
PATH_REGEX = assert(vim.regex(([[\%(\%([/\\]PAT*[^/\\\\:\\*?<>\'"`\\| .~]\)\|\%(/\.\.\)\)*[/\\]\zePAT*$]]):gsub('PAT',
|
||||||
NAME_REGEX)))
|
NAME_REGEX)))
|
||||||
|
PATH_SEPARATOR = '[/\\]'
|
||||||
|
else
|
||||||
|
PATH_REGEX = assert(vim.regex(([[\%(\%(/PAT*[^/\\\\:\\*?<>\'"`\\| .~]\)\|\%(/\.\.\)\)*/\zePAT*$]]):gsub('PAT',
|
||||||
|
NAME_REGEX)))
|
||||||
|
PATH_SEPARATOR = '/'
|
||||||
|
end
|
||||||
|
|
||||||
local source = {}
|
local source = {}
|
||||||
|
|
||||||
@ -26,7 +36,13 @@ local defaults = {
|
|||||||
|
|
||||||
source.new = function() return setmetatable({}, {__index = source}) end
|
source.new = function() return setmetatable({}, {__index = source}) end
|
||||||
|
|
||||||
source.get_trigger_characters = function() return {'/', '.'} end
|
source.get_trigger_characters = function()
|
||||||
|
if IS_WIN then
|
||||||
|
return {'/', '.', '\\'}
|
||||||
|
else
|
||||||
|
return {'/', '.'}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
source.get_keyword_pattern = function(_, _) return NAME_REGEX .. '*' end
|
source.get_keyword_pattern = function(_, _) return NAME_REGEX .. '*' end
|
||||||
|
|
||||||
@ -160,22 +176,28 @@ function source:_dirname(params, option)
|
|||||||
if vim.api.nvim_get_mode().mode == 'c' then
|
if vim.api.nvim_get_mode().mode == 'c' then
|
||||||
buf_dirname = vim.fn.getcwd()
|
buf_dirname = vim.fn.getcwd()
|
||||||
end
|
end
|
||||||
if prefix:match('%.%./$') then
|
if prefix:match('%.%.' .. PATH_SEPARATOR .. '$') then
|
||||||
return vim.fn.resolve(buf_dirname .. '/../' .. dirname)
|
return vim.fn.resolve(buf_dirname .. '/../' .. dirname)
|
||||||
end
|
end
|
||||||
if (prefix:match('%./$') or prefix:match('"$') or prefix:match('\'$')) then
|
if (prefix:match('%.' .. PATH_SEPARATOR .. '$') or prefix:match('"$') or prefix:match('\'$')) then
|
||||||
return vim.fn.resolve(buf_dirname .. '/' .. dirname)
|
return vim.fn.resolve(buf_dirname .. '/' .. dirname)
|
||||||
end
|
end
|
||||||
if prefix:match('~/$') then
|
if prefix:match('~' .. PATH_SEPARATOR .. '$') then
|
||||||
return vim.fn.resolve(vim.fn.expand('~') .. '/' .. dirname)
|
return vim.fn.resolve(vim.fn.expand('~') .. '/' .. dirname)
|
||||||
end
|
end
|
||||||
local env_var_name = prefix:match('%$([%a_]+)/$')
|
local env_var_name = prefix:match('%$([%a_]+)' .. PATH_SEPARATOR .. '$')
|
||||||
if env_var_name then
|
if env_var_name then
|
||||||
local env_var_value = vim.fn.getenv(env_var_name)
|
local env_var_value = vim.fn.getenv(env_var_name)
|
||||||
if env_var_value ~= vim.NIL then
|
if env_var_value ~= vim.NIL then
|
||||||
return vim.fn.resolve(env_var_value .. '/' .. dirname)
|
return vim.fn.resolve(env_var_value .. '/' .. dirname)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
if IS_WIN then
|
||||||
|
local driver = prefix:match('(%a:)[/\\]$')
|
||||||
|
if driver then
|
||||||
|
return vim.fn.resolve(driver .. '/' .. dirname)
|
||||||
|
end
|
||||||
|
end
|
||||||
if prefix:match('/$') then
|
if prefix:match('/$') then
|
||||||
local accept = true
|
local accept = true
|
||||||
-- Ignore URL components
|
-- Ignore URL components
|
||||||
|
Loading…
Reference in New Issue
Block a user