]> git.eshelyaron.com Git - emacs.git/commitdiff
Improve treatment of Fortran's "class is"
authorGlenn Morris <rgm@gnu.org>
Mon, 28 Nov 2016 00:05:02 +0000 (16:05 -0800)
committerGlenn Morris <rgm@gnu.org>
Mon, 28 Nov 2016 00:05:02 +0000 (16:05 -0800)
* 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
test/automated/f90.el

index 58397530e4fa7aeebddbb963293fd1de4a4a7bf8..d9a347200461dc1c42a8ac31c47df62968c8cc10 100644 (file)
@@ -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\\)\\_>")
index fece86ca1d82a60ccfdc08839e1daf38609cad80..29c608847f1638123217ac9929d3f44624c2e8f3 100644 (file)
@@ -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