From 02b76cab377198089081c8e7117c129ac26d67ce Mon Sep 17 00:00:00 2001 From: Alexandr Timchenko Date: Tue, 29 Jan 2019 12:57:15 +0100 Subject: [PATCH] Added support for Imenu --- changelog.MD | 2 ++ solidity-mode.el | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/changelog.MD b/changelog.MD index 49e8db3..3e0c678 100644 --- a/changelog.MD +++ b/changelog.MD @@ -14,6 +14,8 @@ The changelog starts from version 0.1.4 as too much was added in each version be - payable +- Added support for Imenu + ## Version 0.1.9 - Integrated [company-solidity](https://github.com/ssmolkin1/company-solidity) into solidity-mode, providing autocompletion out of the box if the user has [company-mode](http://company-mode.github.io) installed. diff --git a/solidity-mode.el b/solidity-mode.el index 1d14bda..7d16d85 100644 --- a/solidity-mode.el +++ b/solidity-mode.el @@ -493,6 +493,24 @@ Cursor must be at the function's name. Does not currently work for constructors (interactive) (solidity--start-gasestimate (thing-at-point 'symbol 'no-properties))) +;;; Support for imenu +(defun solidity-mode-imenu-generic-expression () + (let* ((spacetabs "[\t\n ]+") + (optional-spacetabs "[\t\n ]*") + (ident-group "\\([A-Za-z_][A-Za-z0-9_]*\\)") + (ctr-ident-group "\\(constructor\\)") + (modifier (mapconcat 'identity + '("payable" "public" "private" "external" "internal" "view" "pure") + "\\|")) + (modifiers (concat "\\(?:\\(?:" modifier "\\)" spacetabs "\\)*"))) + `(("function", (concat "^" optional-spacetabs "function" spacetabs ident-group) 1) + ("modifier", (concat "^" optional-spacetabs "modifier" spacetabs ident-group) 1) + ("constructor", (concat "^" optional-spacetabs ctr-ident-group) 1) + ("contract", (concat "^" optional-spacetabs "contract" spacetabs ident-group) 1) + ("library", (concat "^" optional-spacetabs "library" spacetabs ident-group) 1) + ("interface", (concat "^" optional-spacetabs "interface" spacetabs ident-group) 1) + ))) + ;;;###autoload (define-derived-mode solidity-mode c-mode "solidity" "Major mode for editing solidity language buffers." @@ -524,6 +542,10 @@ Cursor must be at the function's name. Does not currently work for constructors (set (make-local-variable 'comment-line-break-function) 'c-indent-new-comment-line) + ;; set imenu + (setq imenu-generic-expression + (solidity-mode-imenu-generic-expression)) + ;; set keymap (use-local-map solidity-mode-map) ;; set hooks