blob: ab5fd560d428ae3be53300033369b13d28a81db8 (
about) (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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"))
|