From b861aa9e54e2af362d702ae4bf8741ea4617dc3c Mon Sep 17 00:00:00 2001 From: Jonas Westlund Date: Thu, 15 Feb 2018 18:19:37 +0100 Subject: Fixed indent when ? operator is used in chained method calls --- rust-mode-tests.el | 24 ++++++++++++++++++++++++ rust-mode.el | 4 ++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/rust-mode-tests.el b/rust-mode-tests.el index fd29d5d..3e6c67a 100644 --- a/rust-mode-tests.el +++ b/rust-mode-tests.el @@ -1668,6 +1668,18 @@ fn main() { " ))) +(ert-deftest indent-method-chains-no-align-with-question-mark-operator () + (let ((rust-indent-method-chain nil)) (test-indent + " +fn main() { + let x = thing.do_it() + .aligned() + .more_alignment()? + .more_alignment(); +} +" + ))) + (ert-deftest indent-method-chains-with-align () (let ((rust-indent-method-chain t)) (test-indent " @@ -1679,6 +1691,18 @@ fn main() { " ))) +(ert-deftest indent-method-chains-with-align-with-question-mark-operator () + (let ((rust-indent-method-chain t)) (test-indent + " +fn main() { + let x = thing.do_it() + .aligned() + .more_alignment()? + .more_alignment(); +} +" + ))) + (ert-deftest indent-method-chains-with-align-and-second-stmt () (let ((rust-indent-method-chain t)) (test-indent " diff --git a/rust-mode.el b/rust-mode.el index 0c31b6c..908b892 100644 --- a/rust-mode.el +++ b/rust-mode.el @@ -320,7 +320,7 @@ buffer." (- (current-column) rust-indent-offset))))) (cond ;; foo.bar(...) - ((rust-looking-back-str ")") + ((looking-back "[)?]" (1- (point))) (backward-list 1) (funcall skip-dot-identifier)) @@ -501,7 +501,7 @@ buffer." ;; ..or if the previous line ends with any of these: ;; { ? : ( , ; [ } ;; then we are at the beginning of an expression, so stay on the baseline... - (looking-back "[(,:;?[{}]\\|[^|]|" (- (point) 2)) + (looking-back "[(,:;[{}]\\|[^|]|" (- (point) 2)) ;; or if the previous line is the end of an attribute, stay at the baseline... (progn (rust-rewind-to-beginning-of-current-level-expr) (looking-at "#"))))) baseline -- cgit v1.2.3