7 changed files with 2853 additions and 11 deletions
-
6.gitmodules
-
9modules/prelude-packages.el
-
591vendor/groovy-mode.el
-
1vendor/helm
-
2146vendor/mediawiki.el
-
110vendor/melpa.el
-
1vendor/yasnippet
@ -1,12 +1,6 @@ |
|||||
[submodule "personal"] |
[submodule "personal"] |
||||
path = personal |
path = personal |
||||
url = https://github.com/bbatsov/emacs-prelude-personal.git |
url = https://github.com/bbatsov/emacs-prelude-personal.git |
||||
[submodule "vendor/helm"] |
|
||||
path = vendor/helm |
|
||||
url = https://github.com/emacs-helm/helm |
|
||||
[submodule "vendor/yasnippet"] |
|
||||
path = vendor/yasnippet |
|
||||
url = https://github.com/capitaomorte/yasnippet |
|
||||
[submodule "vendor/feature-mode"] |
[submodule "vendor/feature-mode"] |
||||
path = vendor/feature-mode |
path = vendor/feature-mode |
||||
url = https://github.com/michaelklishin/cucumber.el |
url = https://github.com/michaelklishin/cucumber.el |
||||
@ -0,0 +1,591 @@ |
|||||
|
;;; groovy-mode.el --- Groovy mode derived mode |
||||
|
|
||||
|
;; Author: Russel Winder <russel@winder.org.uk> |
||||
|
;; Created: 2006-08-01 |
||||
|
;; Version: 201203310931 |
||||
|
|
||||
|
;;;; NB Version number is date and time yyyymmddhhMM in GMT (aka UTC). |
||||
|
|
||||
|
;; Copyright (C) 2006,2009-10,2012 Russel Winder |
||||
|
|
||||
|
;; This program is free software; you can redistribute it and/or modify it under the terms of the GNU |
||||
|
;; General Public License as published by the Free Software Foundation; either version 2 of the License, or |
||||
|
;; (at your option) any later version. |
||||
|
;; |
||||
|
;; This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even |
||||
|
;; the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public |
||||
|
;; License for more details. |
||||
|
;; |
||||
|
;; You should have received a copy of the GNU General Public License along with this program; if not, write |
||||
|
;; to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
||||
|
|
||||
|
;;; Authors: |
||||
|
;; |
||||
|
;; Russel Winder <russel@winder.org.uk>, 2006-- |
||||
|
;; Jim Morris <morris@wolfman.com>, 2009-- |
||||
|
|
||||
|
;;; Commentary: |
||||
|
;; |
||||
|
;; This mode was initially developed using the Java and Awk modes that are part of CC Mode (the 5.31 source |
||||
|
;; was used) and C# Mode from Dylan R. E. Moonfire <contact@mfgames.com> (the 0.5.0 source was used). This |
||||
|
;; code may contain some code fragments from those sources that was cut-and-pasted then edited. All other |
||||
|
;; code was newly entered by the author. Obviously changes have been made since then. |
||||
|
;; |
||||
|
;; NB This derived mode requires CC Mode 5.31 or later for the virtual semicolon code to work. |
||||
|
;; |
||||
|
;; There appears to be a problem in CC Mode 5.31 such that csharp-mode and groovy-mode crash XEmacs 21.4 if |
||||
|
;; the files are byte compiled. |
||||
|
|
||||
|
;;; Bugs: |
||||
|
;; |
||||
|
;; Bug tracking is currently (2009-11-26) handled using the Groovy JIRA via the Emacs Mode component. |
||||
|
;; cf. http://jira.codehaus.org/browse/GROOVY/component/14245 |
||||
|
|
||||
|
;;; Versions: |
||||
|
;; |
||||
|
;; 0.1.0 - will be the initial release when it is ready :-) |
||||
|
|
||||
|
;;; Notes: |
||||
|
;; |
||||
|
;; Need to think about the `*.', `?.', `.&' and `.@' operators. Also, `..' and `..<'. This probably means |
||||
|
;; changing `c-after-id-concat-ops' but also `c-operators'. |
||||
|
;; |
||||
|
;; Need to deal with operator overloading (groovy has this but Java does not) so `c-overloadable-operators' |
||||
|
;; needs investigating. |
||||
|
;; |
||||
|
;; Need to investigate how to support the triple string delimiters for multi-line strings. |
||||
|
;; |
||||
|
;; Should we support GString / template markup ( e.g. `<%' and `%>') specially? |
||||
|
;; |
||||
|
;; Need to think whether Groovy needs a different c-decl-prefix-re compared to Java. Certainly, Java will |
||||
|
;; have to change to handle the generics. |
||||
|
;; |
||||
|
;; Probably need to change `c-block-prefix-disallowed-chars' as Groovy is not the same as Java. |
||||
|
;; |
||||
|
;; Probably need to change `c-type-decl-suffix-key' as Groovy is not the same as Java. |
||||
|
|
||||
|
;;; Changes: |
||||
|
;; |
||||
|
;; See the history in the Bazaar branch. |
||||
|
|
||||
|
;;; Code: |
||||
|
|
||||
|
(require 'cc-mode) |
||||
|
|
||||
|
;; CSharp mode comment says: These are only required at compile time to get the sources for the language |
||||
|
;; constants. (The cc-fonts require and the font-lock related constants could additionally be put inside an |
||||
|
;; (eval-after-load "font-lock" ...) but then some trickery is necessary to get them compiled.) |
||||
|
(eval-when-compile |
||||
|
(let ((load-path |
||||
|
(if (and (boundp 'byte-compile-dest-file) |
||||
|
(stringp byte-compile-dest-file)) |
||||
|
(cons (file-name-directory byte-compile-dest-file) load-path) |
||||
|
load-path))) |
||||
|
(load "cc-mode" nil t) ; C# mode has this |
||||
|
(load "cc-fonts" nil t) ; C# mode has this |
||||
|
(load "cc-langs" nil t) ; C# mode has this |
||||
|
(load "cc-bytecomp" nil t) ; Awk mode has this |
||||
|
)) |
||||
|
|
||||
|
(eval-and-compile |
||||
|
(c-add-language 'groovy-mode 'java-mode)) |
||||
|
|
||||
|
;; Groovy allows `?.' as well as `.' for creating identifiers. |
||||
|
(c-lang-defconst c-identifier-ops |
||||
|
groovy '((left-assoc "." "?."))) |
||||
|
|
||||
|
;; Groovy allows operators such as `*.', `?.', `.&' and `.@'. Java mode puts `*' here to deal with |
||||
|
;; import statement usage which we need for Groovy. |
||||
|
(c-lang-defconst c-after-id-concat-ops |
||||
|
groovy '( "*" "&" "@" )) |
||||
|
|
||||
|
;;;; Should really do something with `c-string-escaped-newlines' and `c-multiline-string-start-char' to |
||||
|
;;;; handle the triple delimeter multiline strings. |
||||
|
|
||||
|
;; Because of the above we have to redefine `c_operators' because no other language has `.&' and |
||||
|
;; `.@' operators. |
||||
|
|
||||
|
(c-lang-defconst c-operators |
||||
|
"List describing all operators, along with their precedence and |
||||
|
associativity. The order in the list corresponds to the precedence of |
||||
|
the operators: The operators in each element is a group with the same |
||||
|
precedence, and the group has higher precedence than the groups in all |
||||
|
following elements. The car of each element describes the type of of |
||||
|
the operator group, and the cdr is a list of the operator tokens in |
||||
|
it. The operator group types are: |
||||
|
|
||||
|
'prefix Unary prefix operators. |
||||
|
'postfix Unary postfix operators. |
||||
|
'postfix-if-paren |
||||
|
Unary postfix operators if and only if the chars have |
||||
|
parenthesis syntax. |
||||
|
'left-assoc Binary left associative operators (i.e. a+b+c means (a+b)+c). |
||||
|
'right-assoc Binary right associative operators (i.e. a=b=c means a=(b=c)). |
||||
|
'right-assoc-sequence |
||||
|
Right associative operator that constitutes of a |
||||
|
sequence of tokens that separate expressions. All the |
||||
|
tokens in the group are in this case taken as |
||||
|
describing the sequence in one such operator, and the |
||||
|
order between them is therefore significant. |
||||
|
|
||||
|
Operators containing a character with paren syntax are taken to match |
||||
|
with a corresponding open/close paren somewhere else. A postfix |
||||
|
operator with close paren syntax is taken to end a postfix expression |
||||
|
started somewhere earlier, rather than start a new one at point. Vice |
||||
|
versa for prefix operators with open paren syntax. |
||||
|
|
||||
|
Note that operators like \".\" and \"->\" which in language references |
||||
|
often are described as postfix operators are considered binary here, |
||||
|
since CC Mode treats every identifier as an expression." |
||||
|
|
||||
|
groovy `( |
||||
|
;; Primary. |
||||
|
,@(c-lang-const c-identifier-ops) |
||||
|
|
||||
|
(postfix-if-paren "<" ">") ; Templates. |
||||
|
|
||||
|
(prefix "super") |
||||
|
|
||||
|
;; Postfix. |
||||
|
(left-assoc "." "*." "?." ".&" ".@") |
||||
|
|
||||
|
(postfix "++" "--" "[" "]" "(" ")" "<:" ":>") |
||||
|
|
||||
|
;; Unary. |
||||
|
(prefix "++" "--" "+" "-" "!" "~" "new" "(" ")") |
||||
|
|
||||
|
;; Multiplicative. |
||||
|
(left-assoc "*" "/" "%") |
||||
|
|
||||
|
;; Additive. |
||||
|
(left-assoc "+" "-") |
||||
|
|
||||
|
;; Shift. |
||||
|
(left-assoc "<<" ">>" ">>>") |
||||
|
|
||||
|
;; Relational. |
||||
|
(left-assoc "<" ">" "<=" ">=" "instanceof" "<=>") |
||||
|
|
||||
|
;; Matching. |
||||
|
(left-assoc "=~" "==~" ) |
||||
|
|
||||
|
;; Equality. |
||||
|
(left-assoc "==" "!=" ) |
||||
|
|
||||
|
;; Bitwise and. |
||||
|
(left-assoc "&") |
||||
|
|
||||
|
;; Bitwise exclusive or. |
||||
|
(left-assoc "^") |
||||
|
|
||||
|
;; Bitwise or. |
||||
|
(left-assoc "|") |
||||
|
|
||||
|
;; Logical and. |
||||
|
(left-assoc "&&") |
||||
|
|
||||
|
;; Logical or. |
||||
|
(left-assoc "||") |
||||
|
|
||||
|
;; Conditional. |
||||
|
(right-assoc-sequence "?" ":") |
||||
|
|
||||
|
;; Assignment. |
||||
|
(right-assoc ,@(c-lang-const c-assignment-operators)) |
||||
|
|
||||
|
;; Exception. |
||||
|
;(prefix "throw") ; Java mode didn't have this but c++ mode does. Humm... |
||||
|
|
||||
|
;; Sequence. |
||||
|
(left-assoc ",") |
||||
|
|
||||
|
;; Separator for parameter list and code in a closure. |
||||
|
(left-assoc "->") |
||||
|
)) |
||||
|
|
||||
|
;; Groovy can overload operators where Java cannot. |
||||
|
(c-lang-defconst c-overloadable-operators |
||||
|
groovy '("+" "-" "*" "/" "%" |
||||
|
"&" "|" "^" "~" "<<" ">>" ">>>" |
||||
|
"==" "!=" ">" "<" ">=" "<=" |
||||
|
"<=>" |
||||
|
"=~" "==~" |
||||
|
"++" "--" "+=" "-=" "*=" "/=" "%=" |
||||
|
"&=" "|=" "^=" "~=" "<<=" ">>=" ">>>=" |
||||
|
"!" "&&" "||")) |
||||
|
|
||||
|
;; Groovy allows newline to terminate a statement unlike Java and like Awk. We draw on the Awk |
||||
|
;; Mode `Virtual semicolon material. The idea is to say when an EOL is a `virtual semicolon, |
||||
|
;; i.e. a statement terminator. |
||||
|
|
||||
|
(c-lang-defconst c-stmt-delim-chars |
||||
|
groovy "^;{}\n\r?:") |
||||
|
|
||||
|
(c-lang-defconst c-stmt-delim-chars-with-comma |
||||
|
groovy "^;,{}\n\r?:") |
||||
|
|
||||
|
;; Is there a virtual semicolon at POS or point? |
||||
|
;; |
||||
|
;; A virtual semicolon is considered to lie just after the last non-syntactic-whitespace |
||||
|
;; character on a line where the EOL is the statement terminator. A real semicolon never |
||||
|
;; counts as a virtual one. |
||||
|
(defun groovy-at-vsemi-p ( &optional pos ) |
||||
|
(save-excursion |
||||
|
(let ((pos-or-point (if pos (goto-char pos) (point)))) |
||||
|
(if (eq pos-or-point (point-min)) |
||||
|
nil |
||||
|
(and |
||||
|
(not (char-equal (char-before) ?\;)) |
||||
|
(groovy-ws-or-comment-to-eol-p pos-or-point) |
||||
|
(groovy-not-in-statement-p pos-or-point) |
||||
|
(groovy-not-if-or-else-etc-p pos-or-point)))))) |
||||
|
|
||||
|
(c-lang-defconst c-at-vsemi-p-fn |
||||
|
groovy 'groovy-at-vsemi-p) |
||||
|
|
||||
|
;; see if end of line or comment on rest of line |
||||
|
(defun groovy-ws-or-comment-to-eol-p ( pos ) |
||||
|
(save-excursion |
||||
|
(goto-char pos) |
||||
|
(skip-chars-forward " \t") |
||||
|
(or |
||||
|
(char-equal (char-after) ?\n) |
||||
|
(looking-at "/[/*].*")))) |
||||
|
|
||||
|
(defun groovy-not-in-statement-p ( pos ) |
||||
|
(save-excursion |
||||
|
(goto-char pos) |
||||
|
(if (equal (point) (point-min)) |
||||
|
nil |
||||
|
(backward-char 1) |
||||
|
(or |
||||
|
(not (looking-at "[=+*%<{:]")) |
||||
|
(if (char-equal (char-after) ?>) |
||||
|
(if (equal (point) (point-min)) |
||||
|
nil |
||||
|
(char-equal (char-before) ?-))))))) |
||||
|
|
||||
|
;; check for case of if(stuff) and nothing else on line |
||||
|
;; ie |
||||
|
;; if(x > y) |
||||
|
;; |
||||
|
;; if(x < y) do somehting will not match |
||||
|
;; else blah blah will not match either |
||||
|
(defun groovy-not-if-or-else-etc-p ( pos ) |
||||
|
(save-excursion |
||||
|
(goto-char pos) |
||||
|
(back-to-indentation) |
||||
|
(not |
||||
|
(or |
||||
|
(and (looking-at "if") ; make sure nothing else on line |
||||
|
(progn (forward-sexp 2) |
||||
|
(groovy-ws-or-comment-to-eol-p (point)))) |
||||
|
(and (looking-at "}?else") |
||||
|
(progn (forward-char) |
||||
|
(forward-sexp 1) |
||||
|
(groovy-ws-or-comment-to-eol-p (point)))))))) |
||||
|
|
||||
|
(defun groovy-vsemi-status-unknown-p () nil) |
||||
|
|
||||
|
(c-lang-defconst c-vsemi-status-unknown-p-fn |
||||
|
groovy 'c-groovy-vsemi-status-unknown-p) |
||||
|
|
||||
|
|
||||
|
;; Java does not do this but perhaps it should? |
||||
|
(c-lang-defconst c-type-modifier-kwds |
||||
|
groovy '("volatile" "transient")) |
||||
|
|
||||
|
(c-lang-defconst c-typeless-decl-kwds |
||||
|
groovy (append (c-lang-const c-class-decl-kwds) |
||||
|
(c-lang-const c-brace-list-decl-kwds) |
||||
|
'("def"))) |
||||
|
|
||||
|
;;;; Should we be tinkering with `c-block-stmt-1-key' or `c-block-stmt-2-key' to deal with closures |
||||
|
;;;; following what appears to be function calls or even field names? |
||||
|
|
||||
|
;; Groovy allows use of `<%' and `%>' in template expressions. |
||||
|
;(c-lang-defconst c-other-op-syntax-tokens |
||||
|
; groovy '( "<%" "%>" )) |
||||
|
|
||||
|
;; Groovy does not allow the full set of Java keywords in the moifier category and, of course, there is the |
||||
|
;; `def' modifier which Groovy introduces to support dynamic typing. Should `const' be treated |
||||
|
;; as reserved here as it is in Java? |
||||
|
(c-lang-defconst c-modifier-kwds |
||||
|
groovy '( "abstract" "def" "final" "private" "protected" "public" "static" "synchronized" )) |
||||
|
|
||||
|
;; Java does not define these pseudo-kewords as keywords, why not? |
||||
|
|
||||
|
(c-lang-defconst c-constant-kwds |
||||
|
groovy '( "true" "false" "null" )) |
||||
|
|
||||
|
;; Why does Java mode not put `super' into the `c-primary-expr-kwds? |
||||
|
|
||||
|
(c-lang-defconst c-primary-expr-kwds |
||||
|
groovy '( "this" "super" )) |
||||
|
|
||||
|
;; Groovy does not allow anonymous classes as Java does. |
||||
|
(c-lang-defconst c-inexpr-class-kwds |
||||
|
groovy nil) |
||||
|
|
||||
|
(c-lang-defconst c-inexpr-brace-list-kwds |
||||
|
groovy nil) |
||||
|
|
||||
|
;;;; Should we be changing `c-opt-inexpr-brace-list-key' to deal with closures after function calls and |
||||
|
;;;; field expressions? |
||||
|
|
||||
|
;; We need to include the "as" for the cast and "in" for for. |
||||
|
(c-lang-defconst c-other-kwds |
||||
|
groovy '( "in" "as" )) |
||||
|
|
||||
|
|
||||
|
(defconst groovy-font-lock-keywords-1 (c-lang-const c-matchers-1 groovy) |
||||
|
"Minimal highlighting for Groovy mode. |
||||
|
Fontifies nothing except the syntactic fontification of strings and |
||||
|
comments.") |
||||
|
|
||||
|
(defconst groovy-font-lock-keywords-2 (c-lang-const c-matchers-2 groovy) |
||||
|
"Fast normal highlighting for Groovy mode. |
||||
|
In addition to `java-font-lock-keywords-1', this adds fontification of |
||||
|
keywords, simple types, declarations that are easy to recognize, the |
||||
|
user defined types on `java-font-lock-extra-types', and the doc |
||||
|
comment styles specified by `c-doc-comment-style'.") |
||||
|
|
||||
|
(defconst groovy-font-lock-keywords-3 (c-lang-const c-matchers-3 groovy) |
||||
|
"Accurate normal highlighting for Groovy mode. |
||||
|
Like `java-font-lock-keywords-2' but detects declarations in a more |
||||
|
accurate way that works in most cases for arbitrary types without the |
||||
|
need for `java-font-lock-extra-types'.") |
||||
|
|
||||
|
(defvar groovy-font-lock-keywords groovy-font-lock-keywords-3 |
||||
|
"Default expressions to highlight in Groovy mode.") |
||||
|
|
||||
|
(defun groovy-font-lock-keywords-2 () |
||||
|
(c-compose-keywords-list groovy-font-lock-keywords-2)) |
||||
|
(defun groovy-font-lock-keywords-3 () |
||||
|
(c-compose-keywords-list groovy-font-lock-keywords-3)) |
||||
|
(defun groovy-font-lock-keywords () |
||||
|
(c-compose-keywords-list groovy-font-lock-keywords)) |
||||
|
|
||||
|
(defvar groovy-mode-syntax-table nil |
||||
|
"Syntax table used in Groovy mode buffers.") |
||||
|
(or groovy-mode-syntax-table |
||||
|
(setq groovy-mode-syntax-table |
||||
|
(funcall (c-lang-const c-make-mode-syntax-table groovy)))) |
||||
|
|
||||
|
(defvar groovy-mode-abbrev-table nil |
||||
|
"Abbreviation table used in groovy-mode buffers.") |
||||
|
(c-define-abbrev-table 'groovy-mode-abbrev-table |
||||
|
;; Keywords that if they occur first on a line might alter the syntactic context, and which |
||||
|
;; therefore should trigger reindentation when they are completed. |
||||
|
'(("else" "else" c-electric-continued-statement 0) |
||||
|
("while" "while" c-electric-continued-statement 0) |
||||
|
("catch" "catch" c-electric-continued-statement 0) |
||||
|
("finally" "finally" c-electric-continued-statement 0))) |
||||
|
|
||||
|
;; Jim Morris proposed changing to the following definition of groovy-mode-map 2009-11-27, but this change |
||||
|
;; has not made so as to continue to use the same code structure as still used in the Java mode. |
||||
|
|
||||
|
;(defvar groovy-mode-map (let ((map (c-make-inherited-keymap))) |
||||
|
; ;; Add bindings which are only useful for Groovy |
||||
|
; map) |
||||
|
; "Keymap used in groovy-mode buffers.") |
||||
|
|
||||
|
(defvar groovy-mode-map () |
||||
|
"Keymap used in groovy-mode buffers.") |
||||
|
(if groovy-mode-map |
||||
|
nil |
||||
|
(setq groovy-mode-map (c-make-inherited-keymap)) |
||||
|
;; add bindings which are only useful for Groovy |
||||
|
) |
||||
|
|
||||
|
;(easy-menu-define c-groovy-menu groovy-mode-map "Groovy Mode Commands" |
||||
|
; (cons "Groovy" (c-lang-const c-mode-menu groovy))) |
||||
|
|
||||
|
;;; Autoload mode trigger |
||||
|
;;;###autoload |
||||
|
;(eval-after-load 'groovy-mode |
||||
|
; (add-to-list 'auto-mode-alist '("\\.groovy" . groovy-mode))) |
||||
|
(add-to-list 'auto-mode-alist '("\\.groovy$" . groovy-mode)) |
||||
|
|
||||
|
;; Custom variables |
||||
|
;;;###autoload |
||||
|
(defcustom groovy-mode-hook nil |
||||
|
"*Hook called by `groovy-mode'." |
||||
|
:type 'hook |
||||
|
:group 'c) |
||||
|
|
||||
|
|
||||
|
;;; The following are used to overide cc-mode indentation behavior to match groovy |
||||
|
|
||||
|
;; if we are in a closure that has an argument eg ends with -> (excluding comment) then |
||||
|
;; change indent else lineup with previous one |
||||
|
(defun groovy-mode-fix-closure-with-argument (langelem) |
||||
|
(save-excursion |
||||
|
(back-to-indentation) |
||||
|
(c-backward-syntactic-ws) |
||||
|
(backward-char 2) |
||||
|
(if (looking-at "->") ; if the line has a -> in it |
||||
|
(vector (+ (current-indentation) c-basic-offset)) ; then indent from base |
||||
|
0))) |
||||
|
|
||||
|
;; A helper function from: http://mihai.bazon.net/projects/emacs-javascript-mode/javascript.el |
||||
|
;; Originally named js-lineup-arglist, renamed to groovy-lineup-arglist |
||||
|
(defun groovy-lineup-arglist (langelem) |
||||
|
;; the "DWIM" in c-mode doesn't Do What I Mean. |
||||
|
;; see doc of c-lineup-arglist for why I redefined this |
||||
|
(save-excursion |
||||
|
(let ((indent-pos (point))) |
||||
|
;; Normal case. Indent to the token after the arglist open paren. |
||||
|
(goto-char (c-langelem-2nd-pos c-syntactic-element)) |
||||
|
(if (and c-special-brace-lists |
||||
|
(c-looking-at-special-brace-list)) |
||||
|
;; Skip a special brace list opener like "({". |
||||
|
(progn (c-forward-token-2) |
||||
|
(forward-char)) |
||||
|
(forward-char)) |
||||
|
(let ((arglist-content-start (point))) |
||||
|
(c-forward-syntactic-ws) |
||||
|
(when (< (point) indent-pos) |
||||
|
(goto-char arglist-content-start) |
||||
|
(skip-chars-forward " \t")) |
||||
|
(vector (current-column)))))) |
||||
|
|
||||
|
(defun is-groovy-mode () |
||||
|
"return t if we are in groovy mode else nil" |
||||
|
(eq major-mode 'groovy-mode)) |
||||
|
|
||||
|
;; use defadvice to override the syntactic type if we have a |
||||
|
;; statement-cont, see if previous line has a virtual semicolon and if |
||||
|
;; so make it statement. |
||||
|
(defadvice c-guess-basic-syntax (after c-guess-basic-syntax-groovy activate) |
||||
|
(when (is-groovy-mode) |
||||
|
(save-excursion |
||||
|
(let* ((ankpos (progn |
||||
|
(beginning-of-line) |
||||
|
(c-backward-syntactic-ws) |
||||
|
(beginning-of-line) |
||||
|
(c-forward-syntactic-ws) |
||||
|
(point))) ; position to previous non-blank line |
||||
|
(curelem (c-langelem-sym (car ad-return-value)))) |
||||
|
(end-of-line) |
||||
|
(cond |
||||
|
((eq 'statement-cont curelem) |
||||
|
(when (groovy-at-vsemi-p) ; if there is a virtual semi there then make it a statement |
||||
|
(setq ad-return-value `((statement ,ankpos))))) |
||||
|
|
||||
|
((eq 'topmost-intro-cont curelem) |
||||
|
(when (groovy-at-vsemi-p) ; if there is a virtual semi there then make it a top-most-intro |
||||
|
(setq ad-return-value `((topmost-intro ,ankpos))))) |
||||
|
|
||||
|
))))) |
||||
|
|
||||
|
;; This disables bracelists, as most of the time in groovy they are closures |
||||
|
;; We need to check we are currently in groovy mode |
||||
|
(defadvice c-inside-bracelist-p (around groovy-c-inside-bracelist-p activate) |
||||
|
(if (not (is-groovy-mode)) |
||||
|
ad-do-it |
||||
|
(setq ad-return-value nil))) |
||||
|
|
||||
|
|
||||
|
;; based on java-function-regexp |
||||
|
;; Complicated regexp to match method declarations in interfaces or classes |
||||
|
;; A nasty test case is: |
||||
|
;; else if(foo instanceof bar) { |
||||
|
;; which will get mistaken for a function as Groovy does not require types on arguments |
||||
|
;; so we need to check for empty parens or comma separated list, or type args |
||||
|
(defvar groovy-function-regexp |
||||
|
(concat |
||||
|
"^[ \t]*" ; leading white space |
||||
|
"\\(public\\|private\\|protected\\|" ; some of these 8 keywords |
||||
|
"abstract\\|final\\|static\\|" |
||||
|
"synchronized\\|native|def" |
||||
|
"\\|[ \t\n\r]\\)*" ; or whitespace |
||||
|
"[a-zA-Z0-9_$]*" ; optional return type |
||||
|
"[ \t\n\r]*[[]?[]]?" ; (could be array) |
||||
|
"[ \t\n\r]+" ; whitespace |
||||
|
"\\([a-zA-Z0-9_$]+\\)" ; the name we want |
||||
|
"[ \t\n\r]*" ; optional whitespace |
||||
|
"(" ; open the param list |
||||
|
"[ \t]*" ; optional whitespace |
||||
|
"\\(" |
||||
|
"[ \t\n\r]*\\|" ; empty parens or |
||||
|
"[a-zA-Z0-9_$]+\\|" ; single param or |
||||
|
".+?,.+?\\|" ; multi comma separated params or |
||||
|
"[a-zA-Z0-9_$]+" ; a type |
||||
|
"[ \t\n\r]*[[]?[]]?" ; optional array |
||||
|
"[ \t\n\r]+[a-zA-Z0-9_$]+" ; and param |
||||
|
"\\)" |
||||
|
"[ \t\n\r]*" ; optional whitespace |
||||
|
")" ; end the param list |
||||
|
"[ \t\n\r]*" ; whitespace |
||||
|
; "\\(throws\\([, \t\n\r]\\|[a-zA-Z0-9_$]\\)+\\)?{" |
||||
|
"\\(throws[^{;]+\\)?" ; optional exceptions |
||||
|
"[;{]" ; ending ';' (interfaces) or '{' |
||||
|
; TODO groovy interfaces don't need to end in ; |
||||
|
) |
||||
|
"Matches method names in groovy code, select match 2") |
||||
|
|
||||
|
(defvar groovy-class-regexp |
||||
|
"^[ \t\n\r]*\\(final\\|abstract\\|public\\|[ \t\n\r]\\)*class[ \t\n\r]+\\([a-zA-Z0-9_$]+\\)[^;{]*{" |
||||
|
"Matches class names in groovy code, select match 2") |
||||
|
|
||||
|
(defvar groovy-interface-regexp |
||||
|
"^[ \t\n\r]*\\(abstract\\|public\\|[ \t\n\r]\\)*interface[ \t\n\r]+\\([a-zA-Z0-9_$]+\\)[^;]*;" |
||||
|
"Matches interface names in groovy code, select match 2") |
||||
|
|
||||
|
(defvar groovy-imenu-regexp |
||||
|
(list (list nil groovy-function-regexp 2) |
||||
|
(list ".CLASSES." groovy-class-regexp 2) |
||||
|
(list ".INTERFACES." groovy-interface-regexp 2) |
||||
|
(list ".CLOSURES." "def[ \t]+\\([a-zA-Z_][a-zA-Z0-9_]*\\)[ \t]*=[ \t]*{" 1)) |
||||
|
"Imenu expression for Groovy") |
||||
|
|
||||
|
|
||||
|
;; Setup imenu to extract functions, classes, interfaces and closures assigned to variables |
||||
|
(defvar cc-imenu-groovy-generic-expression |
||||
|
groovy-imenu-regexp |
||||
|
"Imenu generic expression for Groovy mode. See `imenu-generic-expression'.") |
||||
|
|
||||
|
;;; The entry point into the mode |
||||
|
;;;###autoload |
||||
|
(defun groovy-mode () |
||||
|
"Major mode for editing Groovy code. |
||||
|
|
||||
|
The hook `c-mode-common-hook' is run with no args at mode |
||||
|
initialization, then `groovy-mode-hook'. |
||||
|
|
||||
|
Key bindings: |
||||
|
\\{groovy-mode-map}" |
||||
|
(interactive) |
||||
|
(kill-all-local-variables) |
||||
|
(c-initialize-cc-mode t) |
||||
|
(set-syntax-table groovy-mode-syntax-table) |
||||
|
(setq major-mode 'groovy-mode |
||||
|
mode-name "Groovy" |
||||
|
local-abbrev-table groovy-mode-abbrev-table |
||||
|
abbrev-mode t) |
||||
|
(use-local-map groovy-mode-map) |
||||
|
(c-init-language-vars groovy-mode) |
||||
|
(c-common-init 'groovy-mode) |
||||
|
;;(easy-menu-add groovy-menu) |
||||
|
(cc-imenu-init cc-imenu-groovy-generic-expression) |
||||
|
(c-run-mode-hooks 'c-mode-common-hook 'groovy-mode-hook) |
||||
|
|
||||
|
;; quick fix for misalignment of statements with = |
||||
|
(setq c-label-minimum-indentation 0) |
||||
|
|
||||
|
;; fix for indentation after a closure param list |
||||
|
(c-set-offset 'statement 'groovy-mode-fix-closure-with-argument) |
||||
|
|
||||
|
;; get arglists (in groovy lists or maps) to align properly |
||||
|
(c-set-offset 'arglist-close '(c-lineup-close-paren)) |
||||
|
(c-set-offset 'arglist-cont 0) |
||||
|
(c-set-offset 'arglist-cont-nonempty '(groovy-lineup-arglist)) |
||||
|
(c-set-offset 'arglist-intro '+) |
||||
|
|
||||
|
(c-update-modeline)) |
||||
|
|
||||
|
|
||||
|
(provide 'groovy-mode) |
||||
|
|
||||
|
;;; groovy-mode.el ends here |
||||
2146
vendor/mediawiki.el
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,110 @@ |
|||||
|
;;; melpa.el --- special handling for the MELPA repository |
||||
|
;; |
||||
|
;; Copyright 2012 Donald Ephraim Curtis |
||||
|
;; |
||||
|
;; Author: Donald Ephraim Curtis <dcurtis@milkbox.net> |
||||
|
;; URL: https://github.com/milkypostman/melpa |
||||
|
;; Version: 0.3 |
||||
|
;; |
||||
|
;; |
||||
|
;; Credits: |
||||
|
;; Steve Purcell |
||||
|
;; |
||||
|
;; |
||||
|
;; Installation: |
||||
|
;; |
||||
|
;; (progn |
||||
|
;; (switch-to-buffer |
||||
|
;; (url-retrieve-synchronously |
||||
|
;; "https://raw.github.com/milkypostman/melpa/master/melpa.el")) |
||||
|
;; (package-install-from-buffer (package-buffer-info) 'single)) |
||||
|
;; |
||||
|
;; |
||||
|
;; |
||||
|
;; Code goes here |
||||
|
;; |
||||
|
|
||||
|
|
||||
|
;;;###autoload |
||||
|
(defcustom package-archive-enable-alist nil |
||||
|
"Optional Alist of enabled packages used by `package-filter'. |
||||
|
The format is (ARCHIVE . PACKAGE ...), where ARCHIVE is a string |
||||
|
matching an archive name in `package-archives', PACKAGE is a |
||||
|
symbol of a package in ARCHIVE to enable. |
||||
|
|
||||
|
If no ARCHIVE exists in the alist, all packages are enabled." |
||||
|
:group 'package |
||||
|
:type '(alist :key-type string :value-type (repeat symbol))) |
||||
|
|
||||
|
|
||||
|
;;;###autoload |
||||
|
(defcustom package-archive-exclude-alist nil |
||||
|
"Alist of packages excluded by `package-filter'. |
||||
|
The format is (ARCHIVE . PACKAGE ...), where ARCHIVE is a string |
||||
|
matching an archive name in `package-archives', PACKAGE is a |
||||
|
symbol of a package in that archive to exclude. |
||||
|
|
||||
|
Any specified package is excluded regardless of the value of |
||||
|
`package-archive-enable-alist'" |
||||
|
:group 'package |
||||
|
:type '(alist :key-type string :value-type (repeat symbol))) |
||||
|
|
||||
|
|
||||
|
;;;###autoload |
||||
|
(defcustom package-filter-function 'package-filter |
||||
|
"Optional predicate function used to internally |
||||
|
filter packages used by package.el. |
||||
|
|
||||
|
Return nil to filter a function from the list. |
||||
|
|
||||
|
The function is called with the arguments PACKAGE VERSION ARCHIVE, where |
||||
|
PACKAGE is a symbol, VERSION is a vector as produced by `version-to-list', and |
||||
|
ARCHIVE is the string name of the package archive." |
||||
|
:group 'package |
||||
|
:type 'function) |
||||
|
|
||||
|
|
||||
|
;;;###autoload |
||||
|
(defadvice package-compute-transaction |
||||
|
(before |
||||
|
package-compute-transaction-reverse (package-list requirements) |
||||
|
activate compile) |
||||
|
"reverse the requirements" |
||||
|
(setq requirements (reverse requirements)) |
||||
|
(print requirements)) |
||||
|
|
||||
|
|
||||
|
;;;###autoload |
||||
|
(defadvice package--add-to-archive-contents |
||||
|
(around package-filter-add-to-archive-contents (package archive) |
||||
|
activate compile) |
||||
|
"Add filtering of available packages using `package-filter-function', |
||||
|
if non-nil." |
||||
|
(when (and package-filter-function |
||||
|
(funcall package-filter-function |
||||
|
(car package) |
||||
|
(package-desc-vers (cdr package)) |
||||
|
archive)) |
||||
|
ad-do-it)) |
||||
|
|
||||
|
|
||||
|
;;;###autoload |
||||
|
(defun package-filter (package version archive) |
||||
|
"Check package against enabled and excluded list for the `archive'. |
||||
|
|
||||
|
Filter packages not in the associated list for `archive' in |
||||
|
`package-archive-enable-alist'. |
||||
|
|
||||
|
Filter packages in the associated list for `archive' in |
||||
|
`package-archive-exclude-alist'." |
||||
|
(let ((enable-rules (cdr (assoc archive package-archive-enable-alist))) |
||||
|
(exclude-rules (cdr (assoc archive package-archive-exclude-alist)))) |
||||
|
(and (not (memq package exclude-rules)) |
||||
|
(or (not enable-rules) |
||||
|
(memq package enable-rules))))) |
||||
|
|
||||
|
|
||||
|
|
||||
|
(provide 'melpa) |
||||
|
|
||||
|
;;; melpa.el ends here |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue