[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/haskell-ts-mode 020175db62 16/61: Major changes
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/haskell-ts-mode 020175db62 16/61: Major changes |
Date: |
Wed, 4 Sep 2024 04:00:27 -0400 (EDT) |
branch: elpa/haskell-ts-mode
commit 020175db62a3da11548c206cfcc5688b09bb88ac
Author: Pranshu Sharma <pranshusharma366@gmail.com>
Commit: Pranshu Sharma <pranshusharma366@gmail.com>
Major changes
Added changes such as syntax table
---
README.org | 4 ----
haskell.el | 76 +++++++++++++++++++++++++++++++++++++++++++-------------------
2 files changed, 53 insertions(+), 27 deletions(-)
diff --git a/README.org b/README.org
index 6e4dfa2618..a1ead68de3 100644
--- a/README.org
+++ b/README.org
@@ -4,7 +4,3 @@ A haskell mode that requires treesitter and offers:
- Indentation
- Imenu support
- REPL
-
-* TODO
-- Autoloading
-- Syntax table
diff --git a/haskell.el b/haskell.el
index 7fd313b013..30a0ba3467 100644
--- a/haskell.el
+++ b/haskell.el
@@ -1,10 +1,18 @@
-(require 'treesit)
-(require 'comint)
+(eval-when-compile
+ (require 'treesit)
+ (require 'comint))
+
(declare-function treesit-parser-create "treesit.c")
+(declare-function treesit-induce-sparse-tree "treesit.c")
+(declare-function treesit-node-child "treesit.c")
+(declare-function treesit-node-start "treesit.c")
+(declare-function treesit-node-text "treesit.c")
+(declare-function treesit-node-type "treesit.c")
+(declare-function treesit-search-subtree "treesit.c")
;; TODO change to defvar
-(setq haskell-ts-font-lock
+(defvar haskell-ts-font-lock
(treesit-font-lock-rules
:language 'haskell
:feature 'keyword
@@ -42,12 +50,15 @@
`((char) @font-lock-string-face
(string) @font-lock-string-face)))
-;; TODO change to defvar
-(setq haskell-ts-indent-rules
+(defvar haskell-ts-indent-rules
`((haskell
((node-is "comment") column-0 0)
((parent-is "imports") column-0 0)
+ ;; list
+ ((node-is "]") parent 0)
+ ((parent-is "list") parent 1)
+
;; If then else
((node-is "then") parent 2)
((node-is "^else$") parent 2)
@@ -61,7 +72,6 @@
((node-is "match") prev-sibling 0)
((parent-is "match") grand-parent 2)
-
;; Do Hg
((lambda (node parent bol)
(string= "do" (treesit-node-type (treesit-node-prev-sibling node))))
@@ -89,13 +99,44 @@
(no-node prev-adaptive-prefix 0)
((parent-is "haskell") column-0 0)
((parent-is "declarations") column-0 0)
+
+ ((parent-is "record") grand-parent 0)
+
+ ;; Backup
+ (catch-all parent 2)
)))
+;; Copied from haskell-mode
+(setq haskell-ts-mode-syntax-table
+ (let ((table (make-syntax-table)))
+ (modify-syntax-entry ?\ " " table)
+ (modify-syntax-entry ?\t " " table)
+ (modify-syntax-entry ?\" "\"" table)
+ (modify-syntax-entry ?\' "_" table)
+ (modify-syntax-entry ?_ "_" table)
+ (modify-syntax-entry ?\( "()" table)
+ (modify-syntax-entry ?\) ")(" table)
+ (modify-syntax-entry ?\[ "(]" table)
+ (modify-syntax-entry ?\] ")[" table)
+
+ (modify-syntax-entry ?\{ "(}1nb" table)
+ (modify-syntax-entry ?\} "){4nb" table)
+ (modify-syntax-entry ?- "< 123" table)
+ (modify-syntax-entry ?\n ">" table)
+
+ (modify-syntax-entry ?\` "$`" table)
+
+ (mapc (lambda (x)
+ (modify-syntax-entry x "." table))
+ "!#$%&*+./:<=>?@^|~,;\\")
+ table))
+
;;;###autoload
(define-derived-mode haskell-ts-mode prog-mode "haskell ts mode"
- "Mjaor mode for Haskell files using tree-sitter"
- :group 'haskell
+ "major mode for Haskell files using tree-sitter"
+ :syntax-table haskell-ts-mode-syntax-table
+ :interactive t
(unless (treesit-ready-p 'haskell)
(error "Tree-sitter for Haskell is not available"))
(treesit-parser-create 'haskell)
@@ -109,7 +150,7 @@
(setq-local comment-end-skip "[ \t]*--+}")
(setq-local indent-tabs-mode nil)
(setq-local electric-pair-pairs
- (list (cons ?` ?`) (cons ?( ?)) (cons ?{ ?}) (cons ?' ?') (cons
?" ?")))
+ (list (cons ?` ?`) (cons ?( ?)) (cons ?{ ?}) (cons ?" ?")))
(setq-local treesit-defun-name-function 'haskell-ts-defun-name)
(setq-local treesit-defun-type-regexp "function")
;; Imenu
@@ -126,8 +167,7 @@
(setq-local treesit-font-lock-feature-list
'(( comment str pragma)
(type definition )
- (args function match)
- (keyword)))
+ (args function match keyword)))
(treesit-major-mode-setup))
(defun haskell-ts-imenu-node-p (regex node)
@@ -150,17 +190,6 @@
(defun haskell_ts-imenu-data-type-p (node)
(haskell-ts-imenu-node-p "data_type" node))
-;; (defun haskell-ts-imenu-sig-name-function (node) }}-
-;; (let ((name (treesit-node-text node))) }}-
-;; (if (haskell-ts-imenu-sig-node-p node) }}-
-;; (haskell-ts-defun-name node) }}-
-;; nil))) }}-
-;; (defun haskell-ts-imenu-name-function (node) }}-
-;; (let ((name (treesit-node-text node))) }}-
-;; (if (haskell-ts-imenu-func-node-p node) }}-
-;; (haskell-ts-defun-name node) }}-
-;; nil))) }}-
-
(defun haskell-ts-defun-name (node)
(treesit-node-text (treesit-node-child node 0)))
@@ -183,4 +212,5 @@
(define-key haskell-ts-mode-map (kbd "C-c c") 'haskell-compile-region-and-go)
(define-key haskell-ts-mode-map (kbd "C-c r") 'run-haskell)
-(add-to-list 'auto-mode-alist '("\\.hs\\'" . haskell-ts-mode))
+(when (treesit-ready-p 'haskell)
+ (add-to-list 'auto-mode-alist '("\\.hs\\'" . haskell-ts-mode)))
- [nongnu] elpa/haskell-ts-mode 38595a001e 12/61: Major indent fixes, (continued)
- [nongnu] elpa/haskell-ts-mode 38595a001e 12/61: Major indent fixes, ELPA Syncer, 2024/09/04
- [nongnu] elpa/haskell-ts-mode 00a397204d 32/61: Major changed, to indentation, font lock, ELPA Syncer, 2024/09/04
- [nongnu] elpa/haskell-ts-mode 5178ff240f 13/61: nl indent fix, ELPA Syncer, 2024/09/04
- [nongnu] elpa/haskell-ts-mode 98660f4cce 28/61: Major changes to comment and indent, ELPA Syncer, 2024/09/04
- [nongnu] elpa/haskell-ts-mode b6426584ca 15/61: Major updates, ELPA Syncer, 2024/09/04
- [nongnu] elpa/haskell-ts-mode 3e2e2aa769 14/61: fix comment, ELPA Syncer, 2024/09/04
- [nongnu] elpa/haskell-ts-mode 155bf79867 33/61: more indent fixes, ELPA Syncer, 2024/09/04
- [nongnu] elpa/haskell-ts-mode 113e443752 26/61: Fix quasiquotes, ELPA Syncer, 2024/09/04
- [nongnu] elpa/haskell-ts-mode 9c032dc8c4 44/61: Better formating and general code quality changes, ELPA Syncer, 2024/09/04
- [nongnu] elpa/haskell-ts-mode 1525dc1dc7 06/61: ic, ELPA Syncer, 2024/09/04
- [nongnu] elpa/haskell-ts-mode 020175db62 16/61: Major changes,
ELPA Syncer <=
- [nongnu] elpa/haskell-ts-mode 9f450166d8 39/61: better docu, ELPA Syncer, 2024/09/04
- [nongnu] elpa/haskell-ts-mode 02f280400c 34/61: Added eglot supprt, ELPA Syncer, 2024/09/04
- [nongnu] elpa/haskell-ts-mode 59c4c2a5a6 40/61: pattern matching docu, ELPA Syncer, 2024/09/04
- [nongnu] elpa/haskell-ts-mode 58d158bef4 45/61: More linting, ELPA Syncer, 2024/09/04
- [nongnu] elpa/haskell-ts-mode 998fc309bd 50/61: General code changes, ELPA Syncer, 2024/09/04
- [nongnu] elpa/haskell-ts-mode 834f15a29d 42/61: temp, ELPA Syncer, 2024/09/04
- [nongnu] elpa/haskell-ts-mode 4cf9f99d93 51/61: More changes, ELPA Syncer, 2024/09/04
- [nongnu] elpa/haskell-ts-mode dd16b23b60 56/61: Fixed comment problems, ELPA Syncer, 2024/09/04
- [nongnu] elpa/haskell-ts-mode 9566f23699 60/61: new indent funciton, ELPA Syncer, 2024/09/04
- [nongnu] elpa/haskell-ts-mode c2d4c88738 57/61: run haskell changes, ELPA Syncer, 2024/09/04