mirror of
https://github.com/neovim/neovim.git
synced 2025-09-28 22:18:33 +00:00
refactor: move code dealing with script files to runtime.c (#19734)
vim-patch:8.1.1927: code for dealing with script files is spread out
Problem: Code for dealing with script files is spread out.
Solution: Move the code to scriptfile.c. (Yegappan Lakshmanan, closes vim/vim#4861)
307c5a5bb7
This commit is contained in:
@@ -5670,160 +5670,6 @@ static int ExpandUserLua(expand_T *xp, int *num_file, char ***file)
|
||||
return OK;
|
||||
}
|
||||
|
||||
/// Expand color scheme, compiler or filetype names.
|
||||
/// Search from 'runtimepath':
|
||||
/// 'runtimepath'/{dirnames}/{pat}.vim
|
||||
/// When "flags" has DIP_START: search also from 'start' of 'packpath':
|
||||
/// 'packpath'/pack/ * /start/ * /{dirnames}/{pat}.vim
|
||||
/// When "flags" has DIP_OPT: search also from 'opt' of 'packpath':
|
||||
/// 'packpath'/pack/ * /opt/ * /{dirnames}/{pat}.vim
|
||||
/// When "flags" has DIP_LUA: search also performed for .lua files
|
||||
/// "dirnames" is an array with one or more directory names.
|
||||
static int ExpandRTDir(char_u *pat, int flags, int *num_file, char ***file, char *dirnames[])
|
||||
{
|
||||
*num_file = 0;
|
||||
*file = NULL;
|
||||
size_t pat_len = STRLEN(pat);
|
||||
|
||||
garray_T ga;
|
||||
ga_init(&ga, (int)sizeof(char *), 10);
|
||||
|
||||
// TODO(bfredl): this is bullshit, exandpath should not reinvent path logic.
|
||||
for (int i = 0; dirnames[i] != NULL; i++) {
|
||||
size_t size = STRLEN(dirnames[i]) + pat_len + 7;
|
||||
char_u *s = xmalloc(size);
|
||||
snprintf((char *)s, size, "%s/%s*.vim", dirnames[i], pat);
|
||||
globpath(p_rtp, s, &ga, 0);
|
||||
if (flags & DIP_LUA) {
|
||||
snprintf((char *)s, size, "%s/%s*.lua", dirnames[i], pat);
|
||||
globpath(p_rtp, s, &ga, 0);
|
||||
}
|
||||
xfree(s);
|
||||
}
|
||||
|
||||
if (flags & DIP_START) {
|
||||
for (int i = 0; dirnames[i] != NULL; i++) {
|
||||
size_t size = STRLEN(dirnames[i]) + pat_len + 22;
|
||||
char_u *s = xmalloc(size);
|
||||
snprintf((char *)s, size, "pack/*/start/*/%s/%s*.vim", dirnames[i], pat); // NOLINT
|
||||
globpath(p_pp, s, &ga, 0);
|
||||
if (flags & DIP_LUA) {
|
||||
snprintf((char *)s, size, "pack/*/start/*/%s/%s*.lua", dirnames[i], pat); // NOLINT
|
||||
globpath(p_pp, s, &ga, 0);
|
||||
}
|
||||
xfree(s);
|
||||
}
|
||||
|
||||
for (int i = 0; dirnames[i] != NULL; i++) {
|
||||
size_t size = STRLEN(dirnames[i]) + pat_len + 22;
|
||||
char_u *s = xmalloc(size);
|
||||
snprintf((char *)s, size, "start/*/%s/%s*.vim", dirnames[i], pat); // NOLINT
|
||||
globpath(p_pp, s, &ga, 0);
|
||||
if (flags & DIP_LUA) {
|
||||
snprintf((char *)s, size, "start/*/%s/%s*.lua", dirnames[i], pat); // NOLINT
|
||||
globpath(p_pp, s, &ga, 0);
|
||||
}
|
||||
xfree(s);
|
||||
}
|
||||
}
|
||||
|
||||
if (flags & DIP_OPT) {
|
||||
for (int i = 0; dirnames[i] != NULL; i++) {
|
||||
size_t size = STRLEN(dirnames[i]) + pat_len + 20;
|
||||
char_u *s = xmalloc(size);
|
||||
snprintf((char *)s, size, "pack/*/opt/*/%s/%s*.vim", dirnames[i], pat); // NOLINT
|
||||
globpath(p_pp, s, &ga, 0);
|
||||
if (flags & DIP_LUA) {
|
||||
snprintf((char *)s, size, "pack/*/opt/*/%s/%s*.lua", dirnames[i], pat); // NOLINT
|
||||
globpath(p_pp, s, &ga, 0);
|
||||
}
|
||||
xfree(s);
|
||||
}
|
||||
|
||||
for (int i = 0; dirnames[i] != NULL; i++) {
|
||||
size_t size = STRLEN(dirnames[i]) + pat_len + 20;
|
||||
char_u *s = xmalloc(size);
|
||||
snprintf((char *)s, size, "opt/*/%s/%s*.vim", dirnames[i], pat); // NOLINT
|
||||
globpath(p_pp, s, &ga, 0);
|
||||
if (flags & DIP_LUA) {
|
||||
snprintf((char *)s, size, "opt/*/%s/%s*.lua", dirnames[i], pat); // NOLINT
|
||||
globpath(p_pp, s, &ga, 0);
|
||||
}
|
||||
xfree(s);
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < ga.ga_len; i++) {
|
||||
char_u *match = ((char_u **)ga.ga_data)[i];
|
||||
char_u *s = match;
|
||||
char_u *e = s + STRLEN(s);
|
||||
if (e - s > 4 && (STRNICMP(e - 4, ".vim", 4) == 0
|
||||
|| ((flags & DIP_LUA)
|
||||
&& STRNICMP(e - 4, ".lua", 4) == 0))) {
|
||||
e -= 4;
|
||||
for (s = e; s > match; MB_PTR_BACK(match, s)) {
|
||||
if (vim_ispathsep(*s)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
s++;
|
||||
*e = NUL;
|
||||
assert((e - s) + 1 >= 0);
|
||||
memmove(match, s, (size_t)(e - s) + 1);
|
||||
}
|
||||
}
|
||||
|
||||
if (GA_EMPTY(&ga)) {
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
/* Sort and remove duplicates which can happen when specifying multiple
|
||||
* directories in dirnames. */
|
||||
ga_remove_duplicate_strings(&ga);
|
||||
|
||||
*file = ga.ga_data;
|
||||
*num_file = ga.ga_len;
|
||||
return OK;
|
||||
}
|
||||
|
||||
/// Expand loadplugin names:
|
||||
/// 'packpath'/pack/ * /opt/{pat}
|
||||
static int ExpandPackAddDir(char_u *pat, int *num_file, char ***file)
|
||||
{
|
||||
garray_T ga;
|
||||
|
||||
*num_file = 0;
|
||||
*file = NULL;
|
||||
size_t pat_len = STRLEN(pat);
|
||||
ga_init(&ga, (int)sizeof(char *), 10);
|
||||
|
||||
size_t buflen = pat_len + 26;
|
||||
char_u *s = xmalloc(buflen);
|
||||
snprintf((char *)s, buflen, "pack/*/opt/%s*", pat); // NOLINT
|
||||
globpath(p_pp, s, &ga, 0);
|
||||
snprintf((char *)s, buflen, "opt/%s*", pat); // NOLINT
|
||||
globpath(p_pp, s, &ga, 0);
|
||||
xfree(s);
|
||||
|
||||
for (int i = 0; i < ga.ga_len; i++) {
|
||||
char_u *match = ((char_u **)ga.ga_data)[i];
|
||||
s = (char_u *)path_tail((char *)match);
|
||||
memmove(match, s, STRLEN(s) + 1);
|
||||
}
|
||||
|
||||
if (GA_EMPTY(&ga)) {
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
// Sort and remove duplicates which can happen when specifying multiple
|
||||
// directories in dirnames.
|
||||
ga_remove_duplicate_strings(&ga);
|
||||
|
||||
*file = ga.ga_data;
|
||||
*num_file = ga.ga_len;
|
||||
return OK;
|
||||
}
|
||||
|
||||
/// Expand `file` for all comma-separated directories in `path`.
|
||||
/// Adds matches to `ga`.
|
||||
void globpath(char_u *path, char_u *file, garray_T *ga, int expand_options)
|
||||
|
Reference in New Issue
Block a user