Files
doomemacs/modules/lang/scala/config.el
2025-05-22 19:50:29 +02:00

80 lines
2.0 KiB
EmacsLisp

;;; lang/scala/config.el -*- lexical-binding: t; -*-
(after! projectile
(add-to-list 'projectile-project-root-files "build.sbt"))
;;
;;; Packages
(defun +scala-common-config (mode)
(set-formatter! 'scalafmt '("scalafmt" "--stdin")
:modes (list mode))
(set-repl-handler! mode #'+scala/open-repl
:persist t)
(set-ligatures! mode
;; Functional
:def "def"
:composition "compose"
;; HKT
:lambda "Lambda"
;; Types
:null "none"
:null "None"
:true "true"
:false "false"
:int "Int"
:str "String"
:float "Float"
:bool "Boolean"
:list "List"
;; Flow
:for "for"
:not "!"
:and "&&"
:or "||"
:yield "yield"
;; Other
:union "union"
:intersect "intersect"
:diff "diff")
(when (modulep! +lsp)
(add-hook (intern (format "%s-local-vars-hook" mode)) #'lsp! 'append)))
(after! scala-mode
(setq scala-indent:align-parameters t
;; indent block comments to first asterix, not second
scala-indent:use-javadoc-style t)
(setq-hook! 'scala-mode-hook
comment-line-break-function #'+scala-comment-indent-new-line-fn
lsp-enable-indentation nil)
(+scala-common-config 'scala-mode))
(use-package! scala-ts-mode
:when (modulep! +tree-sitter)
:when (fboundp 'treesit-available-p)
:defer t
:init
(set-tree-sitter! 'scala-mode 'scala-ts-mode
'((scala :url "https://github.com/tree-sitter/tree-sitter-scala")))
:config
(when (modulep! +lsp)
(setq-hook! 'scala-ts-mode-hook lsp-enable-indentation nil)
(add-hook 'scala-ts-mode-local-vars-hook #'lsp! 'append))
;; HACK: Rely on `major-mode-remap-defaults'.
(cl-callf2 assq-delete-all 'scala-ts-mode auto-mode-alist)
(+scala-common-config 'scala-ts-mode))
(use-package! sbt-mode
:after scala-mode
:config (set-repl-handler! '(scala-mode scala-ts-mode) #'+scala/open-repl :persist t))