mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-12-23 10:34:07 +00:00
Improve treatment of Fortran's "class default"
* lisp/progmodes/f90.el (f90-start-block-re, f90-no-block-limit): Handle "class default". (Bug#28786) * test/automated/f90.el (f90-test-bug25039): Add "class default".
This commit is contained in:
parent
234b1e3864
commit
ddd547fada
@ -909,6 +909,8 @@ Can be overridden by the value of `font-lock-maximum-decoration'.")
|
||||
[ \t]*\\(\\(?:\\sw\\|\\s_\\)+\\)"
|
||||
"Regexp matching the definition of a derived type.")
|
||||
|
||||
;; Maybe this should include "class default", but the constant is no
|
||||
;; longer used.
|
||||
(defconst f90-typeis-re
|
||||
"\\_<\\(class\\|type\\)[ \t]*is[ \t]*("
|
||||
"Regexp matching a CLASS/TYPE IS statement.")
|
||||
@ -955,10 +957,14 @@ 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 (?).
|
||||
;; And a partial effort to avoid "class default".
|
||||
"\\(?:type\\|class\\)[ \t,]\\("
|
||||
"[^i(!\n\"& \t]\\|" ; not-i(
|
||||
"[^id(!\n\"& \t]\\|" ; not-id(
|
||||
"i[^s!\n\"& \t]\\|" ; i not-s
|
||||
"is\\(?:\\sw\\|\\s_\\)\\)\\|"
|
||||
"d[^e!\n\"& \t]\\|" ; d not-e
|
||||
"de[^f!\n\"& \t]\\|" ; de not-f
|
||||
"def[^a!\n\"& \t]\\|" ; def not-a
|
||||
"\\(?:is\\|default\\)\\(?:\\sw\\|\\s_\\)\\)\\|"
|
||||
;; "abstract interface" is F2003; "submodule" is F2008.
|
||||
"program\\|\\(?:abstract[ \t]*\\)?interface\\|\\(?:sub\\)?module\\|"
|
||||
;; "enum", but not "enumerator".
|
||||
@ -1454,7 +1460,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\\|\
|
||||
\\(?:class\\|type\\)[ \t]*is\\|class[ \t]*default\\|\
|
||||
block\\|critical\\|enum\\|associate\\)\\_>")
|
||||
(looking-at "\\(program\\|\\(?:sub\\)?module\\|\
|
||||
\\(?:abstract[ \t]*\\)?interface\\|block[ \t]*data\\)\\_>")
|
||||
|
@ -256,21 +256,25 @@ end program prog")
|
||||
(should (= 5 (current-indentation)))))
|
||||
|
||||
(ert-deftest f90-test-bug25039 ()
|
||||
"Test for https://debbugs.gnu.org/25039 ."
|
||||
"Test for https://debbugs.gnu.org/25039 and 28786."
|
||||
(with-temp-buffer
|
||||
(f90-mode)
|
||||
(insert "program prog
|
||||
select type (a)
|
||||
class is (c1)
|
||||
x = 1
|
||||
type is (t1)
|
||||
x = 2
|
||||
class is (c1)
|
||||
x = 1
|
||||
class default
|
||||
x=3
|
||||
end select
|
||||
end program prog")
|
||||
(f90-indent-subprogram)
|
||||
(forward-line -3)
|
||||
(should (= 2 (current-indentation))) ; type is
|
||||
(should (= 2 (current-indentation))) ; class default
|
||||
(forward-line -2)
|
||||
(should (= 2 (current-indentation))))) ; class is
|
||||
(should (= 2 (current-indentation))) ; class is
|
||||
(forward-line -2)
|
||||
(should (= 2 (current-indentation))))) ; type is
|
||||
|
||||
;;; f90-tests.el ends here
|
||||
|
Loading…
Reference in New Issue
Block a user