aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/ex_cmds_defs.h59
-rw-r--r--src/nvim/option.c6
-rw-r--r--src/nvim/types.h1
-rw-r--r--test/unit/option_spec.lua51
4 files changed, 82 insertions, 35 deletions
diff --git a/src/nvim/ex_cmds_defs.h b/src/nvim/ex_cmds_defs.h
index c2e7add287..8148eb5cee 100644
--- a/src/nvim/ex_cmds_defs.h
+++ b/src/nvim/ex_cmds_defs.h
@@ -126,39 +126,36 @@ struct exarg {
struct condstack *cstack; ///< condition stack for ":if" etc.
};
-#define FORCE_BIN 1 /* ":edit ++bin file" */
-#define FORCE_NOBIN 2 /* ":edit ++nobin file" */
-
-/* Values for "flags" */
-#define EXFLAG_LIST 0x01 /* 'l': list */
-#define EXFLAG_NR 0x02 /* '#': number */
-#define EXFLAG_PRINT 0x04 /* 'p': print */
-
-/*
- * used for completion on the command line
- */
-typedef struct expand {
- int xp_context; /* type of expansion */
- char_u *xp_pattern; /* start of item to expand */
- int xp_pattern_len; /* bytes in xp_pattern before cursor */
- char_u *xp_arg; /* completion function */
- int xp_scriptID; /* SID for completion function */
- int xp_backslash; /* one of the XP_BS_ values */
+#define FORCE_BIN 1 // ":edit ++bin file"
+#define FORCE_NOBIN 2 // ":edit ++nobin file"
+
+// Values for "flags"
+#define EXFLAG_LIST 0x01 // 'l': list
+#define EXFLAG_NR 0x02 // '#': number
+#define EXFLAG_PRINT 0x04 // 'p': print
+
+// used for completion on the command line
+struct expand {
+ int xp_context; // type of expansion
+ char_u *xp_pattern; // start of item to expand
+ int xp_pattern_len; // bytes in xp_pattern before cursor
+ char_u *xp_arg; // completion function
+ int xp_scriptID; // SID for completion function
+ int xp_backslash; // one of the XP_BS_ values
#ifndef BACKSLASH_IN_FILENAME
- int xp_shell; /* TRUE for a shell command, more
- characters need to be escaped */
+ int xp_shell; // TRUE for a shell command, more
+ // characters need to be escaped
#endif
- int xp_numfiles; /* number of files found by
- file name completion */
- char_u **xp_files; /* list of files */
- char_u *xp_line; /* text being completed */
- int xp_col; /* cursor position in line */
-} expand_T;
-
-/* values for xp_backslash */
-#define XP_BS_NONE 0 /* nothing special for backslashes */
-#define XP_BS_ONE 1 /* uses one backslash before a space */
-#define XP_BS_THREE 2 /* uses three backslashes before a space */
+ int xp_numfiles; // number of files found by file name completion
+ char_u **xp_files; // list of files
+ char_u *xp_line; // text being completed
+ int xp_col; // cursor position in line
+};
+
+// values for xp_backslash
+#define XP_BS_NONE 0 // nothing special for backslashes
+#define XP_BS_ONE 1 // uses one backslash before a space
+#define XP_BS_THREE 2 // uses three backslashes before a space
/// Command modifiers ":vertical", ":browse", ":confirm", ":hide", etc. set a
/// flag. This needs to be saved for recursive commands, put them in a
diff --git a/src/nvim/option.c b/src/nvim/option.c
index e53dbfc75a..1ef1c300b9 100644
--- a/src/nvim/option.c
+++ b/src/nvim/option.c
@@ -6585,10 +6585,8 @@ int get_sw_value(buf_T *buf)
return (int)result;
}
-/*
- * Return the effective softtabstop value for the current buffer, using the
- * 'tabstop' value when 'softtabstop' is negative.
- */
+// Return the effective softtabstop value for the current buffer,
+// using the effective shiftwidth value when 'softtabstop' is negative.
int get_sts_value(void)
{
long result = curbuf->b_p_sts < 0 ? get_sw_value(curbuf) : curbuf->b_p_sts;
diff --git a/src/nvim/types.h b/src/nvim/types.h
index bfe8be2091..35a5d1e2bd 100644
--- a/src/nvim/types.h
+++ b/src/nvim/types.h
@@ -13,4 +13,5 @@ typedef unsigned char char_u;
// Can hold one decoded UTF-8 character.
typedef uint32_t u8char_T;
+typedef struct expand expand_T;
#endif // NVIM_TYPES_H
diff --git a/test/unit/option_spec.lua b/test/unit/option_spec.lua
new file mode 100644
index 0000000000..8bab0194a2
--- /dev/null
+++ b/test/unit/option_spec.lua
@@ -0,0 +1,51 @@
+local helpers = require("test.unit.helpers")
+
+local to_cstr = helpers.to_cstr
+local eq = helpers.eq
+
+local option = helpers.cimport("./src/nvim/option.h")
+local globals = helpers.cimport("./src/nvim/globals.h")
+
+local check_ff_value = function(ff)
+ return option.check_ff_value(to_cstr(ff))
+end
+
+describe('check_ff_value', function()
+
+ it('views empty string as valid', function()
+ eq(1, check_ff_value(""))
+ end)
+
+ it('views "unix", "dos" and "mac" as valid', function()
+ eq(1, check_ff_value("unix"))
+ eq(1, check_ff_value("dos"))
+ eq(1, check_ff_value("mac"))
+ end)
+
+ it('views "foo" as invalid', function()
+ eq(0, check_ff_value("foo"))
+ end)
+end)
+
+describe('get_sts_value', function()
+ it([[returns 'softtabstop' when it is non-negative]], function()
+ globals.curbuf.b_p_sts = 5
+ eq(5, option.get_sts_value())
+
+ globals.curbuf.b_p_sts = 0
+ eq(0, option.get_sts_value())
+ end)
+
+ it([[returns "effective shiftwidth" when 'softtabstop' is negative]], function()
+ local shiftwidth = 2
+ globals.curbuf.b_p_sw = shiftwidth
+ local tabstop = 5
+ globals.curbuf.b_p_ts = tabstop
+ globals.curbuf.b_p_sts = -2
+ eq(shiftwidth, option.get_sts_value())
+
+ shiftwidth = 0
+ globals.curbuf.b_p_sw = shiftwidth
+ eq(tabstop, option.get_sts_value())
+ end)
+end)