[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/raku-mode 95382a81fb 057/253: Merge pull request #1 from a
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/raku-mode 95382a81fb 057/253: Merge pull request #1 from andreoss/indentation |
Date: |
Sat, 29 Jan 2022 08:28:42 -0500 (EST) |
branch: elpa/raku-mode
commit 95382a81fb611538ff17831faa83bfdf4b0169d8
Merge: 4917b2c270 0673f007b0
Author: Hinrik Örn Sigurðsson <hinrik.sig@gmail.com>
Commit: Hinrik Örn Sigurðsson <hinrik.sig@gmail.com>
Merge pull request #1 from andreoss/indentation
SMIE indenation ported from css-mode
---
perl6-mode.el | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 65 insertions(+), 1 deletion(-)
diff --git a/perl6-mode.el b/perl6-mode.el
index f30a446d21..825657443c 100644
--- a/perl6-mode.el
+++ b/perl6-mode.el
@@ -41,6 +41,65 @@
(require 'perl6-detect)
(require 'perl6-font-lock)
+
+(require 'smie)
+
+(defconst perl6-smie-grammar
+ (smie-prec2->grammar
+ (smie-precs->prec2 '((assoc ";") (assoc ",") (left ":")))))
+
+(defun perl6-smie--not-interpolation-p ()
+ (save-excursion
+ (forward-char -1)
+ (or (zerop (skip-chars-backward "-[:alnum:]"))
+ (not (looking-back "#{\\$" (- (point) 3))))))
+
+
+
+(defun perl6-smie--forward-token ()
+ (cond
+ ((and (eq (char-before) ?\})
+ (perl6-smie--not-interpolation-p)
+ ;; FIXME: If the next char is not whitespace, what should we do?
+ (or (memq (char-after) '(?\s ?\t ?\n))
+ (looking-at comment-start-skip)))
+ (if (memq (char-after) '(?\s ?\t ?\n))
+ (forward-char 1) (forward-comment 1))
+ ";")
+ ((progn (forward-comment (point-max))
+ (looking-at "[;,:]"))
+ (forward-char 1) (match-string 0))
+ (t (smie-default-forward-token))))
+
+(defun perl6-smie--backward-token ()
+ (let ((pos (point)))
+ (forward-comment (- (point)))
+ (cond
+ ;; FIXME: If the next char is not whitespace, what should we do?
+ ((and (eq (char-before) ?\}) (perl6-smie--not-interpolation-p)
+ (> pos (point))) ";")
+ ((memq (char-before) '(?\; ?\, ?\:))
+ (forward-char -1) (string (char-after)))
+ (t (smie-default-backward-token)))))
+
+(defun perl6-smie-rules (kind token)
+ (pcase (cons kind token)
+ (`(:elem . basic) perl6-indent-offset)
+ (`(:elem . arg) 0)
+ (`(:list-intro . ,(or `";" `"")) t) ;"" stands for BOB (bug#15467).
+ (`(:before . "{")
+ (when (smie-rule-hanging-p)
+ (smie-backward-sexp ";")
+ (smie-indent-virtual)))
+ (`(:before . ,(or "{" "("))
+ (if (smie-rule-hanging-p) (smie-rule-parent 0)))))
+
+(defcustom perl6-indent-offset 4
+ "Basic size of one indentation step."
+ :version "22.2"
+ :type 'integer)
+
+
;;;###autoload
(define-derived-mode perl6-mode prog-mode "Perl6"
"Major mode for editing Perl 6 code."
@@ -53,7 +112,12 @@
(setq-local comment-start "#")
(setq-local comment-start-skip "#+ *")
(setq-local comment-use-syntax t)
- (setq-local comment-end ""))
+ (setq-local comment-end "")
+ (smie-setup perl6-smie-grammar #'perl6-smie-rules
+ :forward-token #'perl6-smie--forward-token
+ :backward-token #'perl6-smie--backward-token)
+
+ )
(provide 'perl6-mode)
- [nongnu] elpa/raku-mode fff97f7fb0 226/253: Raku variable names have precedence over operators, (continued)
- [nongnu] elpa/raku-mode fff97f7fb0 226/253: Raku variable names have precedence over operators, ELPA Syncer, 2022/01/29
- [nongnu] elpa/raku-mode 0cf896d274 228/253: Uncomment pod lines starting with whitespace., ELPA Syncer, 2022/01/29
- [nongnu] elpa/raku-mode f9016c1d99 233/253: Fix qe comparator highlighting, ELPA Syncer, 2022/01/29
- [nongnu] elpa/raku-mode 095b8666e3 248/253: Bump version for PR #59, ELPA Syncer, 2022/01/29
- [nongnu] elpa/raku-mode 7496ad3a03 245/253: Merge pull request #49 from matiaslina/master, ELPA Syncer, 2022/01/29
- [nongnu] elpa/raku-mode 73c35c089b 241/253: Remove an unnecessary (progn) that I missed., ELPA Syncer, 2022/01/29
- [nongnu] elpa/raku-mode eaac071f17 251/253: Correct PR merge date, ELPA Syncer, 2022/01/29
- [nongnu] elpa/raku-mode 03ade8f04d 071/253: Highlight all other kinds of numbers, ELPA Syncer, 2022/01/29
- [nongnu] elpa/raku-mode 9963ed20da 051/253: Use consistent Markdown headings, ELPA Syncer, 2022/01/29
- [nongnu] elpa/raku-mode e22ed63495 072/253: Indentation change, ELPA Syncer, 2022/01/29
- [nongnu] elpa/raku-mode 95382a81fb 057/253: Merge pull request #1 from andreoss/indentation,
ELPA Syncer <=
- [nongnu] elpa/raku-mode cdc3a0de70 086/253: Highlight contexualizers, ELPA Syncer, 2022/01/29
- [nongnu] elpa/raku-mode b1b5cfde21 105/253: Add some comments to perl6-syntax-propertize, ELPA Syncer, 2022/01/29
- [nongnu] elpa/raku-mode 69666bfb10 084/253: Don't highlight digits in identifiers as numbers, ELPA Syncer, 2022/01/29
- [nongnu] elpa/raku-mode 8f230b887f 152/253: remove user option per syohex's comment, ELPA Syncer, 2022/01/29
- [nongnu] elpa/raku-mode e7370bed3a 144/253: Fix bug overly eager highlighting of sub/macro/etc, ELPA Syncer, 2022/01/29
- [nongnu] elpa/raku-mode 298b6bb51c 156/253: add a test file for aiding regex development, ELPA Syncer, 2022/01/29
- [nongnu] elpa/raku-mode 85ff9ecd0e 205/253: Library rename from perl6-mode to raku-mode, ELPA Syncer, 2022/01/29
- [nongnu] elpa/raku-mode f0b6adcb74 239/253: Add hanging hash assignment to smie test file, ELPA Syncer, 2022/01/29
- [nongnu] elpa/raku-mode 3f33ca3db8 243/253: Merge pull request #48 from RomanHargrave/fix-smie-hanging-indent, ELPA Syncer, 2022/01/29
- [nongnu] elpa/raku-mode ef229addc0 250/253: Update CHANGELOG.md, ELPA Syncer, 2022/01/29