[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/scala-mode 6c257f6 057/217: Enhanced support for comments
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/scala-mode 6c257f6 057/217: Enhanced support for comments and multi-line strings, including |
Date: |
Sun, 29 Aug 2021 11:30:43 -0400 (EDT) |
branch: elpa/scala-mode
commit 6c257f60de7988b73bb350add884f5b3109ab0cb
Author: Heikki Vesalainen <heikkivesalainen@yahoo.com>
Commit: Heikki Vesalainen <heikkivesalainen@yahoo.com>
Enhanced support for comments and multi-line strings, including
- indenting of comments
- paragraph movement
- filling
See README.md for details
---
README.md | 169 ++++++++++++++++++++++++++++++++++++++++--------
scala-mode-indent.el | 48 +++++++++++++-
scala-mode-map.el | 7 +-
scala-mode-paragraph.el | 121 ++++++++++++++++++++++++++++++++++
scala-mode.el | 57 +++-------------
5 files changed, 320 insertions(+), 82 deletions(-)
diff --git a/README.md b/README.md
index dc38997..92f7193 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
# scala-mode2 — A new scala-mode for emacs
This is a new scala major mode for emacs 24. It is a complete rewrite
-based on scala language specification 2.9.
+based on the *Scala Language Specification 2.9*.
The mode intends to provide the basic emacs support, including
- indenting of code, comments and multi-line strings
@@ -18,14 +18,14 @@ standard emacs motions work ofcourse.
The mode has been developed on 24.2 and uses features not available
in emacs prior to version 24.
-2. Download the files to a local directory, you can use the *git*
-command. This will create a directory called scala-mode2.
+2. Download the files to a local directory. You can use the *git clone*
+command, this will create a new directory called scala-mode2.
```
-> git clone git://github.com/hvesalai/scala-mode2.git
+git clone git://github.com/hvesalai/scala-mode2.git
```
-3. Include the following in your '.emacs' file. If you have been
-using the old scala-mode, make sure it is no longer in load-path.
+3. Include the following in your `.emacs` file. If you have been
+using the old scala-mode, make sure it is no longer in *load-path*.
```
(add-to-list 'load-path "/path/to/scala-mode2/")
(require 'scala-mode)
@@ -34,12 +34,9 @@ using the old scala-mode, make sure it is no longer in
load-path.
4. That's it. Next you can start emacs and take a look at the
customization menu for scala-mode (use **M-x** *customize-mode* when
in scala-mode or use **M-x** *customize-variable* to customize one
-variable).
-
-Free emacs tip: if you are using emacs from a text terminal with dark
-background and you are having trouble with colors, try setting the
-customization variable *frame-background-mode* to *dark* (use **M-x**
-*customize-variable*).
+variable). Also be sure to check the customization tips on various
+keyboard commands and general emacs parameters which cannot be
+modified from the scala-mode customization menu.
## Indenting modes
@@ -63,7 +60,7 @@ val x = List(1, 2, 3)
```
The *operators* and *eager* modes will indent the second row in the
-following code, as the first line ends with opchar.
+following code, as the first line ends with an operator character.
```
val x = 20 +
@@ -72,18 +69,18 @@ val x = 20 +
The *reluctant* mode (default) will not indent the line in either
case. However, all three modes will indent the second line in these
-examples as specified by the *Scala Language Specification*, section
-1.2.
+examples as it is clear that the first line cannot terminate a statement
+(see the *Scala Language Specification 2.9*, section 1.2).
```
val x = List(0, 1, 2, 3, 4, 5, 6, 7, 8, 9).
- map (x => x + 1) // last token of previous line can not terminate a statement
+ map (x => x + 1) // last token of previous line cannot terminate a statement
val y = (List(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
map (x => x + 1)) // inside 'newlines disabled' region
```
-You can use empty lines in *eager* mode to stop it from indenting a
+You can use empty lines in the *eager* mode to stop it from indenting a
line. For example
```
@@ -95,8 +92,8 @@ val y = foo("bar")
("zot", "kala") // a tuple
```
-However, in all three modes pressing **tab** key repeatedly on a line
-will toggle between the modes.
+However, in all three modes pressing the **tab** key repeatedly on a
+line will toggle between the modes.
### Value expressions (scala-indent:indent-value-expression)
@@ -189,29 +186,144 @@ val xs = for (i <- 1 to 10)
yield i
```
+## Indenting multi-line comments
+
+The start of a multi-line comment is indented to the same level with
+code.
+
+If a multi-line comment begins with `/**` it is considered to be a
+scaladoc comment. Scaladoc comments are indented acording to the
+scaladoc style guide.
+
+```
+/** This is a scaladoc comment.
+ * 2nd line.
+ */
+```
+
+Other multi-line comments are indented under the first asterix.
+
+```
+/****
+ * Supercalifragilistic-
+ * expialidocious!
+ */
+
+/*
+ A comment
+ */
+```
+
+## Filling (i.e. word wrap)
+
+Paragraph *filling* (emacs jargon for word wrap) is supported for
+comments and multi-line strings. Auto-fill is not supported yet.
+
+To re-fill a paragraph, use the *fill-paragraph* command ( **M-q**
+). As always, the column at which to wrap is controlled by the
+*fill-column* variable, which you set it with the *set-fill-column*
+command. To set the default, you use the *customize-variable* command
+or a mode-hook.
+
## Motion
-Basic emacs motion will work as expected. The *forward-sexp* and
-*backward-sexp* ( **M-C-f**, **M-C-b** ) motion commands will move over
-reserved words, literals, ids and lists.
+Basic emacs motion will work as expected.
+
+Text paragraph motion (i.e. *forward-paragraph*, *backward-paragraph*)
+works inside comments and multi-line strings, and it respect scaladoc's
+wiki-style markup.
+
+The commands *forward-sexp* and *backward-sexp* ( **M-C-f**, **M-C-b**
+) motion commands will move over reserved words, literals, ids and
+lists.
+
+## Keymap and other commands
+
+For the sake of customizability, scala-mode does not alter the default
+emacs keymap beyond what is absolutely necessary. However, you can customize
+the mode through the scala-mode-hook. Here are some suggested modification
+you may want to try. Just copy-paste it to your `.emacs` file.
+
+```lisp
+(add-hook 'scala-mode-hook '(lambda ()
+
+ ;; Bind the 'newline-and-indent' command to RET (aka 'enter'). This
+ ;; is normally also available as C-j. The 'newline-and-indent'
+ ;; command has the following functionality: 1) it removes trailing
+ ;; whitespace from the current line, 2) it create a new line, and 3)
+ ;; indents it. An alternative is the
+ ;; 'reindent-then-newline-and-indent' command.
+ (local-set-key (kbd "RET") 'newline-and-indent)
+
+ ;; Bind the 'join-line' command to C-M-j. This command is normally
+ ;; bound to M-^ which is hard to access, especially on some European
+ ;; keyboards. The 'join-line' command has the effect or joining the
+ ;; current line with the previous while fixing whitespace at the
+ ;; joint.
+ (local-set-key (kbd "C-M-j") 'join-line)
+
+ ;; Bind the backtab (shift tab) to
+ ;; 'scala-indent:indent-with-reluctant-strategy command. This is usefull
+ ;; when using the 'eager' mode by default and you want to "outdent" a
+ ;; code line as a new statement.
+ (local-set-key (kbd "<backtab>")
'scala-indent:indent-with-reluctant-strategy)
+
+ ;; Add the scalaindent:indent-scaladoc-asterisk
+ ;; post-self-insert-hook which indents the multi-line comment
+ ;; asterisk to its correct place when you type it. It also adds a
+ ;; space after the asterisk if the parameter to the function is
+ ;; t. If you don't want the space, replace t with nil.
+ (add-hook 'post-self-insert-hook
+ '(lambda () (scala-mode:indent-scaladoc-asterisk t)))
+
+ ;; and other bindings here
+))
+```
+
+## Whitespace
+
+Emacs has a very nice minor mode for highlighting bad whitespace and
+removing any unwanted whitespace when you save a file. To use it, add
+this to your .emacs file.
+
+```lisp
+(add-hook 'scala-mode-hook '(lambda ()
+ (require 'whitespace)
+
+ ;; clean-up whitespace at save
+ (make-local-variable 'before-save-hook)
+ (add-hook 'before-save-hook 'whitespace-cleanup)
+
+ ;; turn on highlight. To configure what is highlighted, customize
+ ;; the *whitespace-style* variable. A sane set of things to
+ ;; highlight is: face, tabs, trailing
+ (whitespace-mode)
+))
+```
+
+Since scala is indented with two spaces, scala-mode2 does not use tabs
+at all for indents by default. If you want to turn on tabs mode, you
+can do so in the mode hook (set *indent-tabs-mode* to t).
## Code highlighting
Highlighting code is still a work in progress. Feedback on how it
should work is welcomed as issues to this github project.
+Free emacs tip: if you are using emacs from a text terminal with dark
+background and you are having trouble with colors, try setting the
+customization variable *frame-background-mode* to *dark* (use **M-x**
+*customize-variable*).
+
## Other features
-- supports multi-line strings both in highlight and movement
- highlights only properly formatted string and character constants
-- fills scaladoc comments properly ( **M-q** )
- indenting a code line removes trailing whitespace
## Future work
-- indent scaladoc left margin correctly (currently scaladoc is not
- indented at all)
-- fill row comments after code properly (currently produces error)
-- indent and fill multi-line strings with margin correctly
+- beginning-of-defun, end-of-defun
+- indent case, etc after they are typed (use first space as self-insert-hook)
+- indent multi-line strings with margin correctly
- movement commands to move to previous or next definition (val,
var, def, class, trait, object)
- highlight headings and annotations inside scaladoc specially (use
@@ -229,3 +341,4 @@ Contributors and valuable feedback:
- Ray Racine
- Eiríkr Åsheim (aka Erik Osheim)
- Seth Tisue
+- Gary Pamparà
\ No newline at end of file
diff --git a/scala-mode-indent.el b/scala-mode-indent.el
index 72f4a7b..47772d7 100644
--- a/scala-mode-indent.el
+++ b/scala-mode-indent.el
@@ -668,6 +668,14 @@ anchored at 'anchor'."
; (message "normal at %d" (current-column))
0)))
+(defun scala-indent:goto-line-comment-anchor (&optional pos)
+ "Goto and return the position relative to which a line comment
+will be indented. This will be the start of the line-comment on
+previous line, if any."
+ (if (and (looking-at "\\s *//")
+ (forward-comment -1))
+ (point)))
+
;;;
;;; Indentation engine
;;;
@@ -701,7 +709,8 @@ nothing was applied."
point 'point'. Returns the new column, or nil if the indent
cannot be determined."
(or (scala-indent:apply-indent-rules
- `((scala-indent:goto-open-parentheses-anchor
scala-indent:resolve-open-parentheses-step)
+ `((scala-indent:goto-line-comment-anchor 0)
+ (scala-indent:goto-open-parentheses-anchor
scala-indent:resolve-open-parentheses-step)
(scala-indent:goto-for-enumerators-anchor
scala-indent:resolve-list-step)
(scala-indent:goto-forms-align-anchor
scala-indent:resolve-forms-align-step)
(scala-indent:goto-list-anchor scala-indent:resolve-list-step)
@@ -739,10 +748,43 @@ strings"
(let ((state (save-excursion (syntax-ppss (line-beginning-position)))))
(if (not (nth 8 state)) ;; 8 = start pos of comment or string, nil if none
(scala-indent:indent-code-line strategy)
- (scala-indent:indent-line-to (current-indentation))
- nil)))
+ (if (integerp (nth 4 state)) ;; 4 = nesting level of comment for scaladoc
+ (scala-indent:indent-line-to (scala-indent:scaladoc-indent (nth 8
state)))
+ (scala-indent:indent-line-to (current-indentation))))))
(defun scala-indent:indent-with-reluctant-strategy ()
(interactive)
(scala-indent:indent-line scala-indent:reluctant-strategy))
+(defun scala-indent:scaladoc-indent (comment-start-pos)
+ "Calculate indent for a multi-line comment. Scaladoc
+lines (starting with /**) are indented under the second
+aseterix. Other multi-line comment rows are indented undet the
+first asterisk.
+
+Note: start line is indented as code since the start of the
+comment is outside the comment region. "
+ (save-excursion
+ (goto-char comment-start-pos)
+ (when (looking-at "/\\*+")
+ (goto-char
+ (if (= (- (match-end 0) (match-beginning 0)) 3)
+ (- (match-end 0) 1)
+ (+ (match-beginning 0) 1)))
+ (current-column))))
+
+(defun scala-mode:indent-scaladoc-asterisk (&optional insert-space-p)
+ "This function is meant to be used with post-self-insert-hook.
+
+Indents the line if position is right after an asterisk in a
+multi-line comment block and there is only whitespace before the asterisk.
+
+If insert-space is true, also adds a space after the asterisk if
+the asterisk is the last character on the line."
+ (let ((state (syntax-ppss)))
+ (when (and (integerp (nth 4 state))
+ (looking-back "^\\s *\\*" (line-beginning-position)))
+ (when (and insert-space-p
+ (looking-at "\\s *$"))
+ (insert " "))
+ (scala-indent:indent-line-to (scala-indent:scaladoc-indent (nth 8
state))))))
diff --git a/scala-mode-map.el b/scala-mode-map.el
index 2108e11..efba50b 100644
--- a/scala-mode-map.el
+++ b/scala-mode-map.el
@@ -4,6 +4,8 @@
(provide 'scala-mode-map)
+(require 'scala-mode-indent)
+
(defmacro scala-mode-map:define-keys (key-map key-funcs)
(cons 'progn (mapcar
#'(lambda (key-func)
@@ -27,10 +29,7 @@
(scala-mode-map:define-keys
keymap
(
- ([backtab] 'scala-indent:indent-with-reluctant-strategy)
- ([(control c)(control r)] 'scala-indent:rotate-run-on-strategy)
- ([(control c)(control c)] 'comment-region)
- ;; ("}" 'scala-electric-brace)
+;; ([(control c)(control r)] 'scala-indent:rotate-run-on-strategy)
))
(setq scala-mode-map keymap)))
diff --git a/scala-mode-paragraph.el b/scala-mode-paragraph.el
new file mode 100644
index 0000000..c5679bf
--- /dev/null
+++ b/scala-mode-paragraph.el
@@ -0,0 +1,121 @@
+;;; scala-mode-paragraph.el - Major mode for editing scala, paragraph
+;;; detection and fill
+;;; Copyright (c) 2012 Heikki Vesalainen For information on the License,
+;;; see the LICENSE file
+
+;;; Based on Scala Language Specification (SLS) Version 2.9
+
+;;; Provides paragraph navigation and fill for scaladocs and
+;;; multi-line strings.
+
+(provide 'scala-mode-paragraph)
+
+(defconst scala-paragraph:paragraph-line-start-re
+ (concat "\\(?:\\s *" ; whitespace
+ "\\(?://+\\|\\*\\|/\\*+" ; comment start
+ "\\||\\)?" ; multi-line margin |
+ "\\s *\\)")) ; whitespace
+
+(defconst scala-paragraph:scaladoc-list-start-re
+ (concat "\\(?:-" ; unordered liststs
+ "\\|[1IiAa]\\." ; ordered lists
+ "\\)\\s *"))
+
+(defconst scala-paragraph:fill-first-line-re
+ (concat "\\s *\\(//+\\|\\*\\||\\)?\\s *"
+ "\\(?:" scala-paragraph:scaladoc-list-start-re "\\)?"))
+
+(defconst scala-paragraph:paragraph-start-re
+ (concat scala-paragraph:paragraph-line-start-re
+ "\\(?:$" ; empty line
+ "\\|=[^=\n]+=[ ]*$" ; heading 1
+ "\\|==[^=\n]+==[ ]*$" ; heading 2
+ "\\|===[^=\n]+===[ ]*$" ; heading 3
+ "\\|====+[^=\n]+====+[ ]*$" ; heading 4-n
+ "\\|"
+ scala-paragraph:scaladoc-list-start-re
+ "\\|{{{" ; code block start
+ "\\|}}}" ; code block end
+ "\\|@[a-zA-Z]+\\>" ; annotations
+ "\\)"
+ "\\|\\(?:\\s *\\*/\\)" ; end of comment
+ ))
+
+(defconst scala-paragraph:paragraph-separate-re
+ (concat scala-paragraph:paragraph-line-start-re
+ "\\(?:$"
+ "\\|=[^=\n]+=[ ]*$" ; heading 1
+ "\\|==[^=\n]+==[ ]*$" ; heading 2
+ "\\|===[^=\n]+===[ ]*$" ; heading 3
+ "\\|====+[^=\n]+====+[ ]*$" ; heading 4-n
+ "\\|@[a-zA-Z]+\\>" ; annotations
+ "\\|{{{" ; code block start
+ "\\|}}}" ; code block end
+ "\\)"
+ "\\|\\(?:\\s *\\*/\\)" ; end of comment
+ ))
+
+(defun scala-paragraph:fill-function ()
+ (let (fill)
+ (save-restriction
+ (save-excursion
+ (widen)
+ (beginning-of-line)
+ (cond ((looking-at "\\s */?\\*+\\s *")
+ (setq fill (replace-regexp-in-string
+ "/\\*+"
+ (lambda (str) (if (= (length str) 3) " *" " *"))
+ (match-string-no-properties 0)))
+ (goto-char (match-end 0))
+ (when (looking-at scala-paragraph:scaladoc-list-start-re)
+ (setq fill
+ (concat fill (make-string (- (match-end 0)
+ (match-beginning 0))
?\s)))))
+ ((or (re-search-forward "\"\"\"|" (line-end-position) t)
+ (and (eq (nth 3 (syntax-ppss)) t)
+ (re-search-forward "^\\s *|" (line-end-position) t)))
+ (setq fill (concat (make-string (- (current-column) 1) ?\s)
"|"))
+ (setq fill (concat fill (make-string (skip-syntax-forward " ")
?\s)))
+ (when (looking-at scala-paragraph:scaladoc-list-start-re)
+ (setq fill
+ (concat fill (make-string (- (match-end 0)
+ (match-beginning 0))
?\s))))))))
+ fill))
+
+(defun scala-paragraph:fill-paragraph (&rest args)
+ ;; move to inside multi-line comment or multi-line stirng, if outside
+ (when (looking-at "\\s *\\(?:/\\**\\|\"\"\"\\)\\s *")
+ (goto-char (match-end 0)))
+ (let ((state (syntax-ppss))
+ (fill-paragraph-function
+ ;; Avoid infinite recursion, set fill-paragraph-function to
+ ;; nil if it is 'scala-paragraph:fill-paragraph
+ (unless (eq fill-paragraph-function 'scala-paragraph:fill-paragraph)
+ fill-paragraph-function)))
+ (cond ((integerp (nth 4 state))
+ ;; mask multi-line comments and fill
+ (save-restriction
+ (narrow-to-region (nth 8 state)
+ (save-excursion (goto-char (nth 8 state))
+ (if (forward-comment 1)
+ (point)
+ (point-max))))
+ (fill-paragraph))
+ t)
+ ((eq (nth 4 state) t)
+ ;; let normal fill-function handle this
+ nil)
+ ((eq (nth 3 state) t)
+ ;; mask multi-line strings and fill.
+ (save-restriction
+ (narrow-to-region (nth 8 state)
+ (save-excursion (goto-char (nth 8 state))
+ (or (ignore-errors
+ (forward-sexp)
+ (point))
+ (point-max))))
+ (fill-paragraph))
+ t)
+ ;; TODO: fill lists
+ ;; the rest should not be filled (code, etc)
+ (t t))))
diff --git a/scala-mode.el b/scala-mode.el
index 605209d..716ae05 100644
--- a/scala-mode.el
+++ b/scala-mode.el
@@ -8,6 +8,7 @@
(require 'scala-mode-constants)
(require 'scala-mode-syntax)
+(require 'scala-mode-paragraph)
(require 'scala-mode-fontlock)
(require 'scala-mode-indent)
(require 'scala-mode-map)
@@ -26,28 +27,6 @@
(defmacro scala-mode:make-local-variables (&rest quoted-names)
(cons 'progn (mapcar #'(lambda (quoted-name) `(make-local-variable
,quoted-name)) quoted-names)))
-(defconst scala-mode:comment-line-start
- (concat "[ \t]*" ; whitespace
- "\\(//+\\|\\**\\)" ; comment start
- "[ \t]*")) ; whitespace
-
-(defconst scala-mode:paragraph-start
- (concat scala-mode:comment-line-start
- "\\($" ; empty line
- "\\|=[^=\n]+=[ ]*$" ; heading 1
- "\\|==[^=\n]+==[ ]*$" ; heading 2
- "\\|===[^=\n]+===[ ]*$" ; heading 3
- "\\|====+[^=\n]+====+[ ]*$" ; heading 4-n
- "\\|-" ; unordered liststs
- "\\|[1IiAa]\\." ; ordered lists
-; "\\|{{{" ; code block start
-; "\\|}}}" ; code block end
- "\\|@[a-zA-Z]+\\>" ; annotations
- "\\)"
- ))
-
-(defconst scala-mode:paragraph-separate
- (concat scala-mode:comment-line-start "$"))
(defun scala-mode:forward-sexp-function (&optional count)
(unless count (setq count 1))
@@ -57,24 +36,6 @@
(dotimes (n count)
(scala-syntax:forward-sexp))))
-;; (defun scala-mode ()
-;; "Major mode for editing scala code.
-
-;; When started, runs `scala-mode-hook'.
-
-;; \\{scala-mode-map}"
-;; (interactive)
-;; (kill-all-local-variables)
-;; (set-syntax-table scala-mode-syntax-table)
-
-;; (scala-mode:make-local-variables
-;; 'require-final-newline
-;; 'comment-start
-;; 'comment-end
-;; 'comment-start-line
-;; 'comment-column
-;; 'comment-multi-line)
-
;;;###autoload
(define-derived-mode scala-mode prog-mode "Scala"
"Major mode for editing scala code.
@@ -82,17 +43,20 @@
When started, runs `scala-mode-hook'.
\\{scala-mode-map}"
- :syntax-table scala-syntax:syntax-table
+ :syntax-table scala-syntax:syntax-table
; :group
; :abbrev
(scala-mode:make-local-variables
'scala-mode:debug-messages
+ 'post-self-insert-hook
'syntax-propertize-function
'font-lock-defaults
'paragraph-start
'paragraph-separate
'fill-paragraph-function
+ 'adaptive-fill-function
+ 'adaptive-fill-first-line-regexp
'comment-start
'comment-end
'comment-start-skip
@@ -113,21 +77,20 @@ When started, runs `scala-mode-hook'.
font-lock-defaults '((scala-font-lock:keywords)
nil)
- ;; TODO: paragraph-start, paragraphs-separate,
paragraph-ignore-fill-prefix
;; TODO: beginning-of-defun-function, end-of-defun-function
;; comments
- paragraph-start scala-mode:paragraph-start
- paragraph-separate scala-mode:paragraph-separate
- fill-paragraph-function 'c-fill-paragraph
+ paragraph-start scala-paragraph:paragraph-start-re
+ paragraph-separate scala-paragraph:paragraph-separate-re
+ fill-paragraph-function 'scala-paragraph:fill-paragraph
+ adaptive-fill-function 'scala-paragraph:fill-function
+ adaptive-fill-first-line-regexp scala-paragraph:fill-first-line-re
comment-start "// "
comment-end ""
comment-start-skip "\\(//+\\|/\\*+\\)[ \t]*"
comment-column 0
comment-multi-line t
- ;; TODO: comment-indent-function
- ;; TODO: forward-sexp-function
forward-sexp-function 'scala-mode:forward-sexp-function
indent-line-function 'scala-indent:indent-line
indent-tabs-mode nil
- [nongnu] elpa/scala-mode e30b35a 008/217: Indentation working, (continued)
- [nongnu] elpa/scala-mode e30b35a 008/217: Indentation working, ELPA Syncer, 2021/08/29
- [nongnu] elpa/scala-mode 59cdd94 074/217: Add `scala-indent:use-javadoc-style` defcustom., ELPA Syncer, 2021/08/29
- [nongnu] elpa/scala-mode 347faeb 075/217: Add Evan Meagher to contributors list., ELPA Syncer, 2021/08/29
- [nongnu] elpa/scala-mode 081a92b 081/217: scala-indent:remove-indent-from-previous-empty-line, ELPA Syncer, 2021/08/29
- [nongnu] elpa/scala-mode 0fac9ae 014/217: removed debug messages, ELPA Syncer, 2021/08/29
- [nongnu] elpa/scala-mode 9476d4c 018/217: Fixes #3: alignment of else inside parens, ELPA Syncer, 2021/08/29
- [nongnu] elpa/scala-mode 3f724ed 030/217: Add the scala-indent:pad-equals setting., ELPA Syncer, 2021/08/29
- [nongnu] elpa/scala-mode 6257e3b 033/217: Renamed bad-equals to indent-value-expression. Added info to README.md, ELPA Syncer, 2021/08/29
- [nongnu] elpa/scala-mode 4e3a24f 043/217: Updated Examples.md to reflect issues already solved, ELPA Syncer, 2021/08/29
- [nongnu] elpa/scala-mode 338ff73 060/217: Changed the indent defaults, closes #19, ELPA Syncer, 2021/08/29
- [nongnu] elpa/scala-mode 6c257f6 057/217: Enhanced support for comments and multi-line strings, including,
ELPA Syncer <=
- [nongnu] elpa/scala-mode 68ca175 056/217: Fixes #20, the cons bug (a :: b :: Nil) as well as improving some of, ELPA Syncer, 2021/08/29
- [nongnu] elpa/scala-mode 78fff40 039/217: scala-indent:align-forms customization variable, ELPA Syncer, 2021/08/29
- [nongnu] elpa/scala-mode f61e32d 047/217: Update README.md, ELPA Syncer, 2021/08/29
- [nongnu] elpa/scala-mode 0991658 051/217: Fixes #17: string syntax, ELPA Syncer, 2021/08/29
- [nongnu] elpa/scala-mode 3174f4c 048/217: Update README.md clone to be a valid command., ELPA Syncer, 2021/08/29
- [nongnu] elpa/scala-mode a78716d 046/217: Update README.md, ELPA Syncer, 2021/08/29
- [nongnu] elpa/scala-mode ac13b94 061/217: post-self-insert-hooks, ELPA Syncer, 2021/08/29
- [nongnu] elpa/scala-mode 2201b1c 092/217: Interact nicely with global-font-lock-mode., ELPA Syncer, 2021/08/29
- [nongnu] elpa/scala-mode 98d22a5 099/217: Added programming languages to README.md code, ELPA Syncer, 2021/08/29
- [nongnu] elpa/scala-mode 453c012 106/217: fixed bug in string escapes marking, ELPA Syncer, 2021/08/29