diff --git a/elixir-smie.el b/elixir-smie.el index 661d9fa9..e03937e9 100644 --- a/elixir-smie.el +++ b/elixir-smie.el @@ -277,10 +277,15 @@ ((looking-at elixir-smie--operator-regexp) (goto-char (match-end 0)) "OP") - (t - (let ((token (smie-default-forward-token))) - (unless (elixir-smie-empty-string-p token) - token))))) + (t (let ((token (smie-default-forward-token))) + (unless (or (elixir-smie-empty-string-p token) + (elixir-smie--at-dot-call)) + token))))) + +(defun elixir-smie--at-dot-call () + (and (eq ?w (char-syntax (following-char))) + (eq (char-before) ?.) + (not (eq (char-before (1- (point))) ?.)))) (defun elixir-smie-backward-token () (let ((pos (point))) @@ -303,7 +308,10 @@ ((looking-back elixir-smie--operator-regexp (- (point) 3) t) (goto-char (match-beginning 0)) "OP") - (t (smie-default-backward-token))))) + (t (let ((token (smie-default-backward-token))) + (unless (or (elixir-smie-empty-string-p token) + (elixir-smie--at-dot-call)) + token)))))) (defun verbose-elixir-smie-rules (kind token) (let ((value (elixir-smie-rules kind token))) @@ -574,7 +582,7 @@ ;; ... ((and (not (smie-rule-hanging-p)) (smie-rule-parent-p "do")) - elixir-smie-indent-basic) + elixir-smie-indent-basic) ((and (not (smie-rule-hanging-p)) (smie-rule-parent-p "MATCH-STATEMENT-DELIMITER")) (smie-rule-parent)) @@ -707,7 +715,7 @@ (let ((pos (point))) (parse-partial-sexp 1 pos))))) (and (looking-at "\"\"\"") - (match-beginning 0))))) + (match-beginning 0))))) (defun elixir-smie--previous-line-empty-p () "Return non-nil if the previous line is blank." diff --git a/test/elixir-mode-indentation-test.el b/test/elixir-mode-indentation-test.el index c9b5e947..0ab3fad5 100644 --- a/test/elixir-mode-indentation-test.el +++ b/test/elixir-mode-indentation-test.el @@ -377,8 +377,7 @@ else: :bar" ) (elixir-def-indentation-test indent-if-when-condition-is-a-named-function-on-a-module - (:expected-result :failed :tags '(indentation)) - ;; https://github.com/elixir-lang/emacs-elixir/issues/323 + (:tags '(indentation)) "defmodule Whois do def lookup2(domain) do if Server.for(domain) do @@ -1575,8 +1574,7 @@ end" end") (elixir-def-indentation-test indent-case-when-condition-is-a-named-function-on-a-module - (:expected-result :failed :tags '(indentation)) - ;; https://github.com/elixir-lang/emacs-elixir/issues/323 + (:tags '(indentation)) "defmodule Whois do def lookup1(domain) do case Server.for(domain) do