[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/swift-mode 19e6974 371/496: Abstract syntax-ppss
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/swift-mode 19e6974 371/496: Abstract syntax-ppss |
Date: |
Sun, 29 Aug 2021 11:34:09 -0400 (EDT) |
branch: elpa/swift-mode
commit 19e6974b007e9f13808cdabf22a669af8208787e
Author: taku0 <mxxouy6x3m_github@tatapa.org>
Commit: taku0 <mxxouy6x3m_github@tatapa.org>
Abstract syntax-ppss
---
swift-mode-indent.el | 33 +++++++-------
swift-mode-lexer.el | 126 +++++++++++++++++++++++++++++++++++++++------------
2 files changed, 114 insertions(+), 45 deletions(-)
diff --git a/swift-mode-indent.el b/swift-mode-indent.el
index 05d6849..9a8194e 100644
--- a/swift-mode-indent.el
+++ b/swift-mode-indent.el
@@ -1510,10 +1510,11 @@ Return nil otherwise."
"Return t if the point is inside an incomplete comment.
Return nil otherwise."
- (and (nth 4 (syntax-ppss))
- (save-excursion
- (goto-char (nth 8 (syntax-ppss)))
- (not (forward-comment 1)))))
+ (let ((chunk (swift-mode:chunk-after)))
+ (and (swift-mode:chunk:comment-p chunk)
+ (save-excursion
+ (goto-char (swift-mode:chunk:start chunk))
+ (not (forward-comment 1))))))
(defun swift-mode:indent-new-comment-line (&optional soft)
"Break the line at the point and indent the new line.
@@ -1523,10 +1524,8 @@ multiline comment, close the previous comment and start
new one if
`comment-multi-line' is nil.
See `indent-new-comment-line' for SOFT."
(interactive)
- (let* ((parser-state (syntax-ppss))
- (is-inside-comment (nth 4 parser-state))
- (is-single-line-comment (eq (nth 7 parser-state) 1))
- (comment-beginning-position (nth 8 parser-state))
+ (let* ((chunk (swift-mode:chunk-after))
+ (comment-beginning-position (swift-mode:chunk:start chunk))
(space-after-asterisk
(if swift-mode:insert-space-after-asterisk-in-comment " " ""))
(default-line-prefix
@@ -1537,20 +1536,20 @@ See `indent-new-comment-line' for SOFT."
(if soft (insert-and-inherit ?\n) (newline 1))
(delete-horizontal-space)
- (when is-inside-comment
+ (when (swift-mode:chunk:comment-p chunk)
(insert-before-markers-and-inherit
(cond
- (is-single-line-comment
+ ((swift-mode:chunk:single-line-comment-p chunk)
(save-excursion
(goto-char comment-beginning-position)
- (looking-at "/+\\s *")
+ (looking-at "/+\\(\\s *\\)")
(match-string-no-properties 0)))
(comment-multi-line
(save-excursion
- (beginning-of-line)
+ (forward-line 0)
(forward-char -1)
- (beginning-of-line)
+ (forward-line 0)
(if (<= (point) comment-beginning-position)
;; The cursor was on the 2nd line of the comment.
;; Uses default prefix.
@@ -1576,7 +1575,7 @@ See `indent-new-comment-line' for SOFT."
;; Closes incomplete multiline comment.
(when (and swift-mode:auto-close-multiline-comment
- (not is-single-line-comment)
+ (swift-mode:chunk:multiline-comment-p chunk)
(swift-mode:incomplete-comment-p))
(save-excursion
(end-of-line)
@@ -1592,7 +1591,7 @@ See `indent-new-comment-line' for SOFT."
((and
swift-mode:prepend-asterisk-to-comment-line
(= last-command-event ?*)
- (nth 4 (syntax-ppss))
+ (swift-mode:chunk:comment-p (swift-mode:chunk-after))
(save-excursion (backward-char) (skip-syntax-backward " ") (bolp)))
(when swift-mode:insert-space-after-asterisk-in-comment
(insert-before-markers-and-inherit " "))
@@ -1602,10 +1601,10 @@ See `indent-new-comment-line' for SOFT."
((and
(= last-command-event ?/)
swift-mode:fix-comment-close
- (nth 4 (syntax-ppss))
+ (swift-mode:chunk:comment-p (swift-mode:chunk-after))
(save-excursion
(let ((pos (point)))
- (beginning-of-line)
+ (forward-line 0)
(and
(looking-at "^\\s *\\*\\s +/")
(eq (match-end 0) pos)
diff --git a/swift-mode-lexer.el b/swift-mode-lexer.el
index c2bb0b8..25339a8 100644
--- a/swift-mode-lexer.el
+++ b/swift-mode-lexer.el
@@ -221,19 +221,16 @@ Intended for `syntax-propertize-function'."
nil
swift-mode:matching-parenthesis
nil))
- (let* ((parser-state (syntax-ppss start))
- (inside-string (nth 3 parser-state))
- (comment-nesting (nth 4 parser-state))
- (comment-beginning-position (nth 8 parser-state)))
+ (let* ((chunk (swift-mode:chunk-after (syntax-ppss start))))
(cond
- ((eq inside-string t)
+ ((swift-mode:chunk:multiline-string-p chunk)
(swift-mode:syntax-propertize:end-of-multiline-string end))
- (inside-string
+ ((swift-mode:chunk:single-line-string-p chunk)
(swift-mode:syntax-propertize:end-of-single-line-string end))
- (comment-nesting
- (goto-char comment-beginning-position)
+ ((swift-mode:chunk:comment-p chunk)
+ (goto-char (swift-mode:chunk:start chunk))
(forward-comment (point-max)))))
(swift-mode:syntax-propertize:scan end 0))
@@ -748,8 +745,9 @@ Return the token object. If no more tokens available,
return a token with
type `out-of-buffer'"
(let ((pos (point)))
- (when (nth 4 (syntax-ppss))
- (goto-char (nth 8 (syntax-ppss))))
+ (let ((chunk (swift-mode:chunk-after)))
+ (when (swift-mode:chunk:comment-p chunk)
+ (goto-char (swift-mode:chunk:start chunk))))
(forward-comment (point-max))
(cond
;; Outside of buffer
@@ -959,8 +957,9 @@ Return the token object. If no more tokens available,
return a token with
type `out-of-buffer'."
(let ((pos (point)))
- (when (nth 4 (syntax-ppss))
- (goto-char (nth 8 (syntax-ppss))))
+ (let ((chunk (swift-mode:chunk-after)))
+ (when (swift-mode:chunk:comment-p chunk)
+ (goto-char (swift-mode:chunk:start chunk))))
(forward-comment (- (point)))
(cond
;; Outside of buffer
@@ -1226,28 +1225,99 @@ Assuming the cursor is on a string."
(defun swift-mode:goto-non-comment-bol ()
"Back to the beginning of line that is not inside a comment."
- (beginning-of-line)
- (while (nth 4 (syntax-ppss))
- ;; The cursor is in a comment. Backs to the beginning of the comment.
- (goto-char (nth 8 (syntax-ppss)))
- (beginning-of-line)))
+ (forward-line 0)
+ (let (chunk)
+ (while (progn
+ (setq chunk (swift-mode:chunk-after))
+ (swift-mode:chunk:comment-p chunk))
+ ;; The cursor is in a comment. Backs to the beginning of the comment.
+ (goto-char (swift-mode:chunk:start chunk))
+ (forward-line 0))))
(defun swift-mode:goto-non-comment-eol ()
"Proceed to the end of line that is not inside a comment.
If this line ends with a single-line comment, goto just before the comment."
(end-of-line)
- (while (nth 4 (syntax-ppss))
- ;; The cursor is in a comment.
- (if (eq (nth 4 (syntax-ppss)) t)
- ;; This ia a single-line comment
- ;; Back to the beginning of the comment.
- (goto-char (nth 8 (syntax-ppss)))
- ;; This is a multiline comment
- ;; Proceed to the end of the comment.
- (goto-char (nth 8 (syntax-ppss)))
- (forward-comment 1)
- (end-of-line))))
+ (let (chunk)
+ (while (progn
+ (setq chunk (swift-mode:chunk-after))
+ (swift-mode:chunk:comment-p chunk))
+ ;; The cursor is in a comment.
+ (if (swift-mode:chunk:single-line-comment-p chunk)
+ ;; This ia a single-line comment
+ ;; Back to the beginning of the comment.
+ (goto-char (swift-mode:chunk:start chunk))
+ ;; This is a multiline comment
+ ;; Proceed to the end of the comment.
+ (goto-char (swift-mode:chunk:start chunk))
+ (forward-comment 1)
+ (end-of-line)))))
+
+;;; Comment or string chunks
+
+;; A chunk is either a string-chunk or a comment.
+;; It have the type and the start position.
+
+(defun swift-mode:chunk (type start)
+ "Return a new chunk with TYPE and START position."
+ (list type start))
+
+(defun swift-mode:chunk:type (chunk)
+ "Return the type of the CHUNK."
+ (nth 0 chunk))
+
+(defun swift-mode:chunk:start (chunk)
+ "Return the start position of the CHUNK."
+ (nth 1 chunk))
+
+(defun swift-mode:chunk:comment-p (chunk)
+ "Return non-nil if the CHUNK is a comment."
+ (memq (swift-mode:chunk:type chunk) '(single-line-comment
multiline-comment)))
+
+(defun swift-mode:chunk:string-p (chunk)
+ "Return non-nil if the CHUNK is a string."
+ (memq (swift-mode:chunk:type chunk) '(single-line-string multiline-string)))
+
+(defun swift-mode:chunk:single-line-comment-p (chunk)
+ "Return non-nil if the CHUNK is a single-line comment."
+ (eq (swift-mode:chunk:type chunk) 'single-line-comment))
+
+(defun swift-mode:chunk:multiline-comment-p (chunk)
+ "Return non-nil if the CHUNK is a multiline comment."
+ (eq (swift-mode:chunk:type chunk) 'multiline-comment))
+
+(defun swift-mode:chunk:single-line-string-p (chunk)
+ "Return non-nil if the CHUNK is a single-line string."
+ (eq (swift-mode:chunk:type chunk) 'single-line-string))
+
+(defun swift-mode:chunk:multiline-string-p (chunk)
+ "Return non-nil if the CHUNK is a multiline string."
+ (eq (swift-mode:chunk:type chunk) 'multiline-string))
+
+(defun swift-mode:chunk-after (&optional parser-state)
+ "Return the chunk at the cursor.
+
+If the cursor is outside of strings and comments, return nil.
+
+If PARSER-STATE is given, it is used instead of (syntax-ppss)."
+ (unless parser-state
+ (setq parser-state (syntax-ppss)))
+ (cond
+ ((eq (nth 3 parser-state) t)
+ (swift-mode:chunk 'multiline-string (nth 8 parser-state)))
+ ((nth 3 parser-state)
+ (swift-mode:chunk 'single-line-string (nth 8 parser-state)))
+ ((eq (nth 4 parser-state) t)
+ (swift-mode:chunk 'single-line-comment (nth 8 parser-state)))
+ ((nth 4 parser-state)
+ (swift-mode:chunk 'multiline-comment (nth 8 parser-state)))
+ ((and (eq (char-before) ?/) (eq (char-after) ?/))
+ (swift-mode:chunk 'single-line-comment (1- (point))))
+ ((and (eq (char-before) ?/) (eq (char-after) ?*))
+ (swift-mode:chunk 'multiline-comment (1- (point))))
+ (t
+ nil)))
(provide 'swift-mode-lexer)
- [nongnu] elpa/swift-mode 42a209c 322/496: Fix indentation of guard, (continued)
- [nongnu] elpa/swift-mode 42a209c 322/496: Fix indentation of guard, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode ab9f414 320/496: Fix indentation of close curly brace of switch, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode 97d86cd 326/496: Tweak test runner, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode ea77cf9 328/496: Add comments, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode 6cd2948 342/496: Bump version to 2.2.1, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode 7e78225 336/496: Bump version to 2.2, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode 1868590 348/496: Add build/debug command, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode a6d00b5 352/496: Simplify code, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode 75f5214 364/496: Cleanup code, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode 7a9cf18 382/496: Fix beginning/end-of-sentence, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode 19e6974 371/496: Abstract syntax-ppss,
ELPA Syncer <=
- [nongnu] elpa/swift-mode 69efea4 386/496: Add `current-defun-name`, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode 7739e49 387/496: Bump version to 4.1.0, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode ada5576 389/496: Merge pull request #144 from nhojb/which_function_mode_fix, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode 4e22279 390/496: Bump version to 4.1.1, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode 0e6b044 408/496: Make highlighting symbols in standard library optional, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode 71c82e9 418/496: Add compilation before testing, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode 1759977 440/496: Fix typo, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode 323bb97 457/496: Update copyright notices, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode 7d93c75 464/496: Bump version to 8.1.0, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode e65a80a 465/496: Support full-indent for switch cases, ELPA Syncer, 2021/08/29