diff mbox series

[bug#49946,v5,01/27] gnu: tree-sitter: Move to its own module.

Message ID 20220329194318.6106-2-pierre.langlois@gmx.com
State New
Headers show
Series gnu: Add tree-sitter for emacs. | expand

Commit Message

Pierre Langlois March 29, 2022, 7:42 p.m. UTC
* gnu/packages/text-editors.scm (tree-sitter): Move to ...
* gnu/packages/tree-sitter.scm: ... here, a new module.
* gnu/packages/vim.scm: Use (gnu packages tree-sitter).
* gnu/local.mk (GNU_SYSTEM_MODULES): Register tree-sitter.scm new module.
---
 gnu/local.mk                  |  1 +
 gnu/packages/text-editors.scm | 52 -----------------------
 gnu/packages/tree-sitter.scm  | 78 +++++++++++++++++++++++++++++++++++
 gnu/packages/vim.scm          |  1 +
 4 files changed, 80 insertions(+), 52 deletions(-)
 create mode 100644 gnu/packages/tree-sitter.scm

--
2.34.0

Comments

M March 29, 2022, 7:57 p.m. UTC | #1
Pierre Langlois schreef op di 29-03-2022 om 20:42 [+0100]:
> -(define-public tree-sitter
> -  (package

Is my local guix too old, or is this package not yet in guix?

Greetings,
Maxime.
M March 29, 2022, 7:58 p.m. UTC | #2
Pierre Langlois schreef op di 29-03-2022 om 20:42 [+0100]:
> -@item Dependency-free so that the runtime library (which is written in pure C)

It probably depends on glibc library, so strictly speaking this is
probably not technically correct ... but maybe good enough?

Greetings,
Maxime.
M March 29, 2022, 8:23 p.m. UTC | #3
Maxime Devos schreef op di 29-03-2022 om 21:57 [+0200]:
> Pierre Langlois schreef op di 29-03-2022 om 20:42 [+0100]:
> > -(define-public tree-sitter
> > -  (package
> 
> Is my local guix too old, or is this package not yet in guix?

Nevermind, looks like my Guix was too old.
Pierre Langlois May 15, 2022, 1:16 p.m. UTC | #4
Maxime Devos <maximedevos@telenet.be> writes:

> [[PGP Signed Part:Undecided]]
> Pierre Langlois schreef op di 29-03-2022 om 20:42 [+0100]:
>> -@item Dependency-free so that the runtime library (which is written in pure C)
>
> It probably depends on glibc library, so strictly speaking this is
> probably not technically correct ... but maybe good enough?

Oh actually, looking at a generated parser.c file, that statement appears to be
true, I was also surprised.  The generated C code looks like a huge
table of rules, so it's more data than code really. For example:
https://raw.githubusercontent.com/tree-sitter/tree-sitter-c/master/src/parser.c

I suppose it was easier to generate C code and compile it, rather than
define a custom binary format.

Thanks,
Pierre
diff mbox series

Patch

diff --git a/gnu/local.mk b/gnu/local.mk
index a704161abc..03972441e6 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -587,6 +587,7 @@  GNU_SYSTEM_MODULES =				\
   %D%/packages/tmux.scm				\
   %D%/packages/toolkits.scm			\
   %D%/packages/tor.scm				\
+  %D%/packages/tree-sitter.scm			\
   %D%/packages/tv.scm				\
   %D%/packages/uglifyjs.scm			\
   %D%/packages/uml.scm				\
diff --git a/gnu/packages/text-editors.scm b/gnu/packages/text-editors.scm
index 7cbad042c9..ddbfef3e77 100644
--- a/gnu/packages/text-editors.scm
+++ b/gnu/packages/text-editors.scm
@@ -63,7 +63,6 @@  (define-module (gnu packages text-editors)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages haskell-xyz)
-  #:use-module (gnu packages icu4c)
   #:use-module (gnu packages image)
   #:use-module (gnu packages libbsd)
   #:use-module (gnu packages libreoffice)
@@ -1167,54 +1166,3 @@  (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.6")
-    (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
-                "1z20518snyg0zp75qgs5bxmzjqws4dd19vnp6sya494za3qp5b6d"))
-              (modules '((guix build utils)))
-              (snippet '(begin
-                          ;; Remove bundled ICU parts
-                          (delete-file-recursively "lib/src/unicode")
-                          #t))))
-    (build-system gnu-build-system)
-    (inputs (list icu4c))
-    (arguments
-     (list #:phases
-           '(modify-phases %standard-phases
-              (delete 'configure))
-           #:tests? #f ; there are no tests for the runtime library
-           #:make-flags
-           #~(list (string-append "PREFIX="
-                                  #$output)
-                   (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
-
-This package includes the @code{libtree-sitter} runtime library.
-")
-    (license license:expat)))
diff --git a/gnu/packages/tree-sitter.scm b/gnu/packages/tree-sitter.scm
new file mode 100644
index 0000000000..7116a10ed7
--- /dev/null
+++ b/gnu/packages/tree-sitter.scm
@@ -0,0 +1,78 @@ 
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2022 Luis Henrique Gomes Higino <luishenriquegh2701@gmail.com>
+;;; Copyright © 2022 Pierre Langlois <pierre.langlois@gmx.com>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages tree-sitter)
+  #:use-module (guix gexp)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix git-download)
+  #:use-module (guix packages)
+  #:use-module (guix utils)
+  #:use-module (gnu packages icu4c))
+
+(define-public tree-sitter
+  (package
+    (name "tree-sitter")
+    (version "0.20.6")
+    (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
+                "1z20518snyg0zp75qgs5bxmzjqws4dd19vnp6sya494za3qp5b6d"))
+              (modules '((guix build utils)))
+              (snippet '(begin
+                          ;; Remove bundled ICU parts
+                          (delete-file-recursively "lib/src/unicode")
+                          #t))))
+    (build-system gnu-build-system)
+    (inputs (list icu4c))
+    (arguments
+     (list #:phases
+           '(modify-phases %standard-phases
+              (delete 'configure))
+           #:tests? #f ; there are no tests for the runtime library
+           #:make-flags
+           #~(list (string-append "PREFIX="
+                                  #$output)
+                   (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
+
+This package includes the @code{libtree-sitter} runtime library.
+")
+    (license license:expat)))
diff --git a/gnu/packages/vim.scm b/gnu/packages/vim.scm
index bc5e36c6f2..f2fc39586e 100644
--- a/gnu/packages/vim.scm
+++ b/gnu/packages/vim.scm
@@ -71,6 +71,7 @@  (define-module (gnu packages vim)
   #:use-module (gnu packages tcl)
   #:use-module (gnu packages text-editors)
   #:use-module (gnu packages terminals)
+  #:use-module (gnu packages tree-sitter)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xorg))