Home Explore Blog CI



neovim

53th chunk of `runtime/doc/lua.txt`
b7837b3fe5b59b27b2b58d95d9b54e9413d36781809174350000000100000fcd
                        *vim.version.lt()*
    Returns `true` if `v1 < v2`. See |vim.version.cmp()| for usage.

    Attributes: ~
        Since: 0.9.0

    Parameters: ~
      • {v1}  (`vim.Version|number[]|string`)
      • {v2}  (`vim.Version|number[]|string`)

    Return: ~
        (`boolean`)

vim.version.parse({version}, {opts})                     *vim.version.parse()*
    Parses a semantic version string and returns a version object which can be
    used with other `vim.version` functions. For example "1.0.1-rc1+build.2"
    returns: >
        { major = 1, minor = 0, patch = 1, prerelease = "rc1", build = "build.2" }
<

    Attributes: ~
        Since: 0.9.0

    Parameters: ~
      • {version}  (`string`) Version string to parse.
      • {opts}     (`table?`) Optional keyword arguments:
                   • strict (boolean): Default false. If `true`, no coercion
                     is attempted on input not conforming to semver v2.0.0. If
                     `false`, `parse()` attempts to coerce input such as
                     "1.0", "0-x", "tmux 3.2a" into valid versions.

    Return: ~
        (`vim.Version?`) parsed_version Version object or `nil` if input is
        invalid.

    See also: ~
      • https://semver.org/spec/v2.0.0.html

vim.version.range({spec})                                *vim.version.range()*
    Parses a semver |version-range| "spec" and returns a range object: >
        {
          from: Version
          to: Version
          has(v: string|Version)
        }
<

    `:has()` checks if a version is in the range (inclusive `from`, exclusive
    `to`).

    Example: >lua
        local r = vim.version.range('1.0.0 - 2.0.0')
        print(r:has('1.9.9'))       -- true
        print(r:has('2.0.0'))       -- false
        print(r:has(vim.version())) -- check against current Nvim version
<

    Or use cmp(), le(), lt(), ge(), gt(), and/or eq() to compare a version
    against `.to` and `.from` directly: >lua
        local r = vim.version.range('1.0.0 - 2.0.0') -- >=1.0, <2.0
        print(vim.version.ge({1,0,3}, r.from) and vim.version.lt({1,0,3}, r.to))
<

    Attributes: ~
        Since: 0.9.0

    Parameters: ~
      • {spec}  (`string`) Version range "spec"

    Return: ~
        (`table?`) A table with the following fields:
        • {from} (`vim.Version`)
        • {to}? (`vim.Version`)
        • {has} (`fun(self: vim.VersionRange, version: string|vim.Version)`)

    See also: ~
      • https://github.com/npm/node-semver#ranges


==============================================================================
Lua module: vim.iter                                                *vim.iter*

*vim.iter()* is an interface for |iterable|s: it wraps a table or function
argument into an *Iter* object with methods (such as |Iter:filter()| and
|Iter:map()|) that transform the underlying source data. These methods can be
chained to create iterator "pipelines": the output of each pipeline stage is
input to the next stage. The first stage depends on the type passed to
`vim.iter()`:
• Lists or arrays (|lua-list|) yield only the value of each element.
  • Holes (nil values) are allowed (but discarded).
  • Use pairs() to treat array/list tables as dicts (preserve holes and
    non-contiguous integer keys): `vim.iter(pairs(…))`.
  • Use |Iter:enumerate()| to also pass the index to the next stage.
    • Or initialize with ipairs(): `vim.iter(ipairs(…))`.
• Non-list tables (|lua-dict|) yield both the key and value of each element.
• Function |iterator|s yield all values returned by the underlying function.
• Tables with a |__call()| metamethod are treated as function iterators.

The iterator pipeline terminates when the underlying |iterable| is exhausted
(for function iterators this means it returned nil).

Note: `vim.iter()` scans table input to decide if it is a list or a dict; to
avoid this cost you can wrap the table with an iterator e.g.
`vim.iter(ipairs({…}))`, but that precludes the use of |list-iterator|

Title: Lua API: vim.version.parse and vim.version.range, and Introduction to vim.iter
Summary
This section describes the `vim.version.parse()` function, which parses a semantic version string into a version object, including a strict mode for enforcing semver v2.0.0 compliance. It also explains `vim.version.range()`, which parses a semver version range and returns a range object with `from`, `to`, and `has()` properties. The section then introduces `vim.iter`, an interface for iterables that wraps tables or functions into an Iter object, enabling transformation of source data through method chaining to create iterator pipelines. The initial stage depends on the type passed to `vim.iter()`, handling lists, dictionaries, and function iterators.