From e46a13446a0dc68e5bc10636d9c40ce5b331efb9 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sun, 27 Nov 2016 16:05:02 -0800 Subject: [PATCH] Improve treatment of Fortran's "class is" * lisp/progmodes/f90.el (f90-start-block-re, f90-no-block-limit): Handle "class is". (Bug#25039) * test/automated/f90.el (f90-test-bug25039): New test. --- lisp/progmodes/f90.el | 7 +++++-- test/automated/f90.el | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/lisp/progmodes/f90.el b/lisp/progmodes/f90.el index 58397530e4f..d9a34720046 100644 --- a/lisp/progmodes/f90.el +++ b/lisp/progmodes/f90.el @@ -895,8 +895,10 @@ Can be overridden by the value of `font-lock-maximum-decoration'.") ;; This is for a TYPE block, not a variable of derived TYPE. ;; Hence no need to add CLASS for F2003. +;; Note that this also matches "type is", so you might need to use +;; f90-typeis-re as well. (defconst f90-type-def-re - ;; type word + ;; type word (includes "type is") ;; type :: word ;; type, attr-list :: word ;; where attr-list = attr [, attr ...] @@ -953,7 +955,7 @@ Used in the F90 entry in `hs-special-modes-alist'.") ;; Avoid F2003 "type is" in "select type", ;; and also variables of derived type "type (foo)". ;; "type, foo" must be a block (?). - "type[ \t,]\\(" + "\\(?:type\\|class\\)[ \t,]\\(" "[^i(!\n\"& \t]\\|" ; not-i( "i[^s!\n\"& \t]\\|" ; i not-s "is\\(?:\\sw\\|\\s_\\)\\)\\|" @@ -1452,6 +1454,7 @@ if all else fails." (not (or (looking-at "end") (looking-at "\\(do\\|if\\|else\\(if\\|where\\)?\ \\|select[ \t]*\\(case\\|type\\)\\|case\\|where\\|forall\\|\ +\\(?:class\\|type\\)[ \t]*is\\|\ block\\|critical\\|enum\\|associate\\)\\_>") (looking-at "\\(program\\|\\(?:sub\\)?module\\|\ \\(?:abstract[ \t]*\\)?interface\\|block[ \t]*data\\)\\_>") diff --git a/test/automated/f90.el b/test/automated/f90.el index fece86ca1d8..29c608847f1 100644 --- a/test/automated/f90.el +++ b/test/automated/f90.el @@ -255,4 +255,22 @@ end program prog") (forward-line -2) (should (= 5 (current-indentation))))) +(ert-deftest f90-test-bug25039 () + "Test for http://debbugs.gnu.org/25039 ." + (with-temp-buffer + (f90-mode) + (insert "program prog +select type (a) +class is (c1) +x = 1 +type is (t1) +x = 2 +end select +end program prog") + (f90-indent-subprogram) + (forward-line -3) + (should (= 2 (current-indentation))) ; type is + (forward-line -2) + (should (= 2 (current-indentation))))) ; class is + ;;; f90.el ends here -- 2.39.2