aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/eval/funcs.c
diff options
context:
space:
mode:
authorFamiu Haque <famiuhaque@protonmail.com>2022-09-27 21:16:28 +0600
committerFamiu Haque <famiuhaque@protonmail.com>2022-09-28 09:29:43 +0600
commit4b7904d16b11915b16ea46b96f1ea6e28d87d5fd (patch)
treef57971615622d4ae3f6d289da8fcb6730f8a28f1 /src/nvim/eval/funcs.c
parent1d337d4e2f2265b13ecf19a3bc17ad302d3b0d96 (diff)
downloadrneovim-4b7904d16b11915b16ea46b96f1ea6e28d87d5fd.tar.gz
rneovim-4b7904d16b11915b16ea46b96f1ea6e28d87d5fd.tar.bz2
rneovim-4b7904d16b11915b16ea46b96f1ea6e28d87d5fd.zip
refactor: replace unnecessary helper functions in optionstr.c
Replaces unnecessary helper functions in `optionstr.c` such as `get_option_flags()`, `get_option_fullname()`, `set_option_flag()`, `is_global_option()`, etc. with a single `get_option()` helper function that allows direct access to the `options` array. Also refactors `f_exists()` to use `get_varp_scope` instead of using `get_option_tv`. This opens up the path for removing `getoptions_T` altogether later down the line since the hidden option logic is no longer needed.
Diffstat (limited to 'src/nvim/eval/funcs.c')
-rw-r--r--src/nvim/eval/funcs.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/nvim/eval/funcs.c b/src/nvim/eval/funcs.c
index 9ba2ce2365..f2ef8e5cdd 100644
--- a/src/nvim/eval/funcs.c
+++ b/src/nvim/eval/funcs.c
@@ -1938,9 +1938,14 @@ static void f_exists(typval_T *argvars, typval_T *rettv, EvalFuncData fptr)
xfree(exp);
}
} else if (*p == '&' || *p == '+') { // Option.
- n = (get_option_tv(&p, NULL, true) == OK);
- if (*skipwhite(p) != NUL) {
- n = false; // Trailing garbage.
+ bool working = (*p == '+'); // whether option needs to be working
+ int opt_flags;
+
+ if (find_option_end(&p, &opt_flags) != NULL) {
+ int opt_idx = findoption(p);
+ n = (opt_idx >= 0 && (!working || get_varp_scope(get_option(opt_idx), opt_flags) != NULL));
+ } else {
+ n = false;
}
} else if (*p == '*') { // Internal or user defined function.
n = function_exists(p + 1, false);