diff options
author | Dan Gudmundsson <[email protected]> | 2009-12-18 13:03:24 +0100 |
---|---|---|
committer | Dan Gudmundsson <[email protected]> | 2009-12-18 13:03:24 +0100 |
commit | 90312bd9c8fbbcc2974b0f0bccd772298bd5d37c (patch) | |
tree | 87e20d18917a8070fbe6c40a899183f081cc970c /lib/tools/emacs/erlang.el | |
parent | 55e80d74897ec16b80632fd7acdabdca764aea57 (diff) | |
download | otp-90312bd9c8fbbcc2974b0f0bccd772298bd5d37c.tar.gz otp-90312bd9c8fbbcc2974b0f0bccd772298bd5d37c.tar.bz2 otp-90312bd9c8fbbcc2974b0f0bccd772298bd5d37c.zip |
Emacs: Added indentation inside parenthesis
Used in records or tuple creation:
-record(record3, {a = 8#42423 bor
8#4234,
b = 8#5432
bor 2#1010101
c = 123 +
234,
d}).
and in functions calls
call(2#42423 bor
#4234,
2#5432,
other_arg),
Diffstat (limited to 'lib/tools/emacs/erlang.el')
-rw-r--r-- | lib/tools/emacs/erlang.el | 81 |
1 files changed, 44 insertions, 37 deletions
diff --git a/lib/tools/emacs/erlang.el b/lib/tools/emacs/erlang.el index 4b8911b758..4fc4826238 100644 --- a/lib/tools/emacs/erlang.el +++ b/lib/tools/emacs/erlang.el @@ -3955,15 +3955,16 @@ Return nil if inside string, t if in a comment." (nth 2 stack-top)))) (t (goto-char (nth 1 stack-top)) - (cond ((looking-at "[({]\\s *\\($\\|%\\)") - ;; Line ends with parenthesis. - (erlang-indent-parenthesis (nth 2 stack-top))) - (t - ;; Indent to the same column as the first - ;; argument. - (goto-char (1+ (nth 1 stack-top))) - (skip-chars-forward " \t") - (current-column)))))) + (let ((base (cond ((looking-at "[({]\\s *\\($\\|%\\)") + ;; Line ends with parenthesis. + (erlang-indent-parenthesis (nth 2 stack-top))) + (t + ;; Indent to the same column as the first + ;; argument. + (goto-char (1+ (nth 1 stack-top))) + (skip-chars-forward " \t") + (current-column))))) + (erlang-indent-standard indent-point token base 't))))) ;; ((eq (car stack-top) '<<) ;; Element of binary (possible comprehension) expression, @@ -4047,33 +4048,8 @@ Return nil if inside string, t if in a comment." 0)) base)) ;; old catch (t - ;; Look at last thing to see how we are to move relative - ;; to the base. - (goto-char token) - (cond ((looking-at "||\\|,\\|->") - base) - ((erlang-at-keyword) - (+ (current-column) erlang-indent-level)) - ((or (= (char-syntax (following-char)) ?.) - (erlang-at-operator)) - (+ base erlang-indent-level)) - (t - (goto-char indent-point) - (cond ((memq (following-char) '(?\( ?{)) - ;; Function application or record. - (+ (erlang-indent-find-preceding-expr) - erlang-argument-indent)) - ;; Empty line, or end; treat it as the end of - ;; the block. (Here we have a choice: should - ;; the user be forced to reindent continued - ;; lines, or should the "end" be reindented?) - - ;; Avoid treating comments a continued line. - ((= (following-char) ?%) - base) - ;; Continued line (e.g. line beginning - ;; with an operator.) - (t (+ base erlang-indent-level))))))))) + (erlang-indent-standard indent-point token base 'nil) + )))) )) ((eq (car stack-top) 'when) (goto-char (nth 1 stack-top)) @@ -4120,9 +4096,40 @@ Return nil if inside string, t if in a comment." ;; argument. (goto-char (+ 2 (nth 1 stack-top))) (skip-chars-forward " \t") - (current-column))) start-alternativ))))) + (current-column))) start-alternativ))))) ))) +(defun erlang-indent-standard (indent-point token base inside-parenthesis) + "Standard indent when in blocks or tuple or arguments. + Look at last thing to see in what state we are, move relative to the base." + (goto-char token) + (cond ((looking-at "||\\|,\\|->\\||") + base) + ((erlang-at-keyword) + (+ (current-column) erlang-indent-level)) + ((or (= (char-syntax (following-char)) ?.) + (erlang-at-operator)) + (+ base erlang-indent-level)) + (t + (goto-char indent-point) + (cond ((memq (following-char) '(?\( ?{)) + ;; Function application or record. + (+ (erlang-indent-find-preceding-expr) + erlang-argument-indent)) + ;; Empty line, or end; treat it as the end of + ;; the block. (Here we have a choice: should + ;; the user be forced to reindent continued + ;; lines, or should the "end" be reindented?) + + ;; Avoid treating comments a continued line. + ((= (following-char) ?%) + base) + ;; Continued line (e.g. line beginning + ;; with an operator.) + (t + (if (or (erlang-at-operator) (not inside-parenthesis)) + (+ base erlang-indent-level) + base)))))) (defun erlang-indent-find-base (stack indent-point &optional offset skip) "Find the base column for current stack." |