diff --git a/modules/lang/dart/README.org b/modules/lang/dart/README.org index 5c875e7ab..3fe7ed533 100644 --- a/modules/lang/dart/README.org +++ b/modules/lang/dart/README.org @@ -23,9 +23,13 @@ This module wraps ~dart-mode~, with [[https://microsoft.github.io/language-serve - +lsp :: Enable LSP support for ~dart-mode~. Requires [[doom-module::tools lsp]] and a langserver (supports flutter). +- +tree-sitter :: + Leverages tree-sitter for better syntax highlighting and structural text + editing. Requires [[doom-module::tools tree-sitter]]. ** Packages - [[doom-package:dart-mode]] +- [[doom-package:dart-ts-mode]] if [[doom-module:+tree-sitter]] - [[doom-package:flutter.el]] - [[doom-package:hover.el]] diff --git a/modules/lang/dart/config.el b/modules/lang/dart/config.el index 19f8c9f63..3975f113c 100644 --- a/modules/lang/dart/config.el +++ b/modules/lang/dart/config.el @@ -1,11 +1,7 @@ ;;; lang/dart/config.el -*- lexical-binding: t; -*- -(use-package! dart-mode - :hook (dart-mode . rainbow-delimiters-mode) - :config - (when (modulep! +lsp) - (add-hook 'dart-mode-local-vars-hook #'lsp! 'append)) - (set-ligatures! '(dart-mode) +(defun +dart-common-config (mode) + (set-ligatures! mode ;; Functional :def "Function" :lambda "() =>" @@ -23,7 +19,25 @@ :for "for" :return "return" ;; Other - :yield "yield")) + :yield "yield") + + (when (modulep! +lsp) + (add-hook (intern (format "%s-local-vars-hook" mode)) #'lsp! 'append))) + +(use-package! dart-mode + :hook (dart-mode . rainbow-delimiters-mode) + :config + (+dart-common-config 'dart-mode)) + + +(use-package! dart-ts-mode + :when (modulep! +tree-sitter) + :defer t + :init + (set-tree-sitter! 'dart-mode 'dart-ts-mode + '((dart :url "https://github.com/ast-grep/tree-sitter-dart"))) + :config + (+dart-common-config 'dart-ts-mode)) (use-package! flutter diff --git a/modules/lang/dart/doctor.el b/modules/lang/dart/doctor.el index 74b43a676..3f813bffc 100644 --- a/modules/lang/dart/doctor.el +++ b/modules/lang/dart/doctor.el @@ -4,5 +4,9 @@ (modulep! :tools lsp)) "This module requires (:tools lsp)") +(assert! (or (not (modulep! +tree-sitter)) + (modulep! :tools tree-sitter)) + "This module requires (:tools tree-sitter)") + (unless (executable-find "dart") (warn! "Dart isn't on PATH.")) diff --git a/modules/lang/dart/packages.el b/modules/lang/dart/packages.el index 27f47df62..16641568e 100644 --- a/modules/lang/dart/packages.el +++ b/modules/lang/dart/packages.el @@ -3,6 +3,12 @@ (package! dart-mode :pin "f82ff052309125b93d19bdd3f619266f908f43ce") +(when (modulep! +tree-sitter) + (package! dart-ts-mode + :recipe (:host github + :repo "50ways2sayhard/dart-ts-mode") + :pin "ab87873f25f7e0cc8d22daa2501aae141dbe98ad")) + (when (and (modulep! +lsp) (modulep! :tools lsp -eglot)) (package! lsp-dart :pin "34e2a1191f723792d5f366b314cd6b07de4f1566"))