From 2f901e22b67f6f462387d6c0c943f36a3da51f60 Mon Sep 17 00:00:00 2001 From: Doron Behar Date: Fri, 10 Oct 2025 11:01:55 +0300 Subject: [PATCH 1/2] python3Packages.tree-sitter: run tests by using GH source https://github.com/NixOS/nixpkgs/pull/428417#discussion_r2418324512 --- .../python-modules/tree-sitter/default.nix | 42 ++++++++++++++++--- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/pkgs/development/python-modules/tree-sitter/default.nix b/pkgs/development/python-modules/tree-sitter/default.nix index b5143017f97a4..9e54a3da7f1fe 100644 --- a/pkgs/development/python-modules/tree-sitter/default.nix +++ b/pkgs/development/python-modules/tree-sitter/default.nix @@ -1,10 +1,18 @@ { lib, buildPythonPackage, - fetchPypi, + fetchFromGitHub, # build-system setuptools, + + # tests + pytestCheckHook, + tree-sitter-python, + tree-sitter-rust, + tree-sitter-html, + tree-sitter-javascript, + tree-sitter-json, }: buildPythonPackage rec { @@ -12,19 +20,43 @@ buildPythonPackage rec { version = "0.25.2"; pyproject = true; - src = fetchPypi { - inherit pname version; - hash = "sha256-/kPBWFVdpGcjsotS4FitREGVr9HbPKdyDFmiVFROnCA="; + src = fetchFromGitHub { + owner = "tree-sitter"; + repo = "py-tree-sitter"; + tag = "v${version}"; + hash = "sha256-MgiVxq9MUaOkNNgn46g2Cy7/IUx/yatKSR1vE6LscKg="; + fetchSubmodules = true; }; build-system = [ setuptools ]; + nativeCheckInputs = [ + pytestCheckHook + tree-sitter-python + tree-sitter-rust + tree-sitter-html + tree-sitter-javascript + tree-sitter-json + ]; + pythonImportsCheck = [ "tree_sitter" ]; + preCheck = '' + # https://github.com/NixOS/nixpkgs/issues/255262#issuecomment-1721265871 + rm -r tree_sitter + ''; + + disabledTests = [ + # Test fails only in the Nix sandbox, with: + # + # AssertionError: Lists differ: ['', '', ''] != ['graph {\n', 'label="new_parse"\n', '}\n'] + "test_dot_graphs" + ]; + meta = { description = "Python bindings to the Tree-sitter parsing library"; homepage = "https://github.com/tree-sitter/py-tree-sitter"; - changelog = "https://github.com/tree-sitter/py-tree-sitter/releases/tag/v${version}"; + changelog = "https://github.com/tree-sitter/py-tree-sitter/releases/tag/${src.tag}"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ fab ]; }; From 447150af501995933b41690d9d17ca36460051ba Mon Sep 17 00:00:00 2001 From: Doron Behar Date: Fri, 10 Oct 2025 17:45:45 +0300 Subject: [PATCH 2/2] keymap-drawer: Make tree-sitter override much more robust --- pkgs/by-name/ke/keymap-drawer/package.nix | 28 +++++++++++++++++-- .../python-modules/keymap-drawer/default.nix | 17 ++++------- 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/pkgs/by-name/ke/keymap-drawer/package.nix b/pkgs/by-name/ke/keymap-drawer/package.nix index 201141b2f7c40..4847dbc713e04 100644 --- a/pkgs/by-name/ke/keymap-drawer/package.nix +++ b/pkgs/by-name/ke/keymap-drawer/package.nix @@ -1,4 +1,28 @@ { - python3Packages, + python3, + fetchFromGitHub, }: -python3Packages.toPythonApplication python3Packages.keymap-drawer + +let + python = python3.override { + packageOverrides = self: super: { + tree-sitter = super.tree-sitter.overrideAttrs { + version = "0.24.0"; + src = fetchFromGitHub { + owner = "tree-sitter"; + repo = "py-tree-sitter"; + tag = "v0.24.0"; + hash = "sha256-ZDt/8suteaAjGdk71l8eej7jDkkVpVDBIZS63SA8tsU="; + fetchSubmodules = true; + }; + # keymap-drawer only requires tree-sitter-devicetree grammer, and + # the tests fail with numereous TREE_SITTER_LANGUAGE_VERSION + # related failures related to other grammers. Hence we disable the + # tests altogether, hoping that in the future this python3.override + # won't be needed at all. + doInstallCheck = false; + }; + }; + }; +in +python.pkgs.toPythonApplication python.pkgs.keymap-drawer diff --git a/pkgs/development/python-modules/keymap-drawer/default.nix b/pkgs/development/python-modules/keymap-drawer/default.nix index e18c319aa2fa6..fb6083a90802f 100644 --- a/pkgs/development/python-modules/keymap-drawer/default.nix +++ b/pkgs/development/python-modules/keymap-drawer/default.nix @@ -3,7 +3,6 @@ buildPythonPackage, fetchFromGitHub, - fetchPypi, pythonOlder, nix-update-script, @@ -47,16 +46,7 @@ buildPythonPackage { pydantic-settings pyparsing pyyaml - # keymap-drawer currently requires tree-sitter 0.24.0 - # See https://github.com/caksoylar/keymap-drawer/issues/183 - (tree-sitter.overrideAttrs rec { - version = "0.24.0"; - src = fetchPypi { - inherit version; - inherit (tree-sitter) pname; - hash = "sha256-q9la9lyi9Pfso1Y0M5HtZp52Tzd0i1NSlG8A9/x45zQ="; - }; - }) + tree-sitter tree-sitter-grammars.tree-sitter-devicetree ]; @@ -80,5 +70,10 @@ buildPythonPackage { MattSturgeon ]; mainProgram = "keymap"; + # keymap-drawer currently requires tree-sitter 0.24.0 + # See https://github.com/caksoylar/keymap-drawer/issues/183 + # top-level package `keymap-drawer` is not broken due to this + # incompatibility, thanks to a Python override + broken = lib.versionAtLeast tree-sitter.version "0.25.0"; }; }