branch: elpa/d-mode
commit 3f3402897640e589fd26bbd09cfed0dcccde6a96
Author: Vladimir Panteleev <[email protected]>
Commit: Vladimir Panteleev <[email protected]>
Fix imenu with AtAttributes
---
d-mode.el | 84 ++++++++++++++++++++++++++++++++---------------------------
tests/imenu.d | 5 +++-
2 files changed, 50 insertions(+), 39 deletions(-)
diff --git a/d-mode.el b/d-mode.el
index 9c2af8e..96ea1b9 100644
--- a/d-mode.el
+++ b/d-mode.el
@@ -7,7 +7,7 @@
;; Maintainer: Russel Winder <[email protected]>
;; Vladimir Panteleev <[email protected]>
;; Created: March 2007
-;; Version: 201908262322
+;; Version: 201908262327
;; Keywords: D programming language emacs cc-mode
;; Package-Requires: ((emacs "24.3"))
@@ -492,40 +492,53 @@ Each list item should be a regexp matching a single
identifier."
(zero-or-more space))
(zero-or-more
- word-start
(or
- ;; StorageClass
- "deprecated"
- "static"
- "extern"
- "abstract"
- "final"
- "override"
- "synchronized"
- "scope"
- "nothrow"
- "pure"
- "ref"
+ word-start
+ (or
+ ;; StorageClass
+ "deprecated"
+ "static"
+ "extern"
+ "abstract"
+ "final"
+ "override"
+ "synchronized"
+ "scope"
+ "nothrow"
+ "pure"
+ "ref"
+ (seq
+ (or
+ "extern"
+ "deprecated"
+ "package"
+ )
+ (zero-or-more space)
+ "("
+ (zero-or-more space)
+ (one-or-more (not (any "()")))
+ (zero-or-more space)
+ ")")
+
+ ;; VisibilityAttribute
+ "private"
+ "package"
+ "protected"
+ "public"
+ "export"
+ )
+
+ ;; AtAttribute
(seq
- (or
- "extern"
- "deprecated"
- "package"
- )
- (zero-or-more space)
- "("
- (zero-or-more space)
- (one-or-more (not (any "()")))
- (zero-or-more space)
- ")")
-
- ;; VisibilityAttribute
- "private"
- "package"
- "protected"
- "public"
- "export"
- )
+ "@"
+ (one-or-more (any "a-zA-Z0-9_"))
+ (zero-or-one
+ (zero-or-more space)
+ "("
+ (zero-or-more space)
+ (one-or-more (not (any "()")))
+ (zero-or-more space)
+ ")")))
(zero-or-more space))
))
@@ -538,11 +551,6 @@ Each list item should be a regexp matching a single
identifier."
(eval d--imenu-rx-def-start)
- ;; Qualifiers
- (zero-or-more
- (one-or-more (any "a-z_@()C+"))
- (one-or-more space))
-
;; Type
(group
(one-or-more (any "a-zA-Z0-9_.*![]()")))
diff --git a/tests/imenu.d b/tests/imenu.d
index 9dcfae1..1aac8fa 100644
--- a/tests/imenu.d
+++ b/tests/imenu.d
@@ -1,5 +1,5 @@
// #run: (d-test-get-imenu-lines)
-// #out: (4 6 11 14 17 19 22 25 33 34 37 40 43 46 49 52 54 56 67 75 78 81 84)
+// #out: (4 6 11 14 17 19 22 25 33 34 37 40 43 46 49 52 54 56 67 75 78 81 84
87)
void foo(int x) {}
@@ -82,3 +82,6 @@ public alias foo=bar;
// alias template
public alias Regex(Char) = std.regex.internal.ir.Regex!(Char);
+
+// AtAttribute
+@trusted public struct RegexMatch(R, alias Engine = ThompsonMatcher) {}