[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/swift-mode 69efea4 386/496: Add `current-defun-name`
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/swift-mode 69efea4 386/496: Add `current-defun-name` |
Date: |
Sun, 29 Aug 2021 11:34:12 -0400 (EDT) |
branch: elpa/swift-mode
commit 69efea415ea9f21f8bac19c9b6d26f13e6774fe9
Author: taku0 <mxxouy6x3m_github@tatapa.org>
Commit: taku0 <mxxouy6x3m_github@tatapa.org>
Add `current-defun-name`
---
swift-mode-beginning-of-defun.el | 95 ++++++++++++++++++++++++++++++++++++++++
swift-mode.el | 5 ++-
2 files changed, 99 insertions(+), 1 deletion(-)
diff --git a/swift-mode-beginning-of-defun.el b/swift-mode-beginning-of-defun.el
index 19120ff..e03be8e 100644
--- a/swift-mode-beginning-of-defun.el
+++ b/swift-mode-beginning-of-defun.el
@@ -1213,6 +1213,101 @@ Interactively, the behavior depends on
‘narrow-to-defun-include-comments’."
(progn (message "No sentence found") nil)
region)))
+(defun swift-mode:current-defun-name ()
+ "Return fully qualified name of defun under the point."
+ (save-excursion
+ (let ((token-list (reverse (swift-mode:current-defun-name-token-list))))
+ (if token-list
+ (mapconcat #'swift-mode:token:text token-list ".")
+ nil))))
+
+(defun swift-mode:current-defun-name-token-list ()
+ "Return a list of defun name tokens under the point.
+
+The first element is the name token of the current defun. The rest are the
ones
+of ancestors."
+ (if (bobp)
+ nil
+ (let ((name-token (swift-mode:current-defun-name-token)))
+ (swift-mode:backward-sexps-until '({))
+ (if name-token
+ (cons name-token (swift-mode:current-defun-name-token-list))
+ (swift-mode:current-defun-name-token-list)))))
+
+(defun swift-mode:current-defun-name-token ()
+ "Return the name token of the defun under the point."
+ (let ((pos (point))
+ keyword-token
+ keyword-text
+ next-token
+ name-token)
+ (goto-char (car (swift-mode:containing-generic-block-region
+ #'swift-mode:end-of-defun
+ #'swift-mode:beginning-of-defun)))
+
+ (save-excursion
+ (setq keyword-token (swift-mode:find-defun-keyword))
+ (setq keyword-text (swift-mode:token:text keyword-token))
+ (when keyword-token
+ (goto-char (swift-mode:token:end keyword-token)))
+ (setq
+ name-token
+ (cond
+ ((member keyword-text
+ '("typealias" "associatedtype" "precedencegroup" "func"
+ "class" "enum" "struct" "protocol" "extension"))
+ (swift-mode:forward-token))
+
+ ((member keyword-text '("init" "deinit" "subscript"))
+ keyword-token)
+
+ ((member keyword-text '("case" "var" "let"))
+ ;; enum Foo {
+ ;; case A, B(x: (Int, Int)), C
+ ;; }
+ ;;
+ ;; class Foo {
+ ;; let x = 1,
+ ;; y = 1,
+ ;; z = 1
+ ;; var x {
+ ;; get {
+ ;; return 1
+ ;; }
+ ;; }
+ ;; var x = 1 {
+ ;; willSet {
+ ;; }
+ ;; }
+ ;;
+ ;; let (x, y) = (1, 1) // not supported yet
+ ;; }
+ (while (< (point) pos)
+ (setq next-token (swift-mode:forward-token-or-list)))
+ (when next-token
+ (goto-char (swift-mode:token:start next-token)))
+ (goto-char (swift-mode:token:end
+ (swift-mode:backward-sexps-until (list keyword-text
'\,))))
+ (setq next-token (swift-mode:forward-token))
+ (if (and
+ (eq (swift-mode:token:type next-token) 'identifier)
+ (not
+ (equal (swift-mode:token:text (swift-mode:forward-token)) ".")))
+ next-token
+ ;; FIXME: Complex patterns.
+ nil))
+
+ ((member keyword-text '("prefix" "postfix" "infix"))
+ (and (equal (swift-mode:token:text (swift-mode:forward-token))
+ "operator")
+ (swift-mode:forward-token)))
+
+ ;; Ignored: "import" "get" "set" "willSet" "didSet"
+ (t nil))))
+ (if (memq (swift-mode:token:type name-token) '(identifier operator))
+ name-token
+ nil)))
+
(provide 'swift-mode-beginning-of-defun)
;;; swift-mode-beginning-of-defun.el ends here
diff --git a/swift-mode.el b/swift-mode.el
index 6191741..878211f 100644
--- a/swift-mode.el
+++ b/swift-mode.el
@@ -213,7 +213,10 @@ Signal `scan-error' if it hits opening parentheses."
(setq-local swift-mode:anchor-overlay
(make-overlay (point-min) (point-min) nil t))
- (delete-overlay swift-mode:anchor-overlay))
+ (delete-overlay swift-mode:anchor-overlay)
+
+ (add-hook 'which-func-functions #'swift-mode:current-defun-name)
+ (setq-local add-log-current-defun-function #'swift-mode:current-defun-name))
;;;###autoload (add-to-list 'auto-mode-alist '("\\.swift\\'" . swift-mode))
- [nongnu] elpa/swift-mode ab9f414 320/496: Fix indentation of close curly brace of switch, (continued)
- [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, 2021/08/29
- [nongnu] elpa/swift-mode 69efea4 386/496: Add `current-defun-name`,
ELPA Syncer <=
- [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
- [nongnu] elpa/swift-mode 9676f90 485/496: Update CI versions, ELPA Syncer, 2021/08/29