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

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

[nongnu] elpa/rust-mode 0de149a 287/486: Merge pull request #190 from mr


From: ELPA Syncer
Subject: [nongnu] elpa/rust-mode 0de149a 287/486: Merge pull request #190 from mrBliss/imenu-extern
Date: Sat, 7 Aug 2021 09:25:37 -0400 (EDT)

branch: elpa/rust-mode
commit 0de149a9ad04f652cd7a59a9ef67be8a7d86ba76
Merge: 8039d12 b8126e4
Author: Niko Matsakis <niko@alum.mit.edu>
Commit: GitHub <noreply@github.com>

    Merge pull request #190 from mrBliss/imenu-extern
    
    Recognize "extern" imenu items
---
 rust-mode-tests.el | 40 ++++++++++++++++++++++++++++++++++++++++
 rust-mode.el       |  3 +++
 2 files changed, 43 insertions(+)

diff --git a/rust-mode-tests.el b/rust-mode-tests.el
index 2585237..7b29ee1 100644
--- a/rust-mode-tests.el
+++ b/rust-mode-tests.el
@@ -3,6 +3,7 @@
 (require 'rust-mode)
 (require 'ert)
 (require 'cl)
+(require 'imenu)
 
 (setq rust-test-fill-column 32)
 
@@ -2614,6 +2615,45 @@ Fontification needs to include this whole string or none 
of it.
       (rust--after-revert-hook)
       (should (equal initial-point (point))))))
 
+(defun test-imenu (code expected-items)
+  (with-temp-buffer
+    (rust-mode)
+    (insert code)
+    (let ((actual-items
+           ;; Replace ("item" . #<marker at ? in ?.rs) with "item"
+           (mapcar (lambda (class)
+                     (cons (car class)
+                           (mapcar #'car (cdr class))))
+                   (imenu--generic-function rust-imenu-generic-expression))))
+      (should (equal expected-items actual-items)))))
+
+(ert-deftest rust-test-imenu-extern-unsafe-fn ()
+  (test-imenu
+   "
+fn one() {
+}
+
+unsafe fn two() {
+}
+
+extern \"C\" fn three() {
+}
+
+pub extern fn four() {
+
+}
+
+extern \"rust-intrinsic\" fn five() {
+
+}
+"
+   '(("Fn"
+      "one"
+      "two"
+      "three"
+      "four"
+      "five"))))
+
 ;; If electric-pair-mode is available, load it and run the tests that use it.  
If not,
 ;; no error--the tests will be skipped.
 (require 'elec-pair nil t)
diff --git a/rust-mode.el b/rust-mode.el
index 1527c7a..dfe3e9a 100644
--- a/rust-mode.el
+++ b/rust-mode.el
@@ -33,6 +33,7 @@
 (defconst rust-re-uc-ident "[[:upper:]][[:word:][:multibyte:]_[:digit:]]*")
 (defconst rust-re-vis "pub")
 (defconst rust-re-unsafe "unsafe")
+(defconst rust-re-extern "extern")
 
 (defconst rust-re-non-standard-string
   (rx
@@ -571,6 +572,8 @@ buffer."
   (concat "^[[:space:]]*"
           (rust-re-shy (concat (rust-re-word rust-re-vis) "[[:space:]]+")) "?"
           (rust-re-shy (concat (rust-re-word rust-re-unsafe) "[[:space:]]+")) 
"?"
+          (rust-re-shy (concat (rust-re-word rust-re-extern) "[[:space:]]+"
+                               (rust-re-shy "\"[^\"]+\"[[:space:]]+") "?")) "?"
           (rust-re-item-def itype)))
 
 (defconst rust-re-special-types (regexp-opt rust-special-types 'symbols))



reply via email to

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