From 67cbaf58c41a3db19c5014587e72d06be9e3d58e Mon Sep 17 00:00:00 2001 From: Gregory Anders Date: Sun, 15 May 2022 14:38:19 -0600 Subject: feat(fs): add vim.fs.parents() vim.fs.parents() is a Lua iterator that returns the next parent directory of the given file or directory on each iteration. --- runtime/doc/lua.txt | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'runtime/doc') diff --git a/runtime/doc/lua.txt b/runtime/doc/lua.txt index dd1843ade3..8f74dca418 100644 --- a/runtime/doc/lua.txt +++ b/runtime/doc/lua.txt @@ -2147,4 +2147,32 @@ set({mode}, {lhs}, {rhs}, {opts}) *vim.keymap.set()* See also: ~ |nvim_set_keymap()| + +============================================================================== +Lua module: fs *lua-fs* + +parents({start}) *vim.fs.parents()* + Iterate over all the parents of the given file or directory. + + Example: > + + local root_dir + for dir in vim.fs.parents(vim.api.nvim_buf_get_name(0)) do + if vim.fn.isdirectory(dir .. "/.git") == 1 then + root_dir = dir + break + end + end + + if root_dir then + print("Found git repository at", root_dir) + end +< + + Parameters: ~ + {start} (string) Initial file or directory. + + Return: ~ + (function) Iterator + vim:tw=78:ts=8:ft=help:norl: -- cgit From c5526a27c3b61acb33b7c3c3fe518d8f1e0b602f Mon Sep 17 00:00:00 2001 From: Gregory Anders Date: Sun, 15 May 2022 19:53:23 -0600 Subject: feat(fs): add vim.fs.dirname() --- runtime/doc/lua.txt | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'runtime/doc') diff --git a/runtime/doc/lua.txt b/runtime/doc/lua.txt index 8f74dca418..cf6d2e7276 100644 --- a/runtime/doc/lua.txt +++ b/runtime/doc/lua.txt @@ -2151,6 +2151,15 @@ set({mode}, {lhs}, {rhs}, {opts}) *vim.keymap.set()* ============================================================================== Lua module: fs *lua-fs* +dirname({file}) *vim.fs.dirname()* + Return the parent directory of the given file or directory + + Parameters: ~ + {file} (string) File or directory + + Return: ~ + (string) Parent directory of {file} + parents({start}) *vim.fs.parents()* Iterate over all the parents of the given file or directory. -- cgit From b740709431f5e68dac5238d455f9f86d5a564f36 Mon Sep 17 00:00:00 2001 From: Gregory Anders Date: Sun, 15 May 2022 19:55:18 -0600 Subject: feat(fs): add vim.fs.basename() --- runtime/doc/lua.txt | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'runtime/doc') diff --git a/runtime/doc/lua.txt b/runtime/doc/lua.txt index cf6d2e7276..bf30700fc0 100644 --- a/runtime/doc/lua.txt +++ b/runtime/doc/lua.txt @@ -2151,6 +2151,15 @@ set({mode}, {lhs}, {rhs}, {opts}) *vim.keymap.set()* ============================================================================== Lua module: fs *lua-fs* +basename({file}) *vim.fs.basename()* + Return the basename of the given file or directory + + Parameters: ~ + {file} (string) File or directory + + Return: ~ + (string) Basename of {file} + dirname({file}) *vim.fs.dirname()* Return the parent directory of the given file or directory -- cgit From 2a62bec37ced51678ff914700d7165605d5a0d53 Mon Sep 17 00:00:00 2001 From: Gregory Anders Date: Sun, 15 May 2022 20:10:12 -0600 Subject: feat(fs): add vim.fs.dir() This function is modeled after the path.dir() function from Penlight and the luafilesystem module. --- runtime/doc/lua.txt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'runtime/doc') diff --git a/runtime/doc/lua.txt b/runtime/doc/lua.txt index bf30700fc0..5274b829b5 100644 --- a/runtime/doc/lua.txt +++ b/runtime/doc/lua.txt @@ -2160,6 +2160,20 @@ basename({file}) *vim.fs.basename()* Return: ~ (string) Basename of {file} +dir({path}) *vim.fs.dir()* + Return an iterator over the files and directories located in + {path} + + Parameters: ~ + {path} (string) An absolute or relative path to the + directory to iterate over + + Return: ~ + Iterator over files and directories in {path}. Each + iteration yields two values: name and type. Each "name" is + the basename of the file or directory relative to {path}. + Type is one of "file" or "directory". + dirname({file}) *vim.fs.dirname()* Return the parent directory of the given file or directory -- cgit From f271d706611049bc53a6a439b310fe60bf0fab13 Mon Sep 17 00:00:00 2001 From: Gregory Anders Date: Sun, 15 May 2022 20:37:35 -0600 Subject: feat(fs): add vim.fs.find() This is a pure Lua implementation of the Vim findfile() and finddir() functions without the special syntax. --- runtime/doc/lua.txt | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'runtime/doc') diff --git a/runtime/doc/lua.txt b/runtime/doc/lua.txt index 5274b829b5..ba59c67446 100644 --- a/runtime/doc/lua.txt +++ b/runtime/doc/lua.txt @@ -2183,6 +2183,46 @@ dirname({file}) *vim.fs.dirname()* Return: ~ (string) Parent directory of {file} +find({names}, {opts}) *vim.fs.find()* + Find files or directories in the given path. + + Finds any files or directories given in {names} starting from + {path}. If {upward} is "true" then the search traverses upward + through parent directories; otherwise, the search traverses + downward. Note that downward searches are recursive and may + search through many directories! If {stop} is non-nil, then + the search stops when the directory given in {stop} is + reached. The search terminates when {limit} (default 1) + matches are found. The search can be narrowed to find only + files or or only directories by specifying {type} to be "file" + or "directory", respectively. + + Parameters: ~ + {names} (string|table) Names of the files and directories + to find. Must be base names, paths and globs are + not supported. + {opts} (table) Optional keyword arguments: + • path (string): Path to begin searching from. If + omitted, the current working directory is used. + • upward (boolean, default false): If true, + search upward through parent directories. + Otherwise, search through child directories + (recursively). + • stop (string): Stop searching when this + directory is reached. The directory itself is + not searched. + • type (string): Find only files ("file") or + directories ("directory"). If omitted, both + files and directories that match {name} are + included. + • limit (number, default 1): Stop the search + after finding this many matches. Use + `math.huge` to place no limit on the number of + matches. + + Return: ~ + (table) The paths of all matching files or directories + parents({start}) *vim.fs.parents()* Iterate over all the parents of the given file or directory. -- cgit From 046b4ed461cb78b8b302a6403cc7ea64ad6b6085 Mon Sep 17 00:00:00 2001 From: Gregory Anders Date: Tue, 17 May 2022 08:49:33 -0600 Subject: feat(fs): add vim.fs.normalize() --- runtime/doc/lua.txt | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) (limited to 'runtime/doc') diff --git a/runtime/doc/lua.txt b/runtime/doc/lua.txt index ba59c67446..8a14f80856 100644 --- a/runtime/doc/lua.txt +++ b/runtime/doc/lua.txt @@ -2166,7 +2166,8 @@ dir({path}) *vim.fs.dir()* Parameters: ~ {path} (string) An absolute or relative path to the - directory to iterate over + directory to iterate over. The path is first + normalized |vim.fs.normalize()|. Return: ~ Iterator over files and directories in {path}. Each @@ -2223,6 +2224,30 @@ find({names}, {opts}) *vim.fs.find()* Return: ~ (table) The paths of all matching files or directories +normalize({path}) *vim.fs.normalize()* + Normalize a path to a standard format. A tilde (~) character + at the beginning of the path is expanded to the user's home + directory and any backslash (\) characters are converted to + forward slashes (/). Environment variables are also expanded. + + Example: > + + vim.fs.normalize('C:\Users\jdoe') + => 'C:/Users/jdoe' + + vim.fs.normalize('~/src/neovim') + => '/home/jdoe/src/neovim' + + vim.fs.normalize('$XDG_CONFIG_HOME/nvim/init.vim') + => '/Users/jdoe/.config/nvim/init.vim' +< + + Parameters: ~ + {path} (string) Path to normalize + + Return: ~ + (string) Normalized path + parents({start}) *vim.fs.parents()* Iterate over all the parents of the given file or directory. -- cgit