[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/swift-mode 7a9cf18 382/496: Fix beginning/end-of-sentence
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/swift-mode 7a9cf18 382/496: Fix beginning/end-of-sentence |
Date: |
Sun, 29 Aug 2021 11:34:11 -0400 (EDT) |
branch: elpa/swift-mode
commit 7a9cf18d4aac87d4bfa4533e06b9af31321343c6
Author: taku0 <mxxouy6x3m_github@tatapa.org>
Commit: taku0 <mxxouy6x3m_github@tatapa.org>
Fix beginning/end-of-sentence
Add tests for beginning/end-of-sentence
---
swift-mode-beginning-of-defun.el | 43 +++++---
swift-mode-lexer.el | 41 ++++----
.../beginning-of-defun/beginning-of-defun.swift | 111 +++++++++++----------
.../beginning-of-defun/beginning-of-sentence.swift | 59 +++++++++++
test/swift-mode-test-beginning-of-defun.el | 104 ++++++++++++++++---
5 files changed, 262 insertions(+), 96 deletions(-)
diff --git a/swift-mode-beginning-of-defun.el b/swift-mode-beginning-of-defun.el
index 77619c6..baf99f2 100644
--- a/swift-mode-beginning-of-defun.el
+++ b/swift-mode-beginning-of-defun.el
@@ -218,6 +218,9 @@ Intended for internal use."
(let ((chunk (swift-mode:chunk-after)))
(when chunk
(goto-char (swift-mode:chunk:start chunk))))
+ (when (and (eq (char-syntax (or (char-after) ?.)) ?w)
+ (eq (char-syntax (or (char-before) ?.)) ?w))
+ (swift-mode:forward-token))
(let ((pos (point))
(previous-token (save-excursion
(forward-comment (- (point)))
@@ -289,7 +292,7 @@ Statements include comments on the same line.
Intended for internal use."
(let ((pos (point)))
(swift-mode:beginning-of-statement)
- (when (eq pos (point))
+ (when (<= pos (point))
(swift-mode:backward-token-or-list)
(swift-mode:beginning-of-statement))))
@@ -336,6 +339,9 @@ Intended for internal use."
(let ((chunk (swift-mode:chunk-after)))
(when chunk
(goto-char (swift-mode:chunk:start chunk))))
+ (when (and (eq (char-syntax (or (char-after) ?.)) ?w)
+ (eq (char-syntax (or (char-before) ?.)) ?w))
+ (swift-mode:backward-token))
(forward-comment (point-max))
(let ((pos (point))
token)
@@ -808,6 +814,17 @@ In comments or strings, skip a sentence. Otherwise, skip
a stateement."
"Skip forward a sentence in a comment.
IS-SINGLE-LINE should be non-nil when called inside a single-line comment."
+ (when (and (not is-single-line)
+ (eq (char-before) ?/)
+ (eq (char-after) ?*))
+ (forward-char))
+ (when (and is-single-line
+ (< (point) (save-excursion
+ (forward-line 0)
+ (if (looking-at "\\s *//+")
+ (match-end 0)
+ (point)))))
+ (goto-char (match-end 0)))
(let ((current-buffer (current-buffer))
(pos (point))
(comment-block-end-position
@@ -824,7 +841,8 @@ IS-SINGLE-LINE should be non-nil when called inside a
single-line comment."
(if is-single-line
(while (re-search-forward "^[ \t]*/+[ \t]*" nil t)
(replace-match ""))
- (when (looking-at "\\*+")
+ (when (and (not (looking-at "\\*+/"))
+ (looking-at "\\*+"))
(replace-match ""))))
;; Forwards sentence.
(let ((old-position (point)))
@@ -848,7 +866,14 @@ IS-SINGLE-LINE should be non-nil when called inside a
single-line comment."
(forward-line -1)
(setq line-count (1+ line-count)))))
(forward-line line-count)
- (goto-char (- (line-end-position) offset-from-line-end))
+ (goto-char (- (if (and (not is-single-line)
+ (eq (line-end-position)
+ (save-excursion
+ (goto-char comment-block-end-position)
+ (line-end-position))))
+ comment-block-end-position
+ (line-end-position))
+ offset-from-line-end))
(or (/= (point) pos)
(progn
(goto-char comment-block-end-position)
@@ -901,7 +926,7 @@ IS-SINGLE-LINE should be non-nil when called inside a
single-line comment."
(or (< (point) pos)
(progn
(goto-char comment-block-beginning-position)
- (swift-mode:backward-sentence-inside-code nil)))))
+ (swift-mode:backward-sentence-inside-code t)))))
(defmacro swift-mode:with-temp-comment-buffer (&rest body)
"Eval BODY inside a temporary buffer keeping sentence related variables."
@@ -1098,10 +1123,7 @@ the end of a sentence, keep the position."
(progn (swift-mode:end-of-statement) t)
(let ((pos (point)))
(swift-mode:forward-statement)
- (or (not (eobp))
- (progn
- (forward-comment (- (point)))
- (< pos (point))))))))
+ (< pos (point))))))
(defun swift-mode:backward-sentence-inside-code
(&optional keep-position-if-at-beginning-of-sentence)
@@ -1118,10 +1140,7 @@ already at the beginning of a sentence, keep the
position."
(progn (swift-mode:beginning-of-statement) t)
(let ((pos (point)))
(swift-mode:backward-statement)
- (or (not (bobp))
- (progn
- (forward-comment (point-max))
- (< (point) pos)))))))
+ (< (point) pos)))))
(defun swift-mode:kill-sentence (&optional arg)
"Kill from the point to the end of sentences.
diff --git a/swift-mode-lexer.el b/swift-mode-lexer.el
index f17bdd5..97483e6 100644
--- a/swift-mode-lexer.el
+++ b/swift-mode-lexer.el
@@ -1331,23 +1331,30 @@ If this line ends with a single-line comment, goto just
before the comment."
If the cursor is outside of strings and comments, return nil.
If PARSER-STATE is given, it is used instead of (syntax-ppss)."
- (when (or (null parser-state) (number-or-marker-p parser-state))
- (setq parser-state (save-excursion (syntax-ppss parser-state))))
- (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)))
+ (save-excursion
+ (when (number-or-marker-p parser-state)
+ (goto-char parser-state))
+ (when (or (null parser-state) (number-or-marker-p parser-state))
+ (setq parser-state (save-excursion (syntax-ppss parser-state))))
+ (cond
+ ((nth 3 parser-state)
+ ;; Syntax category "|" is attached to both single-line and multiline
+ ;; string delimiters. So (nth 3 parser-state) may be t even for
+ ;; single-line string delimiters.
+ (if (save-excursion (goto-char (nth 8 parser-state))
+ (looking-at "\"\"\""))
+ (swift-mode:chunk 'multiline-string (nth 8 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)
diff --git a/test/swift-files/beginning-of-defun/beginning-of-defun.swift
b/test/swift-files/beginning-of-defun/beginning-of-defun.swift
index b8b4d2d..df07581 100644
--- a/test/swift-files/beginning-of-defun/beginning-of-defun.swift
+++ b/test/swift-files/beginning-of-defun/beginning-of-defun.swift
@@ -1,8 +1,8 @@
-// Foo bar baz.
+// /*[*/Foo bar baz./*]*/
-// Import declarations
+// /*[*/Import declarations/*]*/
-/*{*//* aaa */ /* bbb */@Foo import Foundation/*}*/
+/*{*//* /*[*/aaa/*]*/ */ /* /*[*/bbb/*]*/ */@Foo import Foundation/*}*/
/*{*/@Foo
import Foundation/*}*/
@@ -12,7 +12,7 @@ import Foundation/*}*/
import Foundation/*}*/
}/*}*/
-// Constant/variable declarations
+// /*[*/Constant/variable declarations/*]*/
/*{*/let x = foo()/*}*/
/*{*/@Foo
@@ -31,40 +31,40 @@ let
bar()/*}*/
/*{*/var a: Int {
- return 0
+ /*[*/return 0/*]*/
}/*}*/
/*{*/var a: Int {
/*{*/@Foo
get {
- return 0
+ /*[*/return 0/*]*/
}/*}*/
/*{*/@Foo
set {
- foo()
+ /*[*/foo()/*]*/
}/*}*/
}/*}*/
/*{*/var a = 0 {
/*{*/@Foo
willSet {
- foo()
+ /*[*/foo()/*]*/
}/*}*/
/*{*/@Foo
didSet {
- foo()
+ /*[*/foo()/*]*/
}/*}*/
}/*}*/
/*{*/class func foo() {
- let x = foo()
- let
+ /*[*/let x = foo()/*]*/
+ /*[*/let
y
=
- bar()
- while
+ bar()/*]*/
+ /*[*/while
let
x
=
@@ -80,13 +80,13 @@ let
)
=
ab {
- foo()
- foo()
- }
+ /*[*/foo()/*]*/
+ /*[*/foo()/*]*/
+ }/*]*/
}/*}*/
}/*}*/
-// Type alias declarationss
+// /*[*/Type alias declarationss/*]*/
/*{*/@Foo typealias A = B/*}*/
@@ -107,7 +107,7 @@ typealias
B/*}*/
}/*}*/
-// Function declarations
+// /*[*/Function declarations/*]*/
/*{*/func foo() {
}/*}*/
@@ -134,11 +134,11 @@ foo() {
(Int -> [Int])
=
{
- x
- in
- [
+ /*[*/x
+ in/*]*/
+ /*[*/[
x
- ]
+ ]/*]*/
}
)
throws
@@ -156,10 +156,11 @@ foo() {
==
Int
{
+ /*[*/foo()/*]*/
}/*}*/
}/*}*/
-// Enum declarations
+// /*[*/Enum declarations/*]*/
/*{*/enum Foo<A> where A: B {
/*{*/case Foo(a: Int)/*}*/
@@ -177,26 +178,26 @@ foo() {
0/*}*/
/*{*/func foo() -> a {
- switch this {
- case .Foo:
- return a
- case
+ /*[*/switch this {
+ /*[*/case .Foo:
+ /*[*/return a/*]*/
+ /*[*/case
let .Bar(a):
- return a
- case
+ /*[*/return a/*]*/
+ /*[*/case
.Baz(var a):
- return a
- }
+ /*[*/return a/*]*/
+ }/*]*/
}/*}*/
}/*}*/
-// Struct declarations
+// /*[*/Struct declarations/*]*/
/*{*/struct Foo {
}/*}*/
-// Class declarations
+// /*[*/Class declarations/*]*/
/*{*/class Foo {
}/*}*/
@@ -227,7 +228,7 @@ public
}/*}*/
}/*}*/
-// Protocol declarations
+// /*[*/Protocol declarations/*]*/
/*{*/protocol Foo {
/*{*/var x: Int {
@@ -251,11 +252,11 @@ public
E/*}*/
}/*}*/
-// Extension declarations
+// /*[*/Extension declarations/*]*/
/*{*/extension Foo: AAA {
}/*}*/
-// Operator declarations
+// /*[*/Operator declarations/*]*/
/*{*/prefix
operator
+++/*}*/
@@ -268,52 +269,52 @@ public
:
AAA/*}*/
-// Precedence group declarations
+// /*[*/Precedence group declarations/*]*/
/*{*/precedencegroup Foo {
- higherThan: AAA, BBB, CCC
- lowerThan: DDD, EEE, FFF
- assignment: false
- associativity: left
+ /*[*/higherThan: AAA, BBB, CCC/*]*/
+ /*[*/lowerThan: DDD, EEE, FFF/*]*/
+ /*[*/assignment: false/*]*/
+ /*[*/associativity: left/*]*/
}/*}*/
/*{*/class Foo {
- // Initializer declarations
+ // /*[*/Initializer declarations/*]*/
/*{*/init() {
- `init`() {
- }
+ /*[*/`init`() {
+ }/*]*/
}/*}*/
- // Deinitializer declarations
+ // /*[*/Deinitializer declarations/*]*/
/*{*/deinit() {
}/*}*/
- // Subscript declarations
+ // /*[*/Subscript declarations/*]*/
/*{*/subscript(x: Int) {
}/*}*/
}/*}*/
-// Multiple declaratoins in single line
+// /*[*/Multiple declaratoins in single line/*]*/
/*{*/func foo(){};/*}*/ /*{*/func foo(){/*{*/func foo(){}/*}*/};/*}*//*{*/func
foo(){} ;/*}*/ /*{*/func foo() {} /* */ ;/*}*/ /*{*//* */ func foo() {}/*}*/
-// Strings and comments
+// /*[*/Strings and comments/*]*/
/*{*/let x = """
- class Foo {}
+ /*[*/class Foo {}
\(
- { () in
+ { /*[*/() in/*]*/
/*{*/class Foo {
}/*}*/
- return 0
+ /*[*/return 0/*]*/
}()
)
"""/*}*/
-// class Foo {}
+// /*[*/class Foo {}/*]*/
/*
- class Foo {
- }
+ /*[*/class Foo {
+ }/*]*/
*/
-// Foo bar baz.
+// /*[*/Foo bar baz./*]*/
diff --git a/test/swift-files/beginning-of-defun/beginning-of-sentence.swift
b/test/swift-files/beginning-of-defun/beginning-of-sentence.swift
new file mode 100644
index 0000000..892765a
--- /dev/null
+++ b/test/swift-files/beginning-of-defun/beginning-of-sentence.swift
@@ -0,0 +1,59 @@
+
+
+/*{*/let x = "abc./*]*/ /*[*/def."/*}*/
+
+// /*[*/aaa
+// bbb/*]*/
+//
+// /*[*/ccc
+// ddd/*]*/
+
+//
+// /*[*/eee
+// fff/*]*/
+//
+
+/////
+///// /*[*/eee
+///// fff/*]*/
+/////
+
+/**
+ /*[*/aaa./*]*/ /*[*/bbb
+ ccc/*]*/
+
+ /*[*/eee/*]*/
+ */
+
+/*{*/let x = 1/*}*/ // /*[*/aaa
+// aaa
+// bbb/*]*/
+
+/*{*/func foo() {
+ /// /*[*/aaa./*]*/ /*[*/bbb./*]*/
+ ///
+ /// /*[*/ccc./*]*/
+}/*}*/
+
+/*{*/let x = """
+ /*[*/aaa./*]*/
+ /*[*/bbb./*]*/
+ /*[*/ccc./*]*/
+ """ + """
+ /*[*/ddd./*]*/
+ /*[*/eee./*]*/
+ /*[*/fff./*]*/
+ """/*}*/
+
+
+/*{*/let x = """
+ /*[*/aaa./*]*/
+ /*[*/bbb \(
+ foo("aaa./*]*/ /*[*/bbb") + { /*[*/() in/*]*/
+ /*[*/foo()/*]*/
+ /*[*/return bar()/*]*/
+ }() + bar("aaa./*]*/ /*[*/bbb")
+ ) ccc./*]*/
+ """/*}*/
+
+
diff --git a/test/swift-mode-test-beginning-of-defun.el
b/test/swift-mode-test-beginning-of-defun.el
index 129170f..1ada5d3 100644
--- a/test/swift-mode-test-beginning-of-defun.el
+++ b/test/swift-mode-test-beginning-of-defun.el
@@ -91,7 +91,19 @@ PROGRESS-REPORTER is the progress-reporter."
expected-positions-asc
#'>
#'swift-mode:end-of-defun
- 'end-of-defun)))
+ 'end-of-defun)
+ (list
+ expected-positions-desc
+ #'<
+ (lambda ()
+ (swift-mode:backward-sentence)
+ (skip-syntax-forward " "))
+ '(beginning-of-sentence beginning-of-defun))
+ (list
+ expected-positions-asc
+ #'>
+ #'swift-mode:forward-sentence
+ '(end-of-sentence end-of-defun))))
(setq current-line 0)
(while (not (eobp))
(when (not noninteractive)
@@ -117,13 +129,15 @@ PROGRESS-REPORTER is the progress-reporter."
The result is a list of remarkable tokens in descendant order. A remarkable
token is a list with the follwing elements:
-1. Type; one of `beginning-of-defun', `end-of-defun', `{', or `}'
+1. Type; one of `beginning-of-defun', `end-of-defun', `beginning-of-sentence',
+`end-of-sentence', `{', or `}'
2. Start position
3. End position
4. Nesting level at the start position
5. Nesting level at the end position
-`beginning-of-defun' and `end-of-defun' are represented as /*{*/ and /*}*/,
+`beginning-of-defun', `end-of-defun', `beginning-of-sentence', and
+`end-of-sentence' are represented as /*{*/, /*}*/, /*[*/, and /*]*/,
respectively, in the test file, and removed from the buffer.
`{' and `}' includes square brackets and parentheses."
@@ -133,7 +147,13 @@ respectively, in the test file, and removed from the
buffer.
(list (list 'beginning-of-defun (point) (point) 0 0)))
(depth 0)
(pattern (mapconcat #'regexp-quote
- '("/*{*/" "/*}*/" "{" "}" "[" "]" "(" ")")
+ '("/*{*/" "/*}*/" "/*[*/" "/*]*/"
+ "{" "}" "[" "]" "(" ")"
+ "/*" "*/"
+ "//" "\n"
+ "\"\"\""
+ "\""
+ )
"\\|"))
match-string
match-beginning
@@ -155,16 +175,74 @@ respectively, in the test file, and removed from the
buffer.
match-beginning match-beginning
depth depth))
(replace-match ""))
- ((and (member match-string '("{" "[" "("))
+ ((equal match-string "/*[*/")
+ (add-to-list 'expected-positions
+ (list 'beginning-of-sentence
+ match-beginning match-beginning
+ depth depth))
+ (replace-match ""))
+ ((equal match-string "/*]*/")
+ (add-to-list 'expected-positions
+ (list 'end-of-sentence
+ match-beginning match-beginning
+ depth depth))
+ (replace-match ""))
+ ((and (member match-string '("{" "[" "(" "/*"))
(not (swift-mode:chunk-after match-beginning)))
(setq depth (1+ depth))
(add-to-list 'expected-positions
(list '{ match-beginning match-end (1- depth) depth)))
- ((and (member match-string '("}" "]" ")"))
+ ((and (member match-string '("}" "]" ")" "*/"))
(not (swift-mode:chunk-after match-end)))
(setq depth (1- depth))
(add-to-list 'expected-positions
- (list '} match-beginning match-end (1+ depth) depth)))))
+ (list '} match-beginning match-end (1+ depth) depth)))
+
+ ((and (equal match-string "//")
+ (not (swift-mode:chunk-after match-beginning)))
+ (setq depth (1+ depth))
+ (add-to-list 'expected-positions
+ (list '{ match-beginning match-end (1- depth) depth)))
+ ((and (equal match-string "\n")
+ (eq (swift-mode:chunk:type
+ (swift-mode:chunk-after match-beginning))
+ 'single-line-comment))
+ (if (looking-at "\\s *//")
+ ;; Fuses with next line.
+ (goto-char (match-end 0))
+ (setq depth (1- depth))
+ (add-to-list 'expected-positions
+ (list '} match-beginning match-end (1+ depth)
depth))))
+ ((and (equal match-string "\"\"\"")
+ (not (eq (char-before match-beginning) ?\\))
+ (not (swift-mode:chunk:comment-p
+ (swift-mode:chunk-after match-beginning))))
+ (if (swift-mode:chunk:multiline-string-p
+ (swift-mode:chunk-after match-end))
+ (progn (setq depth (1+ depth))
+ (add-to-list
+ 'expected-positions
+ (list '{ match-beginning match-end (1- depth) depth)))
+ (setq depth (1- depth))
+ (add-to-list
+ 'expected-positions
+ (list '} match-beginning match-end (1+ depth) depth))))
+ ((and (equal match-string "\"")
+ (not (eq (char-before match-beginning) ?\\))
+ (not (swift-mode:chunk:comment-p
+ (swift-mode:chunk-after match-beginning)))
+ (not (swift-mode:chunk:multiline-string-p
+ (swift-mode:chunk-after match-beginning))))
+ (if (swift-mode:chunk:single-line-string-p
+ (swift-mode:chunk-after match-end))
+ (progn (setq depth (1+ depth))
+ (add-to-list
+ 'expected-positions
+ (list '{ match-beginning match-end (1- depth) depth)))
+ (setq depth (1- depth))
+ (add-to-list
+ 'expected-positions
+ (list '} match-beginning match-end (1+ depth) depth))))))
(goto-char (point-max))
(add-to-list 'expected-positions
(list 'end-of-defun (point) (point) depth depth))
@@ -177,7 +255,7 @@ respectively, in the test file, and removed from the buffer.
expected-positions
less-than-function
beginning-of-thing-function
- boundary-symbol)
+ boundary-symbols)
"Run `beginning-of-defun' test for `swift-mode' on current line.
SWIFT-FILE is the filename of the current test case.
@@ -189,8 +267,10 @@ LESS-THAN-FUNCTION is a function returns non-nil iff the
firt argument is
before (or after for `end-of-defun' test) the second argument.
BEGINNING-OF-THING-FUNCTION is a function goes to the boundary, that is the
beginning of a defun or the end of the defun..
-BOUNDARY-SYMBOL is the type of expected remarkable token, like
-`beginning-of-defun' or `end-of-defun`'"
+BOUNDARY-SYMBOLS is the type or the list of types of expected remarkable token,
+like `beginning-of-defun' or `end-of-defun'"
+ (when (symbolp boundary-symbols)
+ (setq boundary-symbols (list boundary-symbols)))
(forward-line 0)
(let ((status 'ok)
depth
@@ -209,7 +289,7 @@ BOUNDARY-SYMBOL is the type of expected remarkable token,
like
(lambda (position)
(setq depth (min depth (nth 2 position)))
(and
- (eq (nth 0 position) boundary-symbol)
+ (memq (nth 0 position) boundary-symbols)
(funcall less-than-function (nth 1 position) (point))
(<= (nth 2 position) depth)))
expected-positions-before-point
@@ -223,7 +303,7 @@ BOUNDARY-SYMBOL is the type of expected remarkable token,
like
error-buffer swift-file current-line
"error"
(concat
- (symbol-name boundary-symbol)
+ (symbol-name (car boundary-symbols))
": at "
(prin1-to-string (point))
", expected "
- [nongnu] elpa/swift-mode 7837c90 319/496: Fix indentation around "where" and "catch", (continued)
- [nongnu] elpa/swift-mode 7837c90 319/496: Fix indentation around "where" and "catch", ELPA Syncer, 2021/08/29
- [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 <=
- [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, 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