feat(cli/help): display args and options in color

This commit is contained in:
D. Bohdan 2023-10-19 10:38:45 +00:00
parent be696d323d
commit 7f88f29a06
3 changed files with 105 additions and 2 deletions

84
poetry.lock generated
View File

@ -165,6 +165,41 @@ files = [
{file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"},
]
[[package]]
name = "markdown-it-py"
version = "3.0.0"
description = "Python port of markdown-it. Markdown parsing, done right!"
optional = false
python-versions = ">=3.8"
files = [
{file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"},
{file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"},
]
[package.dependencies]
mdurl = ">=0.1,<1.0"
[package.extras]
benchmarking = ["psutil", "pytest", "pytest-benchmark"]
code-style = ["pre-commit (>=3.0,<4.0)"]
compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"]
linkify = ["linkify-it-py (>=1,<3)"]
plugins = ["mdit-py-plugins"]
profiling = ["gprof2dot"]
rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"]
testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"]
[[package]]
name = "mdurl"
version = "0.1.2"
description = "Markdown URL utilities"
optional = false
python-versions = ">=3.7"
files = [
{file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"},
{file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"},
]
[[package]]
name = "mypy-extensions"
version = "1.0.0"
@ -242,6 +277,20 @@ files = [
dev = ["pre-commit", "tox"]
testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "pygments"
version = "2.16.1"
description = "Pygments is a syntax highlighting package written in Python."
optional = false
python-versions = ">=3.7"
files = [
{file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"},
{file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"},
]
[package.extras]
plugins = ["importlib-metadata"]
[[package]]
name = "pyright"
version = "1.1.329"
@ -355,6 +404,39 @@ files = [
{file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"},
]
[[package]]
name = "rich"
version = "13.6.0"
description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
optional = false
python-versions = ">=3.7.0"
files = [
{file = "rich-13.6.0-py3-none-any.whl", hash = "sha256:2b38e2fe9ca72c9a00170a1a2d20c63c790d0e10ef1fe35eba76e1e7b1d7d245"},
{file = "rich-13.6.0.tar.gz", hash = "sha256:5c14d22737e6d5084ef4771b62d5d4363165b403455a30a1c8ca39dc7b644bef"},
]
[package.dependencies]
markdown-it-py = ">=2.2.0"
pygments = ">=2.13.0,<3.0.0"
typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.9\""}
[package.extras]
jupyter = ["ipywidgets (>=7.5.1,<9)"]
[[package]]
name = "rich-argparse"
version = "1.3.0"
description = "Rich help formatters for argparse and optparse"
optional = false
python-versions = ">=3.7"
files = [
{file = "rich_argparse-1.3.0-py3-none-any.whl", hash = "sha256:1a5eda1659c0a215862fe3630fcbe68d7792f18a8106baaf4e005b9896acc6f6"},
{file = "rich_argparse-1.3.0.tar.gz", hash = "sha256:974cc1ba0aaa0d6aabc09ab1b78f9ba928670e08590f9551121bcbc60c75b74a"},
]
[package.dependencies]
rich = ">=11.0.0"
[[package]]
name = "ruff"
version = "0.1.0"
@ -477,4 +559,4 @@ files = [
[metadata]
lock-version = "2.0"
python-versions = "^3.8"
content-hash = "dca6cca7fbb4cfed3feb18b7f4be2a573d5fe20006d821d8b26bb800a5878501"
content-hash = "f866ae238c8f130262b3295fe6c24da06222989a5aaa6574c792cce14372d7d0"

View File

@ -29,13 +29,18 @@ include = [
[tool.poetry.dependencies]
python = "^3.8"
cbor2 = "^5.4"
python-dateutil = "^2.8"
cbor2 = "^5.4"
PyYAML = "^6.0"
tomli = { version = "^2.0.1", python = "<3.11" }
tomlkit = "^0.12.1"
u-msgpack-python = "^2.8"
colorama = "^0.4.6"
rich-argparse = "^1.3.0"
[tool.poetry.group.dev.dependencies]
black = "^23.3.0"
ruff = "0.1.0"

View File

@ -16,8 +16,10 @@ from pathlib import Path
from typing import Any, Callable, Dict, List, Mapping, Sequence, Tuple, Union, cast
import cbor2 # type: ignore
import colorama
import dateutil.parser
import tomlkit
from rich_argparse import RichHelpFormatter
try:
import tomllib # type: ignore
@ -112,8 +114,21 @@ def _parse_command_line(argv: List[str]) -> argparse.Namespace: # noqa: C901.
argv0_from, argv0_to = _argv0_to_format(me)
format_from_argv0 = argv0_to != ""
RichHelpFormatter.styles = {
"argparse.args": "cyan",
"argparse.groups": "default",
"argparse.help": "default",
"argparse.metavar": "cyan",
"argparse.prog": "default",
"argparse.syntax": "bold",
"argparse.text": "default",
"argparse.default": "default",
}
RichHelpFormatter.group_name_formatter = lambda x: x
parser = argparse.ArgumentParser(
description="Convert between CBOR, JSON, MessagePack, TOML, and YAML.",
formatter_class=RichHelpFormatter,
prog="remarshal",
)
parser.add_argument("-v", "--version", action="version", version=__version__)
@ -286,6 +301,7 @@ def _parse_command_line(argv: List[str]) -> argparse.Namespace: # noqa: C901.
help="YAML line width for long strings",
)
colorama.init()
args = parser.parse_args(args=argv[1:])
# Use the positional input and output arguments.