diff --git a/flake.nix b/flake.nix index f8f2e68a6..e94959a6b 100644 --- a/flake.nix +++ b/flake.nix @@ -19,13 +19,32 @@ # We remove `"dev"` from `checkGroups`, so that poetry2nix does not try to resolve dev dependencies. checkGroups = [ ]; overrides = prev.poetry2nix.overrides.withDefaults - (finalPython: prevPython: { - nanoid = prevPython.nanoid.overridePythonAttrs - (oldAttrs: { + (finalPython: prevPython: + let + markdown-it-py-wo-mdit-py-plugins = + prevPython.markdown-it-py.overridePythonAttrs (oldAttrs: { + propagatedBuildInputs = + builtins.filter (p: p.pname != "mdit-py-plugins") + oldAttrs.propagatedBuildInputs; + buildInputs = (oldAttrs.buildInputs or [ ]) + ++ [ finalPython.flit-core ]; + }); + in { + nanoid = prevPython.nanoid.overridePythonAttrs (oldAttrs: { buildInputs = (oldAttrs.buildInputs or [ ]) ++ [ prevPython.setuptools ]; }); - }); + + mdit-py-plugins = + prevPython.mdit-py-plugins.overridePythonAttrs + (oldAttrs: { + propagatedBuildInputs = + builtins.filter (p: p.pname != "markdown-it-py") + oldAttrs.propagatedBuildInputs; + buildInputs = (oldAttrs.buildInputs or [ ]) + ++ [ markdown-it-py-wo-mdit-py-plugins ]; + }); + }); }; in rec { pyk = pyk-python310; diff --git a/package/version b/package/version index 2a59f1f94..a01350eba 100644 --- a/package/version +++ b/package/version @@ -1 +1 @@ -0.1.335 +0.1.336 diff --git a/poetry.lock b/poetry.lock index 1cb7a56a3..43cd2caf8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -440,6 +440,27 @@ pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib" plugins = ["setuptools"] requirements-deprecated-finder = ["pip-api", "pipreqs"] +[[package]] +name = "linkify-it-py" +version = "2.0.2" +description = "Links recognition library with FULL unicode support." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "linkify-it-py-2.0.2.tar.gz", hash = "sha256:19f3060727842c254c808e99d465c80c49d2c7306788140987a1a7a29b0d6ad2"}, + {file = "linkify_it_py-2.0.2-py3-none-any.whl", hash = "sha256:a3a24428f6c96f27370d7fe61d2ac0be09017be5190d68d8658233171f1b6541"}, +] + +[package.dependencies] +uc-micro-py = "*" + +[package.extras] +benchmark = ["pytest", "pytest-benchmark"] +dev = ["black", "flake8", "isort", "pre-commit", "pyproject-flake8"] +doc = ["myst-parser", "sphinx", "sphinx-book-theme"] +test = ["coverage", "pytest", "pytest-cov"] + [[package]] name = "markdown-it-py" version = "2.2.0" @@ -453,6 +474,8 @@ files = [ ] [package.dependencies] +linkify-it-py = {version = ">=1,<3", optional = true, markers = "extra == \"linkify\""} +mdit-py-plugins = {version = "*", optional = true, markers = "extra == \"plugins\""} mdurl = ">=0.1,<1.0" [package.extras] @@ -477,6 +500,26 @@ files = [ {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, ] +[[package]] +name = "mdit-py-plugins" +version = "0.4.0" +description = "Collection of plugins for markdown-it-py" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mdit_py_plugins-0.4.0-py3-none-any.whl", hash = "sha256:b51b3bb70691f57f974e257e367107857a93b36f322a9e6d44ca5bf28ec2def9"}, + {file = "mdit_py_plugins-0.4.0.tar.gz", hash = "sha256:d8ab27e9aed6c38aa716819fedfde15ca275715955f8a185a8e1cf90fb1d2c1b"}, +] + +[package.dependencies] +markdown-it-py = ">=1.0.0,<4.0.0" + +[package.extras] +code-style = ["pre-commit"] +rtd = ["myst-parser", "sphinx-book-theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + [[package]] name = "mdurl" version = "0.1.2" @@ -548,18 +591,6 @@ files = [ {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, ] -[[package]] -name = "nanoid" -version = "2.0.0" -description = "A tiny, secure, URL-friendly, unique string ID generator for Python" -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "nanoid-2.0.0-py3-none-any.whl", hash = "sha256:90aefa650e328cffb0893bbd4c236cfd44c48bc1f2d0b525ecc53c3187b653bb"}, - {file = "nanoid-2.0.0.tar.gz", hash = "sha256:5a80cad5e9c6e9ae3a41fa2fb34ae189f7cb420b2a5d8f82bd9d23466e4efa68"}, -] - [[package]] name = "packaging" version = "23.0" @@ -853,20 +884,21 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "textual" -version = "0.10.1" +version = "0.27.0" description = "Modern Text User Interface framework" category = "main" optional = false python-versions = ">=3.7,<4.0" files = [ - {file = "textual-0.10.1-py3-none-any.whl", hash = "sha256:dd9a5b38a74cf42364a0f247e8f57e3ded7d69d44a63ee664af333f986c48e81"}, - {file = "textual-0.10.1.tar.gz", hash = "sha256:928cfeec37c60b212963f484e806b25380afdddb5a2aecd888ce8c9b46f93553"}, + {file = "textual-0.27.0-py3-none-any.whl", hash = "sha256:dc45eaf7da330686c56d6f76f59d05fd216ce6aad90fa44ee269881efc622151"}, + {file = "textual-0.27.0.tar.gz", hash = "sha256:8bdcb09dc35a706ef939b1276ccfdec10eaaee6147b41cb7587cf33298a8dd33"}, ] [package.dependencies] -importlib-metadata = ">=4.11.3,<5.0.0" -nanoid = ">=2.0.0" -rich = ">12.6.0" +importlib-metadata = ">=4.11.3" +markdown-it-py = {version = ">=2.1.0,<3.0.0", extras = ["linkify", "plugins"]} +rich = ">=13.3.3" +typing-extensions = ">=4.4.0,<5.0.0" [package.extras] dev = ["aiohttp (>=3.8.1)", "click (>=8.1.2)", "msgpack (>=1.0.3)"] @@ -911,7 +943,7 @@ files = [ name = "typing-extensions" version = "4.5.0" description = "Backported and Experimental Type Hints for Python 3.7+" -category = "dev" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -919,6 +951,21 @@ files = [ {file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"}, ] +[[package]] +name = "uc-micro-py" +version = "1.0.2" +description = "Micro subset of unicode data files for linkify-it-py projects." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "uc-micro-py-1.0.2.tar.gz", hash = "sha256:30ae2ac9c49f39ac6dce743bd187fcd2b574b16ca095fa74cd9396795c954c54"}, + {file = "uc_micro_py-1.0.2-py3-none-any.whl", hash = "sha256:8c9110c309db9d9e87302e2f4ad2c3152770930d88ab385cd544e7a7e75f3de0"}, +] + +[package.extras] +test = ["coverage", "pytest", "pytest-cov"] + [[package]] name = "wcwidth" version = "0.2.6" @@ -950,4 +997,4 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "90a8ececcf6a265ae7fc7b1ebcf2c4e01ac12cd0112ccdd1ad7d66cc316c7abf" +content-hash = "383a5252fad33eebb5e57cb945b716516ff012786b70c92494cb5f546dae4339" diff --git a/pyproject.toml b/pyproject.toml index d7693a661..a51d37a46 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry] name = "pyk" -version = "0.1.335" +version = "0.1.336" description = "" authors = [ "Runtime Verification, Inc. ", @@ -18,7 +18,7 @@ filelock = "^3.9.0" graphviz = "^0.20.1" psutil = "^5.9.4" pybind11 = "^2.10.3" -textual = "^0.10.1" +textual = "^0.27.0" tomli = "^2.0.1" [tool.poetry.group.dev.dependencies] diff --git a/src/pyk/kcfg/tui.py b/src/pyk/kcfg/tui.py index 61d1ff984..96557e4c1 100644 --- a/src/pyk/kcfg/tui.py +++ b/src/pyk/kcfg/tui.py @@ -20,7 +20,6 @@ from textual.app import ComposeResult from textual.events import Click - from textual.message import MessageTarget from ..kast import KInner from ..ktool.kprint import KPrint @@ -35,9 +34,9 @@ class GraphChunk(Static): class Selected(Message): chunk_id: str - def __init__(self, sender: MessageTarget, chunk_id: str) -> None: + def __init__(self, chunk_id: str) -> None: self.chunk_id = chunk_id - super().__init__(sender) + super().__init__() def __init__(self, id: str, node_text: Iterable[str] = ()) -> None: self._node_text = '\n'.join(node_text) @@ -49,8 +48,8 @@ def on_enter(self) -> None: def on_leave(self) -> None: self.styles.border_left = None # type: ignore - async def on_click(self, click: Click) -> None: - await self.emit(GraphChunk.Selected(self, self.id or '')) + def on_click(self, click: Click) -> None: + self.post_message(GraphChunk.Selected(self.id or '')) click.stop() @@ -59,7 +58,7 @@ class BehaviorView(Widget): _kprint: KPrint _minimize: bool _node_printer: Callable[[CTerm], Iterable[str]] | None - _nodes: Iterable[GraphChunk] + _kcfg_nodes: Iterable[GraphChunk] def __init__( self, @@ -74,13 +73,13 @@ def __init__( self._kprint = kprint self._minimize = minimize self._node_printer = node_printer - self._nodes = [] + self._kcfg_nodes = [] kcfg_show = KCFGShow(kprint) for lseg_id, node_lines in kcfg_show.pretty_segments(self._kcfg, minimize=self._minimize): - self._nodes.append(GraphChunk(lseg_id, node_lines)) + self._kcfg_nodes.append(GraphChunk(lseg_id, node_lines)) def compose(self) -> ComposeResult: - return self._nodes + return self._kcfg_nodes class NodeView(Widget):