all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Andrew Tropin <andrew@trop.in>
To: Zheng Junjie <zhengjunjie@iscas.ac.cn>, 66761-done@debbugs.gnu.org
Subject: bug#66761: [PATCH] gnu: Add guile-ts.
Date: Fri, 27 Oct 2023 16:24:44 +0400	[thread overview]
Message-ID: <87il6s6ynn.fsf@trop.in> (raw)
In-Reply-To: <2a31bb8b9704c7895a2c477543e294d7ded62005.1698332599.git.zhengjunjie@iscas.ac.cn>

[-- Attachment #1: Type: text/plain, Size: 4569 bytes --]

On 2023-10-26 23:03, Zheng Junjie wrote:

> * gnu/packages/guile-xyz.scm (guile-ts): New variable.
>
> Change-Id: Icb681b6f2e5f2318291e5a4a4ff05d2cbbcf1856
> ---
>  gnu/packages/guile-xyz.scm | 46 ++++++++++++++++++++++++++++++++++++++
>  1 file changed, 46 insertions(+)
>
> diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm
> index 90f51cf741..0a2e0a04ae 100644
> --- a/gnu/packages/guile-xyz.scm
> +++ b/gnu/packages/guile-xyz.scm
> @@ -119,6 +119,7 @@ (define-module (gnu packages guile-xyz)
>    #:use-module (gnu packages tex)
>    #:use-module (gnu packages texinfo)
>    #:use-module (gnu packages tls)
> +  #:use-module (gnu packages tree-sitter)
>    #:use-module (gnu packages version-control)
>    #:use-module (gnu packages webkit)
>    #:use-module (gnu packages xdisorg)
> @@ -4588,6 +4589,51 @@ (define-public guile-torrent
>  according to Bitorrent BEP003.")
>      (license license:gpl3+)))
>  
> +(define-public guile-ts
> +  (package
> +    (name "guile-ts")
> +    (version "0.1.0")
> +    (source (origin (method git-fetch)
> +                    (uri (git-reference
> +                          (url
> +                           "https://github.com/Z572/guile-ts")
> +                          (commit (string-append "v" version))))
> +                    (file-name (git-file-name name version))
> +                    (sha256
> +                     (base32
> +                      "0xmq2d3mv921m0g1hqw6bjzh4m622g2c7pal11ks7vjn0m8d4bxj"))))
> +    (build-system gnu-build-system)
> +    (arguments
> +     (list #:make-flags #~(list "GUILE_AUTO_COMPILE=0")
> +           #:phases
> +           #~(modify-phases %standard-phases
> +               (add-after 'unpack 'set-extension-path
> +                 (lambda* (#:key outputs #:allow-other-keys)
> +                   (substitute*
> +                       (find-files "." ".*\\.scm")
> +                     (("\\(load-extension \"libguile_ts\" *\"(.*)\"\\)" _ o)
> +                      (string-append
> +                       (object->string
> +                        `(or (false-if-exception
> +                              (load-extension "libguile_ts" ,o))
> +                             (load-extension
> +                              ,(string-append
> +                                #$output
> +                                "/lib/libguile_ts.so")
> +                              ,o)))))))))))
> +    (native-inputs
> +     (list autoconf automake
> +           libtool
> +           texinfo
> +           pkg-config
> +           guile-3.0))
> +    (inputs (list guile-3.0 tree-sitter))
> +    (synopsis "Guile bindings to the Tree-sitter parsing library")
> +    (description "This package provides Guile bindings to the Tree-sitter
> +parsing library.")
> +    (home-page "https://github.com/Z572/guile-ts")
> +    (license license:gpl3+)))
> +
>  (define-public guile-irc
>    (let ((commit "7d08ce6fdcb87ac668c5d3bfd5584247805507bb")
>          (revision "1"))
>
> base-commit: 33f5b747b4a0a508e1ffc94a5bf425cff707c6e3

Tested the package with a following snippet of code:

--8<---------------cut here---------------start------------->8---
(use-modules (ts) (oop goops))
(define json-language
  (get-ts-language-from-file
   ;; Can be obtained automatically from TREE_SITTER_GRAMMAR_PATH
   "/gnu/store/537371mad55g34lkmzs3fzp33wh6kidk-profile/lib/tree-sitter/libtree-sitter-json.so"
   "tree_sitter_json"))
(display (ts-language-version json-language))

 (let* ((parser (make <ts-parser> #:language json-language))
        (tree (ts-parser-parse-string parser #f "[1,null, \"hi\"]")))
   (format #t "~s\n" (ts-node-sexp (ts-tree-root-node tree))))
--8<---------------cut here---------------end--------------->8---

guix shell guile guile-ts tree-sitter-json -- guile -s tmp.scm

Added native-search-paths to the package, so if it's installed in the
profile with tree-sitter grammars they are added to respective
environment variable.

--8<---------------cut here---------------start------------->8---
    (native-search-paths
     (list (search-path-specification
            (variable "TREE_SITTER_GRAMMAR_PATH")
            (files '("lib/tree-sitter")))))
--8<---------------cut here---------------end--------------->8---

Thank you for working on tree-sitter bindings, appreciate it very much!

Applied, slightly modified, pushed:
https://git.savannah.gnu.org/cgit/guix.git/commit/?id=fca99c89b8

-- 
Best regards,
Andrew Tropin

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

      reply	other threads:[~2023-10-27 12:26 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-26 15:03 [bug#66761] [PATCH] gnu: Add guile-ts Zheng Junjie
2023-10-27 12:24 ` Andrew Tropin [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87il6s6ynn.fsf@trop.in \
    --to=andrew@trop.in \
    --cc=66761-done@debbugs.gnu.org \
    --cc=zhengjunjie@iscas.ac.cn \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.