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

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

[elpa] externals/csharp-mode ae1e36c 132/459: Tentative fix for imenu an


From: ELPA Syncer
Subject: [elpa] externals/csharp-mode ae1e36c 132/459: Tentative fix for imenu and generics
Date: Sun, 22 Aug 2021 13:59:12 -0400 (EDT)

branch: externals/csharp-mode
commit ae1e36c2276aef8b079905f41f8382e5c96c85b8
Author: Jostein Kjønigsen <jostein@kjonigsen.net>
Commit: Jostein Kjønigsen <jostein@kjonigsen.net>

    Tentative fix for imenu and generics
    
    Fixes https://github.com/josteink/csharp-mode/issues/51
---
 csharp-mode-tests.el              | 16 ++++++++++++++++
 csharp-mode.el                    |  4 +++-
 test-files/imenu-generics-test.cs | 19 +++++++++++++++++++
 3 files changed, 38 insertions(+), 1 deletion(-)

diff --git a/csharp-mode-tests.el b/csharp-mode-tests.el
index 0fb7661..10cfb37 100644
--- a/csharp-mode-tests.el
+++ b/csharp-mode-tests.el
@@ -166,6 +166,22 @@
            (result         (csharp--imenu-remove-param-names-from-paramlist 
test-value)))
       (should (equal expected-value result)))))
 
+(ert-deftest imenu-parsing-supports-generic-parameters ()
+  (let* ((find-file-hook '()) ;; avoid vc-mode file-hooks when opening!
+         (buffer         (find-file-read-only 
"./test-files/imenu-generics-test.cs"))
+         (ignored        (beginning-of-buffer))
+         (imenu-index    (csharp--imenu-create-index-helper nil "" t t)) ;; 
same line as in `csharp-imenu-create-index'.
+         (class-entry    (cadr imenu-index))
+         (class-entries  (cdr class-entry))
+         (class-items    (mapcar 'car class-entries))
+         (all-in-one     (cl-reduce 'concat class-items)))
+
+    ;; ("(top)" "method void NoGeneric(this IAppBuilder, params object[])" 
"method void OneGeneric<T>(this IAppBuilder, params object[])" "method void 
TwoGeneric<T1,T2>(this IAppBuilder, params object[])" "(bottom)")
+    (should (string-match-p "NoGeneric" all-in-one))
+    (should (string-match-p "OneGeneric<T>" all-in-one))
+    (should (string-match-p "TwoGeneric<T1,T2>" all-in-one))
+    (kill-buffer buffer)))
+
 (defvar csharp-hook1 nil)
 (defvar csharp-hook2 nil)
 
diff --git a/csharp-mode.el b/csharp-mode.el
index 21ea1e5..75927b3 100644
--- a/csharp-mode.el
+++ b/csharp-mode.el
@@ -1483,7 +1483,9 @@ Most other csharp functions are not instrumented.
          "\\(?:override[ \t\n\r\f\v]+\\)?"            ;; optional
          "\\([[:alpha:]_][^\t\(\n]+\\)"               ;; 2. return type - 
possibly generic
          "[ \t\n\r\f\v]+"
-         "\\([[:alpha:]_][[:alnum:]_]*\\)"            ;; 3. name of func
+         "\\([[:alpha:]_][[:alnum:]_]*"               ;; 3. begin name of func
+         "\\(?:<\\(?:[[:alpha:]][[:alnum:]]*[, ]?\\)*>\\)?"  ;; (with optional 
generic type parameter(s)
+         "\\)"                                        ;; 3. end of name of func
          "[ \t\n\r\f\v]*"
          "\\(\([^\)]*\)\\)"                           ;; 4. params w/parens
          "[ \t\n\r\f\v]*"
diff --git a/test-files/imenu-generics-test.cs 
b/test-files/imenu-generics-test.cs
new file mode 100644
index 0000000..cd6fec1
--- /dev/null
+++ b/test-files/imenu-generics-test.cs
@@ -0,0 +1,19 @@
+using System;
+
+class ImenuMatcherTests
+{
+    private void OneGeneric<T>(this IAppBuilder builder, params object[] args)
+    {
+        Console.WriteLine("TODO: something");
+    }
+
+    private void TwoGeneric<T1,T2>(this IAppBuilder builder, params object[] 
args)
+    {
+        Console.WriteLine("TODO: something");
+    }
+
+    private void NoGeneric(this IAppBuilder builder, params object[] args)
+    {
+        Console.WriteLine("TODO: something");
+    }
+}



reply via email to

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