Fixed up readme and some typos, and added .elpaignore default tip
authorPranshu Sharma <pranshu@bauherren.ovh>
Thu, 12 Dec 2024 23:29:55 +1000
changeset 2 9272314a1c65
parent 1 27f2627e9f2f
Fixed up readme and some typos, and added .elpaignore .elpaignore: Added the file README.org: Formatting changes haskell-ts-mode.el: Remvoed eglot support by default
.elpaignore
README.org
haskell-ts-mode.el
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.elpaignore	Thu Dec 12 23:29:55 2024 +1000
@@ -0,0 +1,3 @@
+ss.png
+README.org
+LICENSE
\ No newline at end of file
--- a/README.org	Thu Dec 12 23:05:57 2024 +1000
+++ b/README.org	Thu Dec 12 23:29:55 2024 +1000
@@ -1,3 +1,5 @@
+#+title: haskell-ts-mode
+#+author: Pranshu Sharma
 
 * haskell-ts-mode
 
@@ -7,16 +9,21 @@
 
 [[./ss.png]]
 
-The above screenshot is indented coloured using haskell-ts-mode, with
-prettify-symbols-mode enabled.
+The above screenshot is indented and coloured using haskell-ts-mode,
+with =prettify-symbols-mode= enabled.
 
 * Usage
 
 =C-c C-r= to open REPL
 =C-c C-c= to send code to repl
-=C-M-q=   Indent paragraph
+=C-M-q=   Indent the function
 
 * Features
+
+say it with me: indentation does not change the syntax-tree.  This
+means that the indenation is a lot more predictable, but sometimes you
+must manually press M-i to indent.
+
 an overview of the features are:
 - Syntax highliting
 - Indentation
@@ -28,19 +35,13 @@
 The more interesting features are:
 - Logical syntax highlighting:
   - Only arguments that can be used in functions are highlighted, eg
-    in `f (_:(a:[])) only 'a' is highlighted, as it is the only
+    in =f (_:(a:[]))= only =a= is highlighted, as it is the only
     variable that is captured that can be used in body of function
   - The return type of a function is highlighted
   - All new variabels are(or should be) highlighted, this includes
     generators, lambda args.
   - highlighting the '=' operaotr in guarded matches correctly, this
     would be stupidly hard in regexp based syntax
-- Unlike haskell-mode, quasi quotes are understood and do not confuse
-  the mode, thanks to treesitter
-- Predictable (but less powerful) indentation: haskell-mode's
-  indentation works in a cyclical way, it cycles through where you
-  might want indentation.  haskell-ts-mode, meanwhile relies on you to
-  set the concrete syntax tree changing whitespace.
 - More perfomant, this is especially seen in longer files
 - Much much less code, haskell mode has accumlated 30,000 lines of
   features to do with all things haskell related, this mode just keeps
@@ -49,12 +50,12 @@
 
 * Motivation
   
-haskell-mode contains nearly 30k lines of code, and is
+=haskell-mode= contains nearly 30k lines of code, and is
 about 30 years old.  Therefore, a lot of stuff emacs has gained the
 ability to do in those years, haskell-mode already has implemented
 them.
 
-In 2018, a mode called haskell-tng-mode was made to solve some of
+In 2018, a mode called =haskell-tng-mode= was made to solve some of
 these problems. However because of haskell's syntax, it too became
 very complex and required a web of dependencies.
 
@@ -74,7 +75,7 @@
 * Customization
 
 If colour is too much or too less for you, adjust
-treesit-font-lock-level accordingly.
+=treesit-font-lock-level= accordingly.
 
 If you want to highlight signature declarations (disabled by default),
 add the following to your init file:
@@ -89,7 +90,7 @@
 #+end_src
 
 ** Pretify symbols mode
-prettify symbols mode can be used to replace common symbols with
+=prettify-symbols-mode= can be used to replace common symbols with
 unicode alternatives.
 
 #+begin_src emacs-lisp
@@ -97,23 +98,26 @@
 #+end_src
 
 ** Adjusting font lock level
-set haskell-ts-font-lock-level accordingly.
+set =haskell-ts-font-lock-level= accordingly.  Default value is 4, so if
+you suffer from contagious dehydration, you can lower it.
 
 ** Language server
 
-haskell-ts-mode is compatiable with lsp-haskell.
+=haskell-ts-mode= now works with =lsp-mode=, however =lsp-haskell= still requires on =haskell-mode=.
+
+To add =eglot= support, add the following code to you init.el:
 
-To enable eglot support, use the following code in your init.el:
 #+begin_src emacs-lisp
-(with-eval-after-load 'eglot (haskell-ts-setup-eglot))
+  (with-eval-after-load 'eglot
+    (defvar eglot-server-programs)
+    (add-to-list 'eglot-server-programs
+  	       '(haskell-ts-mode . ("haskell-language-server-wrapper" "--lsp"))))
 #+end_src
 
-* TODO and limitations
+* TODO
 - Imenu support for functions with multiple definitions
-
-Limitations: _Proper indenting of multiline signatures_: the
-treesitter grammer does not flatten the signautes, rather leaves them
-to the standard infix interpretatoin. This makes indentation hard, as
-it will mean the only way to check if the the signature node is an
-ancestor of node at point is to perfom a recursive ascent, which is
-horrible for perfomance.
+- _Proper indenting of multiline signatures_: the treesitter grammer
+  does not flatten the signautes, rather leaves them to the standard
+  infix interpretatoin. This makes indentation hard, as it will mean
+  the only way to check if the the signature node is an ancestor of
+  node at point is to perfom a recursive ascent.
--- a/haskell-ts-mode.el	Thu Dec 12 23:05:57 2024 +1000
+++ b/haskell-ts-mode.el	Thu Dec 12 23:29:55 2024 +1000
@@ -358,10 +358,10 @@
   (setq-local comment-start "-- ")
   (setq-local comment-use-syntax t)
   (setq-local comment-start-skip "\\(?: \\|^\\)-+")
-  ;; Elecric
+  ;; Electric
   (setq-local electric-pair-pairs
 	      '((?` . ?`) (?\( . ?\)) (?{ . ?}) (?\" . ?\") (?\[ . ?\])))
-  ;; Nav
+  ;; Navigation
   (setq-local treesit-defun-name-function 'haskell-ts-defun-name)
   (setq-local treesit-defun-type-regexp
 	      ;; Since haskell is strict functional, any 2nd level
@@ -438,13 +438,6 @@
 (defun haskell-ts-haskell-session ()
   (get-buffer-process "*haskell*"))
 
-(defvar eglot-server-programs)
-
-(defun haskell-ts-setup-eglot()
-  (interactive)
-  (add-to-list 'eglot-server-programs
-	       '(haskell-ts-mode . ("haskell-language-server-wrapper" "--lsp"))))
-
 (when (treesit-ready-p 'haskell)
   (add-to-list 'auto-mode-alist '("\\.hs\\'" . haskell-ts-mode)))