me
/
guix
Archived
1
0
Fork 0

gnu: tree-sitter-grammar: Extend functionality.

* gnu/packages/tree-sitter.scm (tree-sitter-delete-generated-files): Add
support for grammar-directories.
(tree-sitter-grammar): Add support for grammar-directories, license, article,
reorder and rename arguments, update description and synopsis generation
logic.
(tree-sitter-html): Migrate to new tree-sitter-grammar.
Andrew Tropin 2023-02-14 13:02:43 +04:00
parent 542fcc3dfe
commit 76ac9edb0d
No known key found for this signature in database
GPG Key ID: 2208D20958C1DEB0
1 changed files with 35 additions and 17 deletions

View File

@ -188,26 +188,42 @@ can be embedded in any application.
This package includes the @command{tree-sitter} command-line tool.") This package includes the @command{tree-sitter} command-line tool.")
(license license:expat))) (license license:expat)))
(define tree-sitter-delete-generated-files (define (tree-sitter-delete-generated-files grammar-directories)
#~(begin #~(begin
(use-modules (guix build utils)) (use-modules (guix build utils))
(delete-file "binding.gyp") (delete-file "binding.gyp")
(delete-file-recursively "bindings") (delete-file-recursively "bindings")
(delete-file "src/grammar.json") (for-each
(delete-file "src/node-types.json") (lambda (lang)
(delete-file "src/parser.c") (with-directory-excursion lang
(delete-file-recursively "src/tree_sitter"))) (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 (define* (tree-sitter-grammar
language language-for-synopsis version commit hash name text hash version
#:key #:key
(commit (string-append "v" version))
(repository-url (repository-url
(format #f "https://github.com/tree-sitter/tree-sitter-~a" (format #f "https://github.com/tree-sitter/tree-sitter-~a" name))
language)) (grammar-directories '("."))
(inputs '())) (article "a")
(let ((synopsis (string-append language-for-synopsis (inputs '())
" grammar for tree-sitter")) (license license:expat))
(name (string-append "tree-sitter-" language))) "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."
(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 (package
(name name) (name name)
(version version) (version version)
@ -219,15 +235,17 @@ This package includes the @command{tree-sitter} command-line tool.")
(commit commit))) (commit commit)))
(file-name (git-file-name name version)) (file-name (git-file-name name version))
(sha256 (base32 hash)) (sha256 (base32 hash))
(snippet tree-sitter-delete-generated-files))) (snippet
(tree-sitter-delete-generated-files grammar-directories))))
(build-system tree-sitter-build-system) (build-system tree-sitter-build-system)
(arguments (list #:grammar-directories grammar-directories))
(inputs inputs) (inputs inputs)
(synopsis synopsis) (synopsis synopsis)
(description (string-append synopsis ".")) (description description)
(license license:expat)))) (license license))))
(define-public tree-sitter-html (define-public tree-sitter-html
(tree-sitter-grammar (tree-sitter-grammar
"html" "HTML" "html" "HTML"
"0.19.0" "v0.19.0" "1hg7vbcy7bir6b8x11v0a4x0glvqnsqc3i2ixiarbxmycbgl3axy"
"1hg7vbcy7bir6b8x11v0a4x0glvqnsqc3i2ixiarbxmycbgl3axy")) "0.19.0"))