From 1f280b582f32c8ab7de41a34472fb856d5d2f7c4 Mon Sep 17 00:00:00 2001
From: shadmansaleh <shadmansaleh3@gmail.com>
Date: Sat, 12 Jun 2021 12:10:05 +0600
Subject: [PATCH 1/2] fixup(runtime): Fix lua runtime files not listed

lua runtime files weren't listed in :scriptname & profiler.
This fixes that.

* Add tests

* Small doc tweeks
---
 runtime/doc/autocmd.txt               |  6 +++---
 src/nvim/ex_cmds2.c                   | 17 +++++++++--------
 test/functional/core/startup_spec.lua | 15 ++++++++++++++-
 3 files changed, 26 insertions(+), 12 deletions(-)

diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt
index bf94383ec4..9ee1954514 100644
--- a/runtime/doc/autocmd.txt
+++ b/runtime/doc/autocmd.txt
@@ -831,16 +831,16 @@ ShellFilterPost			After executing a shell command with
 				":{range}!cmd", ":w !cmd" or ":r !cmd".
 				Can be used to check for any changed files.
 							*SourcePre*
-SourcePre			Before sourcing a Vim script. |:source|
+SourcePre			Before sourcing a vim/lua file. |:source|
 				<afile> is the name of the file being sourced.
 							*SourcePost*
-SourcePost			After sourcing a Vim script. |:source|
+SourcePost			After sourcing a vim/lua file. |:source|
 				<afile> is the name of the file being sourced.
 				Not triggered when sourcing was interrupted.
 				Also triggered after a SourceCmd autocommand
 				was triggered.
 							*SourceCmd*
-SourceCmd			When sourcing a Vim script. |:source|
+SourceCmd			When sourcing a vim/lua file. |:source|
 				<afile> is the name of the file being sourced.
 				The autocommand must source this file.
 				|Cmd-event|
diff --git a/src/nvim/ex_cmds2.c b/src/nvim/ex_cmds2.c
index 4798e93b91..9abeee47f4 100644
--- a/src/nvim/ex_cmds2.c
+++ b/src/nvim/ex_cmds2.c
@@ -2809,10 +2809,6 @@ int do_source(char_u *fname, int check_other, int is_vimrc)
   proftime_T wait_start;
   bool trigger_source_post = false;
 
-  if (path_with_extension((const char *)fname, "lua")) {
-    return (int)nlua_exec_file((const char *)fname);
-  }
-
   p = expand_env_save(fname);
   if (p == NULL) {
     return retval;
@@ -3005,10 +3001,15 @@ int do_source(char_u *fname, int check_other, int is_vimrc)
     firstline = p;
   }
 
-  // Call do_cmdline, which will call getsourceline() to get the lines.
-  do_cmdline(firstline, getsourceline, (void *)&cookie,
-             DOCMD_VERBOSE|DOCMD_NOWAIT|DOCMD_REPEAT);
-  retval = OK;
+  if (path_with_extension((const char *)fname, "lua")) {
+    // Source the file as lua
+    retval = (int)nlua_exec_file((const char *)fname);
+  } else {
+    // Call do_cmdline, which will call getsourceline() to get the lines.
+    do_cmdline(firstline, getsourceline, (void *)&cookie,
+               DOCMD_VERBOSE|DOCMD_NOWAIT|DOCMD_REPEAT);
+    retval = OK;
+  }
 
   if (l_do_profiling == PROF_YES) {
     // Get "si" again, "script_items" may have been reallocated.
diff --git a/test/functional/core/startup_spec.lua b/test/functional/core/startup_spec.lua
index 30c0758446..658dfbda60 100644
--- a/test/functional/core/startup_spec.lua
+++ b/test/functional/core/startup_spec.lua
@@ -526,12 +526,25 @@ describe('runtime:', function()
     local plugin_folder_path = table.concat({plugin_path, 'plugin'}, pathsep)
     local plugin_file_path = table.concat({plugin_folder_path, 'plugin.lua'},
     pathsep)
+    local profiler_file = 'test_startuptime.log'
+
     mkdir_p(plugin_folder_path)
     write_file(plugin_file_path, [[vim.g.lua_plugin = 2]])
 
-    clear{ args_rm={'-u'}, env={ XDG_CONFIG_HOME=xconfig }}
+    clear{ args_rm={'-u'}, args={'--startuptime', profiler_file}, env={ XDG_CONFIG_HOME=xconfig }}
 
     eq(2, eval('g:lua_plugin'))
+    -- Check if plugin_file_path is listed in :scriptname
+    local scripts = meths.exec(':scriptnames', true)
+    assert.Truthy(scripts:find(plugin_file_path))
+
+    -- Check if plugin_file_path is listed in startup profile
+    local profile_reader = io.open(profiler_file, 'r')
+    local profile_log = profile_reader:read('*a')
+    profile_reader:close()
+    assert.Truthy(profile_log :find(plugin_file_path))
+
+    os.remove(profiler_file)
     rmdir(plugin_path)
   end)
 

From cdbc733ec4302c6cc4269c99b725b32595a01c20 Mon Sep 17 00:00:00 2001
From: shadmansaleh <shadmansaleh3@gmail.com>
Date: Sat, 12 Jun 2021 14:57:45 +0600
Subject: [PATCH 2/2] refactor(startup): Load init.lua with do_sorce

This was init.lua will be logged in startuptime
---
 src/nvim/main.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/nvim/main.c b/src/nvim/main.c
index 53043d293e..7d7eba2105 100644
--- a/src/nvim/main.c
+++ b/src/nvim/main.c
@@ -1811,7 +1811,7 @@ static bool do_user_initialization(void)
 
   char_u *init_lua_path = (char_u *)stdpaths_user_conf_subpath("init.lua");
   if (os_path_exists(init_lua_path)
-      && nlua_exec_file((const char *)init_lua_path)) {
+      && do_source(init_lua_path, true, DOSO_VIMRC)) {
     os_setenv("MYVIMRC", (const char *)init_lua_path, 1);
     char_u *vimrc_path = (char_u *)stdpaths_user_conf_subpath("init.vim");