aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/nvim/api/private/helpers.h5
-rw-r--r--src/nvim/api/vim.c39
-rw-r--r--src/nvim/option.c46
3 files changed, 48 insertions, 42 deletions
diff --git a/src/nvim/api/private/helpers.h b/src/nvim/api/private/helpers.h
index 271fd5b485..055abb797f 100644
--- a/src/nvim/api/private/helpers.h
+++ b/src/nvim/api/private/helpers.h
@@ -16,6 +16,7 @@
#define BOOLEAN_OBJ(b) ((Object) { \
.type = kObjectTypeBoolean, \
.data.boolean = b })
+#define BOOL(b) BOOLEAN_OBJ(b)
#define INTEGER_OBJ(i) ((Object) { \
.type = kObjectTypeInteger, \
@@ -29,6 +30,8 @@
.type = kObjectTypeString, \
.data.string = s })
+#define CSTR_TO_OBJ(s) STRING_OBJ(cstr_to_string(s))
+
#define BUFFER_OBJ(s) ((Object) { \
.type = kObjectTypeBuffer, \
.data.integer = s })
@@ -59,6 +62,8 @@
#define PUT(dict, k, v) \
kv_push(dict, ((KeyValuePair) { .key = cstr_to_string(k), .value = v }))
+#define PUT_BOOL(dict, name, condition) PUT(dict, name, BOOLEAN_OBJ(condition));
+
#define ADD(array, item) \
kv_push(array, item)
diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c
index a95aa0f170..8ac820abd9 100644
--- a/src/nvim/api/vim.c
+++ b/src/nvim/api/vim.c
@@ -971,8 +971,12 @@ Object nvim_get_option(String name, Error *err)
}
/// Gets the option information for all options.
-/// @return Map<option_name, option_info>
-Dictionary nvim_get_options_info(Error *err)
+///
+/// The dictionary has the full option names as keys and option metadata
+/// dictionaries as detailed at |nvim_get_option_info|.
+///
+/// @return dictionary of all options
+Dictionary nvim_get_all_options_info(Error *err)
FUNC_API_SINCE(7)
{
return get_all_vimoptions();
@@ -981,22 +985,21 @@ Dictionary nvim_get_options_info(Error *err)
/// Gets the option information for one option
///
/// Resulting dictionary has keys:
-/// - name (string): Name of the option
-/// - shortname (shortname): Shortened name of the option
-/// - type (string): Name of the type of option
-/// - default (Any): The default value for the option
-///
-/// Script-Related Keys:
-/// - was_set (bool): Whether the option was set.
-/// - last_set_sid (int): Last set script id
-/// - last_set_linenr (int): Last set script id, -1 if invalid.
-/// - last_set_lchan (int): Last set script id, -1 if invalid.
-///
-/// Flag-Related Keys:
-/// - win (bool): Window-local option
-/// - buf (bool): Buffer-local option
-/// - global_local (bool): Global or Buffer local option
-/// - flaglist (bool): List of single char flags
+/// - name: Name of the option (like 'filetype')
+/// - shortname: Shortened name of the option (like 'ft')
+/// - type: type of option ("string", "integer" or "boolean")
+/// - default: The default value for the option
+/// - was_set: Whether the option was set.
+///
+/// - last_set_sid: Last set script id (if any)
+/// - last_set_linenr: line number where option was set
+/// - last_set_chan: Channel where option was set (0 for local)
+///
+/// - scope: one of "global", "win", or "buf"
+/// - global_local: whether win or buf option has a global value
+///
+/// - commalist: List of comma separated values
+/// - flaglist: List of single char flags
///
///
/// @param name Option name
diff --git a/src/nvim/option.c b/src/nvim/option.c
index 85f38b02ae..acca6fe681 100644
--- a/src/nvim/option.c
+++ b/src/nvim/option.c
@@ -7200,32 +7200,30 @@ static Dictionary vimoption2dict(vimoption_T *opt)
{
Dictionary dict = ARRAY_DICT_INIT;
- PUT(dict, "name", STRING_OBJ(cstr_to_string(opt->fullname)));
- PUT(dict, "shortname", STRING_OBJ(cstr_to_string(opt->shortname)));
-
-#define PUT_BOOL(dict, name, condition) \
- PUT(dict, name, BOOLEAN_OBJ(condition));
+ PUT(dict, "name", CSTR_TO_OBJ(opt->fullname));
+ PUT(dict, "shortname", CSTR_TO_OBJ(opt->shortname));
+
+ const char *scope;
+ if (opt->indir & PV_BUF) {
+ scope = "buf";
+ } else if (opt->indir & PV_WIN) {
+ scope = "win";
+ } else {
+ scope = "global";
+ }
- PUT_BOOL(dict, "win", opt->indir & PV_WIN);
- PUT_BOOL(dict, "buf", opt->indir & PV_BUF);
+ PUT(dict, "scope", CSTR_TO_OBJ(scope));
// welcome to the jungle
- PUT_BOOL(dict, "global_local", opt->indir & PV_BOTH);
- PUT_BOOL(dict, "commalist", opt->flags & P_COMMA);
- PUT_BOOL(dict, "flaglist", opt->flags & P_FLAGLIST);
+ PUT(dict, "global_local", BOOL(opt->indir & PV_BOTH));
+ PUT(dict, "commalist", BOOL(opt->flags & P_COMMA));
+ PUT(dict, "flaglist", BOOL(opt->flags & P_FLAGLIST));
- PUT_BOOL(dict, "was_set", opt->flags & P_WAS_SET);
-#undef PUT_BOOL
+ PUT(dict, "was_set", BOOL(opt->flags & P_WAS_SET));
PUT(dict, "last_set_sid", INTEGER_OBJ(opt->last_set.script_ctx.sc_sid));
- PUT(dict, "last_set_linenr",
- opt->last_set.script_ctx.sc_lnum > 0
- ? INTEGER_OBJ(opt->last_set.script_ctx.sc_lnum)
- : INTEGER_OBJ(-1));
- PUT(dict, "last_set_lchan",
- opt->last_set.channel_id > 0
- ? INTEGER_OBJ((int64_t)opt->last_set.channel_id)
- : INTEGER_OBJ(-1));
+ PUT(dict, "last_set_linenr", INTEGER_OBJ(opt->last_set.script_ctx.sc_lnum));
+ PUT(dict, "last_set_chan", INTEGER_OBJ((int64_t)opt->last_set.channel_id));
const char *type;
Object def;
@@ -7234,17 +7232,17 @@ static Dictionary vimoption2dict(vimoption_T *opt)
? VI_DEFAULT : VIM_DEFAULT];
if (opt->flags & P_STRING) {
type = "string";
- def = STRING_OBJ(cstr_to_string(def_val ? (char *)def_val : ""));
+ def = CSTR_TO_OBJ(def_val ? (char *)def_val : "");
} else if (opt->flags & P_NUM) {
- type = "string";
+ type = "number";
def = INTEGER_OBJ((Integer)(intptr_t)def_val);
} else if (opt->flags & P_BOOL) {
type = "boolean";
- def = BOOLEAN_OBJ((intptr_t)def_val);
+ def = BOOL((intptr_t)def_val);
} else {
type = ""; def = NIL;
}
- PUT(dict, "type", STRING_OBJ(cstr_to_string(type)));
+ PUT(dict, "type", CSTR_TO_OBJ(type));
PUT(dict, "default", def);
return dict;