emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/d-mode af6dbfa 183/346: Generalize StorageClass/Visibility


From: ELPA Syncer
Subject: [nongnu] elpa/d-mode af6dbfa 183/346: Generalize StorageClass/VisibilityAttribute parsing in imenu
Date: Sun, 29 Aug 2021 11:00:26 -0400 (EDT)

branch: elpa/d-mode
commit af6dbfa15421e17aa5279461bc99c985dba9ba62
Author: Vladimir Panteleev <git@thecybershadow.net>
Commit: Vladimir Panteleev <git@thecybershadow.net>

    Generalize StorageClass/VisibilityAttribute parsing in imenu
---
 d-mode.el     | 76 ++++++++++++++++++++++++++++++++++++++++++-----------------
 tests/imenu.d |  5 +++-
 2 files changed, 58 insertions(+), 23 deletions(-)

diff --git a/d-mode.el b/d-mode.el
index 2312f71..75f46f0 100644
--- a/d-mode.el
+++ b/d-mode.el
@@ -7,7 +7,7 @@
 ;; Maintainer:  Russel Winder <russel@winder.org.uk>
 ;;              Vladimir Panteleev <vladimir@thecybershadow.net>
 ;; Created:  March 2007
-;; Version:  201908262309
+;; Version:  201908262320
 ;; Keywords:  D programming language emacs cc-mode
 ;; Package-Requires: ((emacs "24.3"))
 
@@ -477,10 +477,6 @@ Each list item should be a regexp matching a single 
identifier."
 
 (defconst d--imenu-rx-def-start
   '(seq
-    ;; Whitespace
-    bol
-    (zero-or-more space)
-
     ;; Conditionals
     (zero-or-one
      "else"
@@ -495,21 +491,51 @@ Each list item should be a regexp matching a single 
identifier."
      ")"
      (zero-or-more space))
 
-    ;; Extern declarations
-    (zero-or-one
-     "extern"
-     (zero-or-more space)
-     "("
-     (zero-or-more space)
-     (one-or-more (not (any "()")))
-     (zero-or-more space)
-     ")"
+    (zero-or-more
+     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"
+      )
      (zero-or-more space))
 
     ))
 
 (defconst d-imenu-method-name-pattern
   (rx
+   ;; Whitespace
+   bol
+   (zero-or-more space)
+
    (eval d--imenu-rx-def-start)
 
    ;; Qualifiers
@@ -591,10 +617,9 @@ Each list item should be a regexp matching a single 
identifier."
 (defvar d-imenu-generic-expression
   `(("*Classes*"
      ,(rx
+       bol
+       (zero-or-more space)
        (eval d--imenu-rx-def-start)
-       (zero-or-more
-       (or "final" "abstract" "private" "package" "protected" "public" 
"export" "static")
-       (one-or-more (syntax whitespace)))
        word-start
        "class"
        (one-or-more (syntax whitespace))
@@ -607,6 +632,8 @@ Each list item should be a regexp matching a single 
identifier."
      1)
     ("*Interfaces*"
      ,(rx
+       bol
+       (zero-or-more space)
        (eval d--imenu-rx-def-start)
        word-start
        "interface"
@@ -620,10 +647,9 @@ Each list item should be a regexp matching a single 
identifier."
      1)
     ("*Structs*"
      ,(rx
+       bol
+       (zero-or-more space)
        (eval d--imenu-rx-def-start)
-       (zero-or-more
-       (or "private" "package" "protected" "public" "export" "static")
-       (one-or-more (syntax whitespace)))
        word-start
        "struct"
        (one-or-more (syntax whitespace))
@@ -636,6 +662,8 @@ Each list item should be a regexp matching a single 
identifier."
      1)
     ("*Templates*"
      ,(rx
+       bol
+       (zero-or-more space)
        (eval d--imenu-rx-def-start)
        (zero-or-one
        "mixin"
@@ -652,6 +680,8 @@ Each list item should be a regexp matching a single 
identifier."
      1)
     ("*Enums*"
      ,(rx
+       bol
+       (zero-or-more space)
        (eval d--imenu-rx-def-start)
        word-start
        "enum"
@@ -670,7 +700,8 @@ Each list item should be a regexp matching a single 
identifier."
     ;; declared at the beginning of lines.
     ("*Aliases*"
      ,(rx
-       line-start
+       bol
+       (eval d--imenu-rx-def-start)
        "alias"
        (one-or-more (syntax whitespace))
        (submatch
@@ -684,7 +715,8 @@ Each list item should be a regexp matching a single 
identifier."
      1)
     ("*Aliases*"
      ,(rx
-       line-start
+       bol
+       (eval d--imenu-rx-def-start)
        "alias"
        (one-or-more (syntax whitespace))
        (one-or-more
diff --git a/tests/imenu.d b/tests/imenu.d
index 0dddfcd..2dc9089 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)
+// #out: (4 6 11 14 17 19 22 25 33 34 37 40 43 46 49 52 54 56 67 75 78 81)
 
 void foo(int x) {}
 
@@ -76,3 +76,6 @@ version(CoreDdoc) enum ClockType {}
 
 // Extern declarations
 extern (D) void peekSlice() {}
+
+// Aliases with VisibilityAttribute / StorageClass
+public alias foo=bar;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]