From 8225d51edeb528c51d30ad0f225eb96be5586a37 Mon Sep 17 00:00:00 2001 From: Pierre Langlois Date: Tue, 29 Mar 2022 20:13:11 +0100 Subject: [PATCH 2/2] gnu: tree-sitter-cli: Enable some tests and add node and dot. * gnu/packages/tree-sitter.scm (tree-sitter-cli)[inputs]: Add graphviz and node-lts. [arguments]<#:cargo-test-flags>: Skip tests that require downloading grammars. <#:phases>: Add 'patch-node and 'patch-dot phases. Tweak install phase. --- gnu/packages/tree-sitter.scm | 49 ++++++++++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 10 deletions(-) diff --git a/gnu/packages/tree-sitter.scm b/gnu/packages/tree-sitter.scm index 2e44339ca2..4331ffdd97 100644 --- a/gnu/packages/tree-sitter.scm +++ b/gnu/packages/tree-sitter.scm @@ -24,7 +24,9 @@ (define-module (gnu packages tree-sitter) #:use-module ((guix licenses) #:prefix license:) #:use-module (gnu packages crates-graphics) #:use-module (gnu packages crates-io) + #:use-module (gnu packages graphviz) #:use-module (gnu packages icu4c) + #:use-module (gnu packages node) #:use-module (guix build-system cargo) #:use-module (guix build-system gnu) #:use-module (guix gexp) @@ -96,13 +98,30 @@ (define-public tree-sitter-cli println!(\"cargo:rustc-link-lib=tree-sitter\");~@ }~%"))))))) (build-system cargo-build-system) - (inputs (list tree-sitter)) + (inputs + (list tree-sitter graphviz node-lts)) (arguments (list - ;; Running test requires downloading fixtures, see the - ;; script/fetch-fixtures script, which fetches grammars. Maybe it make - ;; sence to run tests in the grammar's packages? - #:tests? #f + #:cargo-test-flags + ''("--release" "--" + ;; Skip tests which rely on downloading grammar fixtures. It is + ;; difficult to support such tests given upstream does not encode + ;; which version of the grammars are expected. + ;; Instead, we do run some tests for each grammar in the tree-sitter + ;; build-system, by running `tree-sitter test'. This isn't as + ;; complete as running all tests from tree-sitter-cli, but it's a + ;; good compromise compared to maintaining two different sets of + ;; grammars (Guix packages vs test fixtures). + "--skip=tests::corpus_test" + "--skip=tests::highlight_test" + "--skip=tests::node_test" + "--skip=tests::parser_test" + "--skip=tests::pathological_test" + "--skip=tests::query_test" + "--skip=tests::tags_test" + "--skip=tests::test_highlight_test" + "--skip=tests::test_tags_test" + "--skip=tests::tree_test") ;; We're only packaging the CLI program so we do not need to install ;; sources. #:install-source? #f @@ -132,11 +151,21 @@ (define-public tree-sitter-cli (add-after 'unpack 'delete-cargo-lock (lambda _ (delete-file "Cargo.lock"))) - (replace 'install - (lambda* (#:key outputs #:allow-other-keys) - (let ((bin (string-append #$output "/bin"))) - (mkdir-p bin) - (install-file "target/release/tree-sitter" bin))))))) + (add-after 'unpack 'patch-node + (lambda _ + (substitute* "cli/src/generate/mod.rs" + (("Command::new\\(\"node\"\\)") + (string-append "Command::new(\"" #$node-lts "/bin/node\")"))))) + (add-after 'unpack 'patch-dot + (lambda _ + (substitute* "cli/src/util.rs" + (("Command::new\\(\"dot\"\\)") + (string-append "Command::new(\"" #$graphviz "/bin/dot\")"))))) + (replace 'install + (lambda _ + (let ((bin (string-append #$output "/bin"))) + (mkdir-p bin) + (install-file "target/release/tree-sitter" bin))))))) (description "Tree-sitter is a parser generator tool and an incremental parsing library. It can build a concrete syntax tree for a source file and efficiently update the syntax tree as the source file is edited. -- 2.39.1