Skip to content

Neovim 10 provides vim.fs.root() #29

@MartenBE

Description

@MartenBE

This could probably simplify the code.

vim.fs.root({source}, {marker})                                *vim.fs.root()*
    Find the first parent directory containing a specific "marker", relative
    to a file path or buffer.

    If the buffer is unnamed (has no backing file) or has a non-empty
    'buftype' then the search begins from Nvim's |current-directory|.

    Example: >lua
        -- Find the root of a Python project, starting from file 'main.py'
        vim.fs.root(vim.fs.joinpath(vim.env.PWD, 'main.py'), {'pyproject.toml', 'setup.py' })

        -- Find the root of a git repository
        vim.fs.root(0, '.git')

        -- Find the parent directory containing any file with a .csproj extension
        vim.fs.root(0, function(name, path)
          return name:match('%.csproj$') ~= nil
        end)
<

    Attributes: ~
        Since: 0.10.0

    Parameters: ~
      • {source}  (`integer|string`) Buffer number (0 for current buffer) or
                  file path (absolute or relative to the |current-directory|)
                  to begin the search from.
      • {marker}  (`string|string[]|fun(name: string, path: string): boolean`)
                  A marker, or list of markers, to search for. If a function,
                  the function is called for each evaluated item and should
                  return true if {name} and {path} are a match.

    Return: ~
        (`string?`) Directory path containing one of the given markers, or nil
        if no directory was found.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions