{"id":22964561,"url":"https://github.com/colinkennedy/mega.cmdparse","last_synced_at":"2025-04-19T13:25:24.244Z","repository":{"id":267915558,"uuid":"896223922","full_name":"ColinKennedy/mega.cmdparse","owner":"ColinKennedy","description":"A Neovim command-mode parser. Similar to Python's argparse module","archived":false,"fork":false,"pushed_at":"2025-01-27T22:10:24.000Z","size":235,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-03T00:06:17.278Z","etag":null,"topics":["neovim","neovim-plugin"],"latest_commit_sha":null,"homepage":"","language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ColinKennedy.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-29T20:18:07.000Z","updated_at":"2025-02-02T13:06:30.000Z","dependencies_parsed_at":"2025-01-26T22:23:58.338Z","dependency_job_id":"407a3fec-e868-4483-af36-5873091cfe6b","html_url":"https://github.com/ColinKennedy/mega.cmdparse","commit_stats":null,"previous_names":["colinkennedy/mega.cmdparse"],"tags_count":5,"template":false,"template_full_name":"ColinKennedy/nvim-best-practices-plugin-template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ColinKennedy%2Fmega.cmdparse","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ColinKennedy%2Fmega.cmdparse/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ColinKennedy%2Fmega.cmdparse/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ColinKennedy%2Fmega.cmdparse/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ColinKennedy","download_url":"https://codeload.github.com/ColinKennedy/mega.cmdparse/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":237701384,"owners_count":19352905,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["neovim","neovim-plugin"],"created_at":"2024-12-14T20:11:13.540Z","updated_at":"2025-02-07T18:49:39.869Z","avatar_url":"https://github.com/ColinKennedy.png","language":"Lua","readme":"# mega.cmdparse\n\nA [Python argparse-inspired](https://docs.python.org/3/library/argparse.html)\ncommand mode parser for Neovim.\n\nThis library is for people who have to define a command like `:Foo` and it\ntakes arguments. This library supports customizable arguments and subcommands\nso no more needing to define `:FooToggle` `:FooOpen /path/to/file.txt`\n`:FooClose 2`, etc commands. You can easily create one command with completely\nseparate interfaces like `:Foo toggle`, `:Foo open /path/to/file.txt`, and\n`:Foo close --buffer=2`.\n\nThere's a lot of features. Whatever you need, `mega.cmdparse` has you covered!\n\n\n| \u003c!-- --\u003e     | \u003c!-- --\u003e                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |\n|--------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| Build Status | [![unittests](https://img.shields.io/github/actions/workflow/status/ColinKennedy/mega.cmdparse/test.yml?branch=main\u0026style=for-the-badge\u0026label=Unittests)](https://github.com/ColinKennedy/mega.cmdparse/actions/workflows/test.yml)  [![documentation](https://img.shields.io/github/actions/workflow/status/ColinKennedy/mega.cmdparse/documentation.yml?branch=main\u0026style=for-the-badge\u0026label=Documentation)](https://github.com/ColinKennedy/mega.cmdparse/actions/workflows/documentation.yml)  [![luacheck](https://img.shields.io/github/actions/workflow/status/ColinKennedy/mega.cmdparse/luacheck.yml?branch=main\u0026style=for-the-badge\u0026label=Luacheck)](https://github.com/ColinKennedy/mega.cmdparse/actions/workflows/luacheck.yml) [![llscheck](https://img.shields.io/github/actions/workflow/status/ColinKennedy/mega.cmdparse/llscheck.yml?branch=main\u0026style=for-the-badge\u0026label=llscheck)](https://github.com/ColinKennedy/mega.cmdparse/actions/workflows/llscheck.yml) [![stylua](https://img.shields.io/github/actions/workflow/status/ColinKennedy/mega.cmdparse/stylua.yml?branch=main\u0026style=for-the-badge\u0026label=Stylua)](https://github.com/ColinKennedy/mega.cmdparse/actions/workflows/stylua.yml)  [![urlchecker](https://img.shields.io/github/actions/workflow/status/ColinKennedy/mega.cmdparse/urlchecker.yml?branch=main\u0026style=for-the-badge\u0026label=URLChecker)](https://github.com/ColinKennedy/mega.cmdparse/actions/workflows/urlchecker.yml)  |\n| License      | [![License-MIT](https://img.shields.io/badge/License-MIT-blue?style=for-the-badge)](https://github.com/ColinKennedy/mega.cmdparse/blob/main/LICENSE)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |\n| Social       | [![RSS](https://img.shields.io/badge/rss-F88900?style=for-the-badge\u0026logo=rss\u0026logoColor=white)](https://github.com/ColinKennedy/mega.cmdparse/commits/main/doc/news.txt.atom)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |\n\n\n# ⚡️ Features\n- [Position, flag, and named arguments. e.g. `foo bar --fizz=buzz -z`](#position-flag-and-named-arguments)\n- Parser / Parameter paradigm\n- [Builtin auto-complete](#builtin-auto-complete)\n- [Auto-generated `--help` parameter](#auto-generated---help-parameter)\n- Auto-complete any argument in any cursor position\n- Auto-complete a flag argument's values\n- [Non-standard arguments. e.g. `--foo`, `++bar`, `-f`, etc](#non-standard-arguments)\n- [Automated value type conversions](#automated-value-type-conversions)\n- [Multi-argument-per-parameter](#multi-argument-per-parameter)\n- Multi-parameters\n- [Nested subparsers](#nested-subparsers)\n- Merged flag support. e.g. `-fbt` flags parse as `{f=true, b=true, t=true}`.\n- [Automated parameter validation. e.g. \"foo parameter requires 2 arguments, got 1\", etc.](#automated-parameter-validation)\n- [Unicode support](#unicode-parameters)\n- [Supports required / optional arguments](#supports-required--optional-arguments)\n- [2 supported flag formats. `--foo bar` and `--foo=bar`](#2-supported-flag-formats)\n- [Dynamic parsers (supports plugin-like interfaces like Telescope and more)](#dynamic-parsers)\n- This plugin is defer-evaluated (\u003c1 ms plugin start-up time)\n\n\n## ⭐ Demos\n### Builtin Auto-Complete\n\nhttps://github.com/user-attachments/assets/49cb410c-b49d-435a-ac8b-5cb46999f7f7\n\n\n### Auto-Generated `--help` Parameter\nIf you want details on what to type, add `-h` or `--help` to any command and\nthe automated help message will show.\n\nhttps://github.com/user-attachments/assets/da01f274-87d5-4768-8719-54a72fb5627c\n\nA summarized version may also show if you make a mistake in your input.\n\nhttps://github.com/user-attachments/assets/9be524e3-fccd-4cd0-8626-a2dc6c096518\n\n\n### Automated Parameter Validation\nParameters know how many arguments they need and in what order.\n\nhttps://github.com/user-attachments/assets/29f57c5c-c977-47a0-82c8-423250e26688\n\n\n### 2 Supported Flag Formats\n`--foo bar` and `--foo=bar` are both supported styles.\n\nhttps://github.com/user-attachments/assets/a4467230-c1c6-49a0-8405-5c4be40dcba2\n\n\n## 🌟 Examples\n### Simple Hello, World!\n\u003cdetails\u003e\n\u003csummary\u003eHello, World! Parser\u003c/summary\u003e\n\n```lua\nlocal cmdparse = require(\"mega.cmdparse\")\n\nlocal parser = cmdparse.ParameterParser.new({ name = \"Test\", help = \"Hello, World!\"})\nparser:set_execute(function(data) print(\"Hello, World!\") end)\ncmdparse.create_user_command(parser)\n```\nRun: `:Test`\n\u003c/details\u003e\n\n### Automated Value Type Conversions\n\u003cdetails\u003e\n\u003csummary\u003eAutomated value type conversions\u003c/summary\u003e\n\n```lua\nlocal cmdparse = require(\"mega.cmdparse\")\n\nlocal parser = cmdparse.ParameterParser.new({ name = \"Test\", help = \"Automated value type conversions\" })\nparser:add_parameter({ name = \"thing\", type = tonumber, help = \"Test.\" })\nparser:add_parameter({ name = \"another\", type = \"number\", help = \"Test.\" })\nparser:set_execute(function(data)\n    print(string.format('Thing: \"%d\"', data.namespace.thing + 10))\n    print(string.format('Another: \"%d\"', data.namespace.another + 10))\nend)\n\ncmdparse.create_user_command(parser)\n```\nRun: `:Test 10 -123`\n\u003c/details\u003e\n\n### Multi-Argument-Per-Parameter\n\u003cdetails\u003e\n\u003csummary\u003eMulti-argument-per-parameter\u003c/summary\u003e\n\nIn this example, the \"thing\" parameter takes exactly `2` arguments, indicated\nby `nargs=2`.\n\n- `nargs=\"*\"` = 0-or-more\n- `nargs=\"+\"` = 1-or-more\n\n```lua\nlocal cmdparse = require(\"mega.cmdparse\")\n\nlocal parser = cmdparse.ParameterParser.new({ name = \"Test\", help = \"Multi-argument-per-parameter\" })\nparser:add_parameter({ name = \"thing\", nargs=2, type=tonumber, help = \"Test.\" })\nparser:set_execute(function(data)\n    local values = data.namespace.thing\n    local first = values[1]\n    local second = values[2]\n    local total = first + second\n\n    print(string.format('Thing: \"%f + %f = %f\"', first, second, total))\nend)\n\ncmdparse.create_user_command(parser)\n```\nRun: `:Test 123 54545.1231`\n\u003c/details\u003e\n\n### Position, Flag, And Named Arguments\n\u003cdetails\u003e\n\u003csummary\u003ePosition, flag, and named arguments. e.g. `foo bar --fizz=buzz -dbz`\u003c/summary\u003e\n\n```lua\nlocal cmdparse = require(\"mega.cmdparse\")\n\nlocal parser = cmdparse.ParameterParser.new({ name = \"Test\", help = \"Position, flag, and named arguments support.\" })\nparser:add_parameter({ name = \"items\", nargs=\"*\", help=\"non-flag arguments.\" })\nparser:add_parameter({ name = \"--fizz\", help=\"A word.\" })\nparser:add_parameter({ name = \"-d\", action=\"store_true\", help=\"Delta single-word.\" })\nparser:add_parameter({ names = {\"--beta\", \"-b\"}, action=\"store_true\", help=\"Beta single-word.\" })\nparser:add_parameter({ name = \"-z\", action=\"store_true\", help=\"Zulu single-word.\" })\n\nparser:set_execute(function(data)\n    local namespace = data.namespace\n    local items = namespace.items\n    print(vim.fn.join(vim.fn.sort(items), \", \"))\n\n    print(string.format('-d: %s, -b: %s, -z: %s', namespace.d, namespace.beta, namespace.z))\nend)\n\ncmdparse.create_user_command(parser)\n```\nRun: `:Test foo bar --fizz=buzz -dbz`\n\u003c/details\u003e\n\n### Supports Required / Optional Arguments\n\u003cdetails\u003e\n\u003csummary\u003eSupports Required / Optional Arguments\u003c/summary\u003e\n\nBy default, flag / named arguments like `--foo` or `--foo=bar` are optional.\nBy default, position arguments like `thing` are required.\n\nBut you can explicitly make flag / named arguments required or position\narguments optional, using `required=true` and `required=false`.\n\n```lua\nlocal cmdparse = require(\"mega.cmdparse\")\n\nlocal parser = cmdparse.ParameterParser.new({ name = \"Test\", help = \"Unicode Parameters.\" })\nparser:add_parameter({ name = \"required_thing\", help = \"Test.\" })\nparser:add_parameter({ name = \"optional_thing\", required=false, help = \"Test.\" })\nparser:add_parameter({ name = \"--optional-flag\", help = \"Test.\" })\nparser:add_parameter({ name = \"--required-flag\", required=true, help = \"Test.\" })\n\nparser:set_execute(function(data)\n    print(vim.inspect(data.namespace))\nend)\n\ncmdparse.create_user_command(parser)\n```\nRun: `:Test foo bar --required-flag=aaa`\n\u003c/details\u003e\n\n### Nested Subparsers\n\u003cdetails\u003e\n\u003csummary\u003eNested Subparsers\u003c/summary\u003e\n\n```lua\nlocal cmdparse = require(\"mega.cmdparse\")\n\nlocal parser = cmdparse.ParameterParser.new({ name = \"Test\", help = \"Nested Subparsers\" })\nlocal top_subparsers = parser:add_subparsers({ destination = \"commands\" })\nlocal view = top_subparsers:add_parser({ name = \"view\", help = \"View some data.\" })\nlocal view_subparsers = view:add_subparsers({ destination = \"view_commands\" })\n\nlocal log = view_subparsers:add_parser({ name = \"log\" })\nlog:add_parameter({ name = \"path\", help = \"Open a log path file.\" })\nlog:add_parameter({ name = \"--relative\", action=\"store_true\", help = \"A relative log path.\" })\nlog:set_execute(function(data)\n    print(string.format('Opening \"%s\" log path.', data.namespace.path))\nend)\n\ncmdparse.create_user_command(parser)\n```\nRun: `:Test view log /some/path.txt`\n\u003c/details\u003e\n\n### Static Auto-Complete Values\n\u003cdetails\u003e\n\u003csummary\u003eStatic Auto-Complete Values\u003c/summary\u003e\n\n```lua\nlocal cmdparse = require(\"mega.cmdparse\")\n\nlocal parser = cmdparse.ParameterParser.new({ name = \"Test\", help = \"Static Auto-Complete Values.\"})\nparser:add_parameter({ name = \"thing\", choices={ \"aaa\", \"apple\", \"apply\" }, help=\"Test word.\"})\nparser:set_execute(function(data) print(data.namespace.thing) end)\ncmdparse.create_user_command(parser)\n```\nRun: `:Test apply`\n\u003c/details\u003e\n\n### Dynamic Parsers\n\u003cdetails\u003e\n\u003csummary\u003eDynamic Auto-Complete Values\u003c/summary\u003e\n\n```lua\nlocal cmdparse = require(\"mega.cmdparse\")\n\nlocal parser = cmdparse.ParameterParser.new({ name = \"Test\", help = \"Dynamic Auto-Complete Values.\"})\nlocal choices = function(data)\n    local output = {}\n    local value = data.value or 0\n\n    for index = 1, 5 do\n        table.insert(output, \"text \" .. tostring(value + index))\n    end\n\n    return output\nend\nparser:add_parameter({ name = \"--thing\", choices=choices, help=\"Test word.\"})\nparser:set_execute(\n    function(data) print(data.namespace.thing) end,\n)\ncmdparse.create_user_command(parser)\n```\nRun: `:Test --thing=4`\n\u003c/details\u003e\n\n### Dynamic Plug-ins\n\u003cdetails\u003e\n\u003csummary\u003eDynamic Plug-ins\u003c/summary\u003e\n\nSubparsers are not static, you can create dynamic subparsers with dynamic names\nand dynamic contents if you'd like. This makes `mega.cmdparse` great for\nwriting a plugin that supports CLI hooks, like how\n[telescope.nvim](https://github.com/nvim-telescope/telescope.nvim) behaves.\n\n```lua\n---@return mega.cmdparse.ParameterParser # Some example parser.\nlocal function make_example_plugin_a()\n    local parser = cmdparse.ParameterParser.new({ name = \"plugin-a\", help = \"Test plugin-a.\" })\n    parser:add_parameter({ name = \"--foo\", action=\"store_true\", help=\"A required value for plugin-a.\" })\n\n    parser:set_execute(function(data)\n        print(\"Running plugin-a\")\n    end)\n\n    return parser\nend\n\n---@return mega.cmdparse.ParameterParser # Another example parser.\nlocal function make_example_plugin_b()\n    local parser = cmdparse.ParameterParser.new({ name = \"plugin-b\", help = \"Test plugin-b.\" })\n    parser:add_parameter({ name = \"foo\", help=\"A required value for plugin-b.\" })\n\n    parser:set_execute(function(data)\n        print(\"Running plugin-b\")\n    end)\n\n    return parser\nend\n\n---@return mega.cmdparse.ParameterParser # A parser whose auto-complete and executer uses auto-found plugins.\nlocal function create_parser()\n    local parser = cmdparse.ParameterParser.new({ name = \"Test\", help = \"Test.\" })\n    local subparsers = parser:add_subparsers({ destination = \"commands\", help = \"All main commands.\" })\n\n    -- NOTE: These functions would normally be \"automatically discovered\"\n    -- somehow, not hard-coded. But the purpose is the same, it's to add some\n    -- name and callable function so we can refer to it later in the parser.\n    --\n    subparsers:add_parser(make_example_plugin_a())\n    subparsers:add_parser(make_example_plugin_b())\n\n    return parser\nend\n\nlocal parser = create_parser()\ncmdparse.create_user_command(parser)\n```\nRun: `Test plugin-a --foo`\nRun: `Test plugin-b 12345`\n\u003c/details\u003e\n\n### Customizable / Automated --help Flag\n\u003cdetails\u003e\n\u003csummary\u003eCustomizable / Automated `--help` flag\u003c/summary\u003e\n\nThe help message is automatically generated but you can influence the output\na bit, using `value_hint`.\n\nFor example this code below:\n```lua\nlocal cmdparse = require(\"mega.cmdparse\")\n\nlocal parser = cmdparse.ParameterParser.new({ name = \"Test\", help = \"Position, flag, and named arguments support.\" })\nparser:add_parameter({ name = \"items\", nargs=\"*\", help=\"non-flag arguments.\" })\nparser:add_parameter({ name = \"--fizz\", nargs=\"+\", help=\"A word.\" })\nparser:add_parameter({ name = \"-b\", action=\"store_true\", help=\"Zulu single-word.\" })\n\nparser:set_execute(function(data)\n    print(\"Ran it\")\nend)\n\ncmdparse.create_user_command(parser)\n```\n\nCreates this help message:\n```\nUsage: Test [ITEMS ...] [--fizz FIZZ [FIZZ ...]] [-b] [--help]\n\nPositional Arguments:\n    [ITEMS ...]    non-flag arguments.\n\nOptions:\n    --fizz FIZZ [FIZZ ...]    A word.\n    -b    Zulu single-word.\n    --help -h    Show this help message and exit.\n```\n\nIf you don't like the auto-generated value text, you can change it. For example\n\n`parser:add_parameter({ name = \"--fizz\", nargs=\"+\", help=\"A word.\" })`\n\ncan be changed to\n`parser:add_parameter({ name = \"--fizz\", nargs=\"+\", value_hint=\"/path/to/file.txt\", help=\"A word.\" })`\n\nAnd the help message becomes\n\n`--fizz /path/to/file.txt [/path/to/file.txt ...]    A word.`\n\u003c/details\u003e\n\n\n### Non-Standard Arguments\n\u003cdetails\u003e\n\u003csummary\u003eNon-standard arguments. e.g. `--foo`, `++bar`, `-f`, etc\u003c/summary\u003e\n\nThe difference between a position parameter and a flag / named parameter is\njust the prefix. Position parameters must start with alphanumeric text. But\nthis means that anything else can be a flag. e.g. `++foo` is a valid flag name\nand so is `--bar`. It's all allowed.\n\n```lua\nlocal cmdparse = require(\"mega.cmdparse\")\n\nlocal parser = cmdparse.ParameterParser.new({ name = \"Test\", help = \"Position, flag, and named arguments support.\" })\nparser:add_parameter({ name = \"--fizz\", action=\"store_true\", help=\"A word.\" })\nparser:add_parameter({ name = \"++buzz\", help=\"Some argument.\" })\n\nparser:set_execute(function(data)\n    print(string.format('--fizz: %s', data.namespace.fizz))\n    print(string.format('++buzz: \"%s\"', data.namespace.buzz))\nend)\n\ncmdparse.create_user_command(parser)\n```\nRun: `:Test --fizz ++buzz \"some text here\"`\n\u003c/details\u003e\n\n### Unicode Parameters\n\u003cdetails\u003e\n\u003csummary\u003eUnicode Parameters\u003c/summary\u003e\n\nYou can use unicode for position / flag / named parameters if you want to.\n```lua\nlocal cmdparse = require(\"mega.cmdparse\")\n\nlocal parser = cmdparse.ParameterParser.new({ name = \"Test\", help = \"Unicode Parameters.\" })\nparser:add_parameter({ name = \"𝒻ⓡ𝓊𝒾🅃🆂\", nargs=\"+\", help = \"Test.\" })\nparser:add_parameter({ name = \"--😊\", help = \"Test.\" })\n\nparser:set_execute(function(data)\n    print(vim.fn.join(data.namespace[\"𝒻ⓡ𝓊𝒾🅃🆂\"], \", \"))\n    print(data.namespace[\"--😊\"])\nend)\n\ncmdparse.create_user_command(parser)\n```\nRun: `:Test apple 🄱🄰🄽🄰🄽🄰 --😊=ttt`\n\u003c/details\u003e\n\n\n## 🧰 API\nMost people will use `mega.cmdparse` to create Neovim user commands but if you\nwant to use the Lua API directly, here are the most common cases.\n\n\n### get_completions\nYou can query the available auto-complete values whenever you want.\n\n\u003cdetails\u003e\n\u003csummary\u003eExpand to show more\u003c/summary\u003e\n\n```lua\nlocal cmdparse = require(\"mega.cmdparse\")\n\nlocal parser = cmdparse.ParameterParser.new(\n    { name = \"Test\", help = \"Unicode Parameters.\" }\n)\nparser:add_parameter(\n    { name = \"--foo\", choices = {\"apple\", \"apply\", \"banana\"}, help = \"Test.\" }\n)\n\nprint(vim.inspect(parser:get_completion(\"-\")))\nprint(vim.inspect(parser:get_completion(\"--\")))\nprint(vim.inspect(parser:get_completion(\"--f\")))\nprint(vim.inspect(parser:get_completion(\"--fo\")))\n-- Result: {\"--foo=\"}\n\nprint(vim.inspect(parser:get_completion(\"--foo=\")))\n-- Result: { \"--foo=apple\", \"--foo=apply\", \"--foo=banana\" }\n\nprint(vim.inspect(parser:get_completion(\"--foo=appl\")))\n-- Result: { \"--foo=apple\", \"--foo=apply\" }\n\nprint(vim.inspect(parser:get_completion(\"--foo appl\")))\n-- Result: { \"apple\", \"apply\" }\n```\n\nThis also supports a cursor column position (starting at 1-or-more).\n\n```lua\nprint(vim.inspect(parser:get_completion(\"--foo=appl\", 4)))\n-- Result: { \"--foo=\" }\n```\n\n\u003c/details\u003e\n\n\n### parse_arguments\nYou can compute the final values with `parse_arguments`.\n\n\u003cdetails\u003e\n\u003csummary\u003eExpand to show more\u003c/summary\u003e\n\n```lua\nlocal cmdparse = require(\"mega.cmdparse\")\n\nlocal parser = cmdparse.ParameterParser.new({ name = \"Test\", help = \"Unicode Parameters.\" })\nparser:add_parameter({ name = \"--foo\", choices = {\"apple\", \"apply\", \"banana\"}, help = \"Test.\" })\nprint(vim.inspect(parser:parse_arguments(\"--foo=apple\")))\n-- Result: { foo = \"apple\" }\n```\n\u003c/details\u003e\n\n\n# 📋 Installation\n- [lazy.nvim](https://github.com/folke/lazy.nvim)\n```lua\n{\n    \"ColinKennedy/mega.cmdparse\",\n    dependencies = { \"ColinKennedy/mega.logging\" },\n    version = \"v1.*\",\n}\n```\n\n\n# ⚙ Configuration\n(These are default values)\n\n- [lazy.nvim](https://github.com/folke/lazy.nvim)\n```lua\n{\n    \"ColinKennedy/mega.cmdparse\",\n    config = function()\n        vim.g.cmdparse_configuration = {\n            cmdparse = {\n                auto_complete = { display = { help_flag = true } },  -- If `false`, don't show the `--help` flag anywhere.\n            },\n            logging = {\n                level = \"info\", -- \"trace\" | \"debug\" | \"info\" | \"warning\" | \"error\" | \"fatal\"\n                use_console = false,  -- Print to Neovim as the user is working\n                use_file = false, -- Write to-disk as loggers run\n            },\n        }\n    end\n}\n```\n\n\n# ✅ Tests\n## Initialization\nRun this line once before calling any `busted` command\n\n```sh\neval $(luarocks path --lua-version 5.1 --bin)\n```\n\n\n## Running\nRun all tests\n```sh\nluarocks test --test-type busted\n# Or manually\nbusted .\n# Or with Make\nmake test\n```\n\nRun test based on tags\n```sh\nbusted . --tags=simple\n```\n\n\n# 👂 Tracking Updates\nSee [doc/news.txt](doc/news.txt) for updates.\n\nYou can watch this plugin for changes by adding this URL to your RSS feed:\n```\nhttps://github.com/ColinKennedy/mega.cmdparse/commits/main/doc/news.txt.atom\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcolinkennedy%2Fmega.cmdparse","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcolinkennedy%2Fmega.cmdparse","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcolinkennedy%2Fmega.cmdparse/lists"}