branch: elpa/typst-ts-mode
commit f5de7d33d1b91a9967b0ef527fdda292bf651787
Author: Huan Nguyen <nguyenthieuh...@gmail.com>
Commit: Huan Nguyen <nguyenthieuh...@gmail.com>

    feat: tinymist eglot support
---
 typst-ts-lsp.el  | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 typst-ts-mode.el |  2 +-
 2 files changed, 61 insertions(+), 1 deletion(-)

diff --git a/typst-ts-lsp.el b/typst-ts-lsp.el
new file mode 100644
index 0000000000..220eb28b60
--- /dev/null
+++ b/typst-ts-lsp.el
@@ -0,0 +1,60 @@
+;;; typst-ts-lsp.el --- Eglot tinymist integration  -*- lexical-binding: t; -*-
+;; Copyright (C) 2023 The typst-ts-mode Project Contributors
+
+;; This file is NOT part of Emacs.
+;; This program is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;; Code:
+
+(require 'eglot)
+
+(defgroup typs-ts-lsp nil
+  "Typst TS eglot integration with tinymist."
+  :prefix "typst-ts-compile"
+  :group 'typst-ts)
+
+(defcustom typst-ts-lsp-download-path (file-name-concat 
(locate-user-emacs-file ".cache") "lsp" "tinymist" "tinymist")
+  "Install path for the language server."
+  :group 'tools
+  :group 'typst-ts-lsp
+  :type 'file)
+
+(add-to-list 'eglot-server-programs
+             `((typst-ts-mode)
+               .
+               ,(eglot-alternatives `(,typst-ts-lsp-download-path 
"tinymist"))))
+
+(defun typst-ts-lsp-download-binary ()
+  "Download latest tinymist binary to `typst-ts-lsp-download-path'.
+Will override old versions."
+  (interactive)
+  (unless (file-exists-p typst-ts-lsp-download-path)
+    (make-directory (file-name-directory typst-ts-lsp-download-path) t))
+  (url-copy-file
+   (concat 
"https://github.com/Myriad-Dreamin/tinymist/releases/latest/download/tinymist-";
+           (pcase system-type
+             ('gnu/linux "linux")
+             ('darwin "darwin")
+             ('windows-nt "win32")
+             (_ "linux"))
+           ;; TODO too lazy to find out all the arch suffixes
+           "-x64")
+   typst-ts-lsp-download-path t)
+  (set-file-modes typst-ts-lsp-download-path
+                  (logior (file-modes typst-ts-lsp-download-path) #o100)))
+
+(provide 'typst-ts-lsp)
+;;; typst-ts-lsp.el ends here
diff --git a/typst-ts-mode.el b/typst-ts-mode.el
index 15896330fb..f771f56d75 100644
--- a/typst-ts-mode.el
+++ b/typst-ts-mode.el
@@ -40,7 +40,7 @@
 (require 'typst-ts-watch-mode)
 (require 'typst-ts-edit-indirect)
 (require 'typst-ts-editing)
-
+(require 'typst-ts-lsp)
 (defgroup typst-ts nil
   "Tree Sitter enabled Typst Writing."
   :prefix "typst-ts"

Reply via email to