mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-03 17:24:29 +00:00 
			
		
		
		
	Merge pull request #13366 from bfredl/path3a
api: enable nvim_get_runtime_file to find subdirectories
This commit is contained in:
		@@ -788,10 +788,15 @@ ArrayOf(String) nvim_list_runtime_paths(void)
 | 
			
		||||
///
 | 
			
		||||
/// 'name' can contain wildcards. For example
 | 
			
		||||
/// nvim_get_runtime_file("colors/*.vim", true) will return all color
 | 
			
		||||
/// scheme files.
 | 
			
		||||
/// scheme files. Always use forward slashes (/) in the search pattern for
 | 
			
		||||
/// subdirectories regardless of platform.
 | 
			
		||||
///
 | 
			
		||||
/// It is not an error to not find any files. An empty array is returned then.
 | 
			
		||||
///
 | 
			
		||||
/// To find a directory, `name` must end with a forward slash, like
 | 
			
		||||
/// "rplugin/python/". Without the slash it would instead look for an ordinary
 | 
			
		||||
/// file called "rplugin/python".
 | 
			
		||||
///
 | 
			
		||||
/// @param name pattern of files to search for
 | 
			
		||||
/// @param all whether to return all matches or only the first
 | 
			
		||||
/// @return list of absolute paths to the found files
 | 
			
		||||
@@ -801,14 +806,13 @@ ArrayOf(String) nvim_get_runtime_file(String name, Boolean all, Error *err)
 | 
			
		||||
{
 | 
			
		||||
  Array rv = ARRAY_DICT_INIT;
 | 
			
		||||
 | 
			
		||||
  // TODO(bfredl):
 | 
			
		||||
  if (name.size == 0) {
 | 
			
		||||
    api_set_error(err, kErrorTypeValidation, "not yet implemented");
 | 
			
		||||
    return rv;
 | 
			
		||||
  int flags = DIP_START | (all ? DIP_ALL : 0);
 | 
			
		||||
 | 
			
		||||
  if (name.size == 0 || name.data[name.size-1] == '/') {
 | 
			
		||||
    flags |= DIP_DIR;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  int flags = DIP_START | (all ? DIP_ALL : 0);
 | 
			
		||||
  do_in_runtimepath((char_u *)name.data,
 | 
			
		||||
  do_in_runtimepath((char_u *)(name.size ? name.data : ""),
 | 
			
		||||
                    flags, find_runtime_cb, &rv);
 | 
			
		||||
  return rv;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1885,25 +1885,40 @@ describe('API', function()
 | 
			
		||||
  end)
 | 
			
		||||
 | 
			
		||||
  describe('nvim_get_runtime_file', function()
 | 
			
		||||
    it('works', function()
 | 
			
		||||
    local p = helpers.alter_slashes
 | 
			
		||||
    it('can find files', function()
 | 
			
		||||
      eq({}, meths.get_runtime_file("bork.borkbork", false))
 | 
			
		||||
      eq({}, meths.get_runtime_file("bork.borkbork", true))
 | 
			
		||||
      eq(1, #meths.get_runtime_file("autoload/msgpack.vim", false))
 | 
			
		||||
      eq(1, #meths.get_runtime_file("autoload/msgpack.vim", true))
 | 
			
		||||
      local val = meths.get_runtime_file("autoload/remote/*.vim", true)
 | 
			
		||||
      eq(2, #val)
 | 
			
		||||
      local p = helpers.alter_slashes
 | 
			
		||||
      if endswith(val[1], "define.vim") then
 | 
			
		||||
        ok(endswith(val[1], p("autoload/remote/define.vim")))
 | 
			
		||||
        ok(endswith(val[2], p("autoload/remote/host.vim")))
 | 
			
		||||
        ok(endswith(val[1], p"autoload/remote/define.vim"))
 | 
			
		||||
        ok(endswith(val[2], p"autoload/remote/host.vim"))
 | 
			
		||||
      else
 | 
			
		||||
        ok(endswith(val[1], p("autoload/remote/host.vim")))
 | 
			
		||||
        ok(endswith(val[2], p("autoload/remote/define.vim")))
 | 
			
		||||
        ok(endswith(val[1], p"autoload/remote/host.vim"))
 | 
			
		||||
        ok(endswith(val[2], p"autoload/remote/define.vim"))
 | 
			
		||||
      end
 | 
			
		||||
      val = meths.get_runtime_file("autoload/remote/*.vim", false)
 | 
			
		||||
      eq(1, #val)
 | 
			
		||||
      ok(endswith(val[1], p("autoload/remote/define.vim"))
 | 
			
		||||
         or endswith(val[1], p("autoload/remote/host.vim")))
 | 
			
		||||
      ok(endswith(val[1], p"autoload/remote/define.vim")
 | 
			
		||||
         or endswith(val[1], p"autoload/remote/host.vim"))
 | 
			
		||||
 | 
			
		||||
      eq({}, meths.get_runtime_file("lua", true))
 | 
			
		||||
      eq({}, meths.get_runtime_file("lua/vim", true))
 | 
			
		||||
    end)
 | 
			
		||||
 | 
			
		||||
    it('can find directories', function()
 | 
			
		||||
      local val = meths.get_runtime_file("lua/", true)
 | 
			
		||||
      eq(1, #val)
 | 
			
		||||
      ok(endswith(val[1], p"lua/"))
 | 
			
		||||
 | 
			
		||||
      val = meths.get_runtime_file("lua/vim/", true)
 | 
			
		||||
      eq(1, #val)
 | 
			
		||||
      ok(endswith(val[1], p"lua/vim/"))
 | 
			
		||||
 | 
			
		||||
      eq({}, meths.get_runtime_file("foobarlang/", true))
 | 
			
		||||
    end)
 | 
			
		||||
  end)
 | 
			
		||||
end)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user