summaryrefslogtreecommitdiff
path: root/rodion/packages/tree-sitter.scm
diff options
context:
space:
mode:
authorRodion Goritskov <rodion.goritskov@gmail.com>2024-03-03 20:54:22 +0400
committerRodion Goritskov <rodion.goritskov@gmail.com>2024-03-03 20:54:22 +0400
commit6a5426e063cc59f4775cc879b9d2e803da491f02 (patch)
tree641066ec12e60bbc20dc1800a61ceafc1ba4beca /rodion/packages/tree-sitter.scm
parentdbff02ec9d49d670922a5a2b24b6faee7dadc801 (diff)
Add tree-sitter-yaml
Diffstat (limited to 'rodion/packages/tree-sitter.scm')
-rw-r--r--rodion/packages/tree-sitter.scm75
1 files changed, 75 insertions, 0 deletions
diff --git a/rodion/packages/tree-sitter.scm b/rodion/packages/tree-sitter.scm
new file mode 100644
index 0000000..ab5fd56
--- /dev/null
+++ b/rodion/packages/tree-sitter.scm
@@ -0,0 +1,75 @@
+(define-module (rodion packages tree-sitter)
+ #:use-module ((guix licenses) #:prefix license:)
+ #:use-module (guix packages)
+ #:use-module (guix git-download)
+ #:use-module (guix gexp)
+ #:use-module (guix build-system tree-sitter)
+ #:use-module (guix build utils))
+
+(define (tree-sitter-delete-generated-files grammar-directories)
+ #~(begin
+ (use-modules (guix build utils))
+ (delete-file "binding.gyp")
+ (delete-file-recursively "bindings")
+ (for-each
+ (lambda (lang)
+ (with-directory-excursion lang
+ (delete-file "src/grammar.json")
+ (delete-file "src/node-types.json")
+ (delete-file "src/parser.c")
+ (delete-file-recursively "src/tree_sitter")))
+ '#$grammar-directories)))
+
+(define* (tree-sitter-grammar
+ name text hash version
+ #:key
+ (commit (string-append "v" version))
+ (repository-url
+ (format #f "https://github.com/tree-sitter/tree-sitter-~a" name))
+ (grammar-directories '("."))
+ (article "a")
+ (inputs '())
+ (get-cleanup-snippet tree-sitter-delete-generated-files)
+ (license license:expat))
+ "Returns a package for Tree-sitter grammar. NAME will be used with
+tree-sitter- prefix to generate package name and also for generating
+REPOSITORY-URL value if it's not specified explicitly, TEXT is a string which
+will be used in description and synopsis. GET-CLEANUP-SNIPPET is a function,
+it recieves GRAMMAR-DIRECTORIES as an argument and should return a G-exp,
+which will be used as a snippet in origin."
+ (let* ((multiple? (> (length grammar-directories) 1))
+ (grammar-names (string-append text " grammar" (if multiple? "s" "")))
+ (synopsis (string-append "Tree-sitter " grammar-names))
+ (description
+ (string-append "This package provides "
+ (if multiple? "" article) (if multiple? "" " ")
+ grammar-names " for the Tree-sitter library."))
+ (name (string-append "tree-sitter-" name)))
+ (package
+ (name name)
+ (version version)
+ (home-page repository-url)
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url repository-url)
+ (commit commit)))
+ (file-name (git-file-name name version))
+ (sha256 (base32 hash))
+ (snippet
+ (get-cleanup-snippet grammar-directories))))
+ (build-system tree-sitter-build-system)
+ (arguments (list
+ #:grammar-directories grammar-directories
+ #:tests? #f))
+ (inputs inputs)
+ (synopsis synopsis)
+ (description description)
+ (license license))))
+
+(define-public tree-sitter-yaml
+ (tree-sitter-grammar
+ "yaml" "YAML"
+ "1bimf5fq85wn8dwlk665w15n2bj37fma5rsfxrph3i9yb0lvzi3q"
+ "0.5.0"
+ #:repository-url "https://github.com/ikatyang/tree-sitter-yaml"))