aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshadmansaleh <shadmansaleh3@gmail.com>2021-06-02 13:48:13 +0600
committershadmansaleh <shadmansaleh3@gmail.com>2021-06-11 01:01:02 +0600
commit68be8b99cfb1ab6105c48707986ce409ca38dd35 (patch)
treee0d3a12f6531b4766f431535949f627132ecb83d
parent1e6c02510afd79659519f2a69075b36784134322 (diff)
downloadrneovim-68be8b99cfb1ab6105c48707986ce409ca38dd35.tar.gz
rneovim-68be8b99cfb1ab6105c48707986ce409ca38dd35.tar.bz2
rneovim-68be8b99cfb1ab6105c48707986ce409ca38dd35.zip
feat(runtime): Allow lua to be used in compiler
-rw-r--r--runtime/doc/quickfix.txt4
-rw-r--r--src/nvim/ex_cmds2.c7
-rw-r--r--test/functional/lua/runtime_spec.lua30
3 files changed, 38 insertions, 3 deletions
diff --git a/runtime/doc/quickfix.txt b/runtime/doc/quickfix.txt
index a937cfee98..ebc7e2a1b4 100644
--- a/runtime/doc/quickfix.txt
+++ b/runtime/doc/quickfix.txt
@@ -1208,8 +1208,8 @@ not "b:current_compiler". What the command actually does is the following:
- Delete the "current_compiler" and "b:current_compiler" variables.
- Define the "CompilerSet" user command. With "!" it does ":set", without "!"
it does ":setlocal".
-- Execute ":runtime! compiler/{name}.vim". The plugins are expected to set
- options with "CompilerSet" and set the "current_compiler" variable to the
+- Execute ":runtime! compiler/{name}.(vim|lua)". The plugins are expected to
+ set options with "CompilerSet" and set the "current_compiler" variable to the
name of the compiler.
- Delete the "CompilerSet" user command.
- Set "b:current_compiler" to the value of "current_compiler".
diff --git a/src/nvim/ex_cmds2.c b/src/nvim/ex_cmds2.c
index 56a14887df..3f35c41e7a 100644
--- a/src/nvim/ex_cmds2.c
+++ b/src/nvim/ex_cmds2.c
@@ -2421,6 +2421,7 @@ void ex_compiler(exarg_T *eap)
if (*eap->arg == NUL) {
// List all compiler scripts.
do_cmdline_cmd("echo globpath(&rtp, 'compiler/*.vim')"); // NOLINT
+ do_cmdline_cmd("echo globpath(&rtp, 'compiler/*.lua')"); // NOLINT
} else {
size_t bufsize = STRLEN(eap->arg) + 14;
buf = xmalloc(bufsize);
@@ -2445,7 +2446,11 @@ void ex_compiler(exarg_T *eap)
snprintf((char *)buf, bufsize, "compiler/%s.vim", eap->arg);
if (source_in_path(p_rtp, buf, DIP_ALL) == FAIL) {
- EMSG2(_("E666: compiler not supported: %s"), eap->arg);
+ // Try lua compiler
+ snprintf((char *)buf, bufsize, "compiler/%s.lua", eap->arg);
+ if (source_in_path(p_rtp, buf, DIP_ALL) == FAIL) {
+ EMSG2(_("E666: compiler not supported: %s"), eap->arg);
+ }
}
xfree(buf);
diff --git a/test/functional/lua/runtime_spec.lua b/test/functional/lua/runtime_spec.lua
index a37570e4a4..11407ad19c 100644
--- a/test/functional/lua/runtime_spec.lua
+++ b/test/functional/lua/runtime_spec.lua
@@ -85,5 +85,35 @@ describe('runtime:', function()
end)
end)
+ describe('compiler', function()
+ local compiler_folder = table.concat({xconfig, 'nvim', 'compiler'}, pathsep)
+
+ it('loads lua compilers', function()
+ local compiler_file = table.concat({compiler_folder, 'new_compiler.lua'},
+ pathsep)
+ mkdir_p(compiler_folder)
+ write_file(compiler_file, [[vim.g.lua_compiler = 1]])
+
+ clear{ args_rm={'-' }, env={ XDG_CONFIG_HOME=xconfig }}
+ exec('compiler new_compiler')
+
+ eq(1, eval('g:lua_compiler'))
+ rmdir(compiler_folder)
+ end)
+
+ it('loads vim compilers when both lua and vim version exist', function()
+ local compiler_file = table.concat({compiler_folder, 'new_compiler'},
+ pathsep)
+ mkdir_p(compiler_folder)
+ write_file(compiler_file..'.vim', [[let g:compiler = 'vim']])
+ write_file(compiler_file..'.lua', [[vim.g.compiler = 'lua']])
+
+ clear{ args_rm={'-u' }, env={ XDG_CONFIG_HOME=xconfig }}
+ exec('compiler new_compiler')
+
+ eq('vim', eval('g:compiler'))
+ rmdir(compiler_folder)
+ end)
+ end)
end)