diff mbox series

[bug#53523,v2,1/2] gnu: Add tree-sitter.

Message ID ea588a8f8429862ade9647a3b96fbebd25f32a1b.1643720048.git.luishenriquegh2701@gmail.com
State Accepted
Headers show
Series [bug#53523,v2,1/2] gnu: Add tree-sitter. | expand

Checks

Context Check Description
cbaines/comparison success View comparision
cbaines/git branch success View Git branch
cbaines/applying patch success View Laminar job
cbaines/issue success View issue
cbaines/comparison success View comparision
cbaines/git branch success View Git branch
cbaines/applying patch success View Laminar job
cbaines/issue success View issue

Commit Message

Luis Henrique Gomes Higino Feb. 1, 2022, 1:04 p.m. UTC
Hi guixers,

this adds tree-sitter, just as the previous patch series, but now
there is no neovim-luajit and neovim uses LuaJIT on supported
platforms.

--
Regards,
Luis H. Higino

* gnu/packages/text-editors.scm (tree-sitter): New variable.
---
 gnu/packages/text-editors.scm | 45 +++++++++++++++++++++++++++++++++++
 1 file changed, 45 insertions(+)

Comments

M Feb. 5, 2022, 11:09 a.m. UTC | #1
Luis Henrique Gomes Higino schreef op di 01-02-2022 om 10:04 [-0300]:
> +                  (add-after 'unpack 'fix-hardcoded-paths
> +                    (lambda _
> +                      (substitute* "Makefile"
> +                        (("/usr/local") (assoc-ref %outputs "out"))))))

%outputs and friends are being phased out, use G-exps instead:

 (list #:phases
       #~(modify-phases ...
           (add-after 'unpack ...
             (lambda _
               (substitute* "Makefile"
                 (("/usr/local") #$output))))
           [...])
      [...])

> +       #:tests? #f

Why are they disabled?

> +       #:make-flags
> +       (list (string-append "prefix="
> +                            (assoc-ref %outputs "out"))

Likewise (G-exps).

> +             (string-append "CC="
> +                            ,(cc-for-target)))))

If G-exps are used, ',' needs to be replaced by #$.

Greetings,
Maxime.
M Feb. 5, 2022, 11:11 a.m. UTC | #2
Luis Henrique Gomes Higino schreef op di 01-02-2022 om 10:04 [-0300]:
> +                      (substitute* "Makefile"
> +                        (("/usr/local") (assoc-ref %outputs "out"))))))

Is this necessary?  The Makefile does 'PREFIX ?= /usr/local', so it
would seem to me that overriding PREFIX by setting #:make-flags
appropriately should be sufficient.

Greetings,
Maxime.
M Feb. 5, 2022, 11:12 a.m. UTC | #3
Luis Henrique Gomes Higino schreef op di 01-02-2022 om 10:04 [-0300]:
> +              (uri (git-reference
> +                    (url "https://github.com/tree-sitter/tree-sitter")
> +                    (commit (string-append "v" version))))

tree-sitter is bundling some parts of ICU
(https://github.com/tree-sitter/tree-sitter/tree/master/lib/src/unicode),
can they be unbundled?

Greetings,
Maxime.
M Feb. 5, 2022, 11:14 a.m. UTC | #4
Luis Henrique Gomes Higino schreef op di 01-02-2022 om 10:04 [-0300]:
> +       (list (string-append "prefix="
> +                            (assoc-ref %outputs "out"))

The Makefile has a 'PREFIX' variable, not a 'prefix' variable,
so this doesn't seem to have any effect?

Greetings,
Maxime
Luis Henrique Gomes Higino Feb. 5, 2022, 6:17 p.m. UTC | #5
Maxime Devos <maximedevos@telenet.be> writes:

> Luis Henrique Gomes Higino schreef op di 01-02-2022 om 10:04 
> [-0300]:
>
>> +       #:tests? #f
>
> Why are they disabled?
>

tree-sitter's test suite depends on downloading additional 
grammars, so I found it easier to just disable testing. If you 
think tests should be added as an additional origin field, I can 
try doing it.
Luis Henrique Gomes Higino Feb. 5, 2022, 6:23 p.m. UTC | #6
Maxime Devos <maximedevos@telenet.be> writes:

> Luis Henrique Gomes Higino schreef op di 01-02-2022 om 10:04 
> [-0300]:
>> +                      (substitute* "Makefile"
>> +                        (("/usr/local") (assoc-ref %outputs 
>> "out"))))))
>
> Is this necessary?  The Makefile does 'PREFIX ?= /usr/local', so 
> it
> would seem to me that overriding PREFIX by setting #:make-flags
> appropriately should be sufficient.
>

You're right, I was using "prefix" on #:make-flags when it should 
be "PREFIX", thanks for pointing it out!
M Feb. 5, 2022, 6:38 p.m. UTC | #7
Luis Henrique Gomes Higino schreef op za 05-02-2022 om 15:17 [-0300]:
> Maxime Devos <maximedevos@telenet.be> writes:
> 
> > Luis Henrique Gomes Higino schreef op di 01-02-2022 om 10:04 
> > [-0300]:
> > 
> > > +       #:tests? #f
> > 
> > Why are they disabled?
> > 
> 
> tree-sitter's test suite depends on downloading additional 
> grammars, so I found it easier to just disable testing. If you 
> think tests should be added as an additional origin field, I can 
> try doing it.

If you figure out how to eliminate the downloads, great.
If it's too complicated, #:tests? #f could be acceptable, though it
deserves a comment in the source code.

Greetings,
Maxime.
Luis Henrique Gomes Higino Feb. 5, 2022, 7:36 p.m. UTC | #8
Maxime Devos <maximedevos@telenet.be> writes:

> [[PGP Signed Part:Undecided]]
> Luis Henrique Gomes Higino schreef op di 01-02-2022 om 10:04 
> [-0300]:
>
> tree-sitter is bundling some parts of ICU
> (https://github.com/tree-sitter/tree-sitter/tree/master/lib/src/unicode),
> can they be unbundled?
>

I managed to remove the "src/unicode" directory with an origin 
snippet and, after some patching through `substitute*`, I have a 
working build again. I'll be sending the new patch series 
soon. Thanks for your expressive feedback Maxime, learned a lot 
about Guix today :D.
diff mbox series

Patch

diff --git a/gnu/packages/text-editors.scm b/gnu/packages/text-editors.scm
index 2c5f5de719..9273a8f10b 100644
--- a/gnu/packages/text-editors.scm
+++ b/gnu/packages/text-editors.scm
@@ -17,6 +17,7 @@ 
 ;;; Copyright © 2021 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2021 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2021 Calum Irwin <calumirwin1@gmail.com>
+;;; Copyright © 2022 Luis Henrique Gomes Higino <luishenriquegh2701@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1165,3 +1166,47 @@  (define-public virtaal
 provided by the Translate Toolkit, including XLIFF and PO.")
     (home-page "https://virtaal.translatehouse.org/")
     (license license:gpl2+)))
+
+(define-public tree-sitter
+  (package
+    (name "tree-sitter")
+    (version "0.20.4")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/tree-sitter/tree-sitter")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1yldgdbf3l5l4ki52abdf81nwkcbvg219gwr3ydcjwfsg7hf7zhz"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (delete 'configure)
+                  (add-after 'unpack 'fix-hardcoded-paths
+                    (lambda _
+                      (substitute* "Makefile"
+                        (("/usr/local") (assoc-ref %outputs "out"))))))
+       #:tests? #f
+       #:make-flags
+       (list (string-append "prefix="
+                            (assoc-ref %outputs "out"))
+             (string-append "CC="
+                            ,(cc-for-target)))))
+    (home-page "https://tree-sitter.github.io/tree-sitter/")
+    (synopsis "Incremental parsing system for programming tools")
+    (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.  Tree-sitter aims to be:
+
+@itemize
+@item General enough to parse any programming language
+@item Fast enough to parse on every keystroke in a text editor
+@item Robust enough to provide useful results even in the presence of syntax errors
+@item Dependency-free so that the runtime library (which is written in pure C)
+can be embedded in any application
+@end itemize
+")
+    (license license:expat)))