|
18 | 18 | (require 'pp)
|
19 | 19 | (require 'url)
|
20 | 20 | (require 'tar-mode)
|
| 21 | +(require 'json) |
21 | 22 |
|
22 | 23 | (eval-when-compile
|
23 | 24 | (require 'subr-x)
|
@@ -531,6 +532,39 @@ non-nil."
|
531 | 532 | (when (bound-and-true-p dired-omit-mode)
|
532 | 533 | (dired-omit-mode -1)))))))
|
533 | 534 |
|
| 535 | + |
| 536 | +(defun tree-sitter-langs-get-latest-tag () |
| 537 | + "Retrieve the latest tag for tree-sitter-langs from GitHub. |
| 538 | +In case of retrieval or parsing error, logs an error message and returns nil." |
| 539 | + (condition-case nil |
| 540 | + (with-current-buffer (url-retrieve-synchronously "https://api.github.com/repos/emacs-tree-sitter/tree-sitter-langs/releases/latest" 'silent 'inhibit-cookies) |
| 541 | + (goto-char (point-min)) |
| 542 | + (re-search-forward "^$") |
| 543 | + (delete-region (point) (point-min)) |
| 544 | + (let ((response (json-read))) |
| 545 | + (cdr (assoc 'tag_name response)))) |
| 546 | + (error |
| 547 | + (message "Error retrieving the latest version of tree-sitter-langs.") |
| 548 | + nil))) |
| 549 | + |
| 550 | + |
| 551 | +;;;###autoload |
| 552 | +(defun tree-sitter-langs-install-latest-grammar (&optional skip-if-installed os keep-bundle) |
| 553 | + "Install the latest version of the tree-sitter-langs grammar bundle. |
| 554 | +Automatically retrieves the latest version tag from GitHub. |
| 555 | +If SKIP-IF-INSTALLED is non-nil, skips if the latest version is already installed. |
| 556 | +OS specifies the operating system. |
| 557 | +If KEEP-BUNDLE is non-nil, the downloaded bundle file is not deleted after installation." |
| 558 | + (interactive (list 't tree-sitter-langs--os nil)) |
| 559 | + (message "Fetching the latest version of tree-sitter-langs...") |
| 560 | + (let ((latest-tag (tree-sitter-langs-get-latest-tag))) |
| 561 | + (if latest-tag |
| 562 | + (progn |
| 563 | + (message "Latest version retrieved: %s" latest-tag) |
| 564 | + (tree-sitter-langs-install-grammars skip-if-installed latest-tag os keep-bundle)) |
| 565 | + (message "Failed to retrieve the latest version.")))) |
| 566 | + |
| 567 | + |
534 | 568 | (defun tree-sitter-langs--copy-query (lang-symbol &optional force)
|
535 | 569 | "Copy highlights.scm file of LANG-SYMBOL to `tree-sitter-langs--queries-dir'.
|
536 | 570 | This assumes the repo has already been set up, for example by
|
|
0 commit comments