diff --git a/tagmanager/ctags/fortran.c b/tagmanager/ctags/fortran.c index e95cb7b3e..a95168e46 100644 --- a/tagmanager/ctags/fortran.c +++ b/tagmanager/ctags/fortran.c @@ -100,6 +100,8 @@ typedef enum eKeywordId { KEYWORD_intent, KEYWORD_interface, KEYWORD_intrinsic, + KEYWORD_kind, + KEYWORD_len, KEYWORD_logical, KEYWORD_map, KEYWORD_module, @@ -280,6 +282,8 @@ static const keywordDesc FortranKeywordTable [] = { { "intent", KEYWORD_intent }, { "interface", KEYWORD_interface }, { "intrinsic", KEYWORD_intrinsic }, + { "kind", KEYWORD_kind }, + { "len", KEYWORD_len }, { "logical", KEYWORD_logical }, { "map", KEYWORD_map }, { "module", KEYWORD_module }, @@ -1331,6 +1335,8 @@ static void parseQualifierSpecList (tokenInfo *const token) case KEYWORD_allocatable: case KEYWORD_external: case KEYWORD_intrinsic: + case KEYWORD_kind: + case KEYWORD_len: case KEYWORD_optional: case KEYWORD_private: case KEYWORD_pointer: diff --git a/tests/ctags/Makefile.am b/tests/ctags/Makefile.am index 08ca1733b..9aba73cbc 100644 --- a/tests/ctags/Makefile.am +++ b/tests/ctags/Makefile.am @@ -179,6 +179,7 @@ test_sources = \ matlab_backtracking.m \ matlab_test.m \ maze.erl \ + members.f90 \ misc_types.f90 \ misc_types.f \ mode.php \ @@ -202,6 +203,7 @@ test_sources = \ prototype.h \ pure_elem.f95 \ py_constructor_arglist.py \ + qualified_types.f90 \ random.sql \ readlob.sql \ readlong.sql \ diff --git a/tests/ctags/members.f90 b/tests/ctags/members.f90 new file mode 100644 index 000000000..d33d50b5a --- /dev/null +++ b/tests/ctags/members.f90 @@ -0,0 +1,19 @@ +module Members + implicit none + + type HasMembers + ! a "derived type" in Fortran is analagous to a "class" in other languages + integer, kind :: kind_member + integer, len :: len_member + integer :: member + contains + procedure :: MyMethod + end type HasMembers + +contains + + subroutine MySubroutine(arg) + ! ... + end subroutine MySubroutine + +end module Members diff --git a/tests/ctags/members.f90.tags b/tests/ctags/members.f90.tags new file mode 100644 index 000000000..28d718905 --- /dev/null +++ b/tests/ctags/members.f90.tags @@ -0,0 +1,8 @@ +# format=tagmanager +HasMembersÌ1ÎMembersÖ0 +MembersÌ256Ö0 +MyMethodÌ64ÎHasMembersÖ0 +MySubroutineÌ128ÎMembersÖ0 +kind_memberÌ64ÎHasMembersÖ0 +len_memberÌ64ÎHasMembersÖ0 +memberÌ64ÎHasMembersÖ0 diff --git a/tests/ctags/qualified_types.f90 b/tests/ctags/qualified_types.f90 new file mode 100644 index 000000000..2ebe8a274 --- /dev/null +++ b/tests/ctags/qualified_types.f90 @@ -0,0 +1,12 @@ +module test + implicit none + type goodtype(p1, p2, p3, p4) ! the stuff in brackets after the name of the type shouldn't appear in the type's name + ! this is already correctly handled, so that's fine + integer, kind :: p1, p3 + integer, len :: p2, p4 ! the question is whether or not these "kind" and "len"s should be shown as members + real(kind=p1) :: c1 + character(len=p2) :: c2 + complex :: c3(p3) + integer :: c4 = p1 +contains +end module test diff --git a/tests/ctags/qualified_types.f90.tags b/tests/ctags/qualified_types.f90.tags new file mode 100644 index 000000000..33df1db0f --- /dev/null +++ b/tests/ctags/qualified_types.f90.tags @@ -0,0 +1,11 @@ +# format=tagmanager +c1Ì64ÎgoodtypeÖ0 +c2Ì64ÎgoodtypeÖ0 +c3Ì64ÎgoodtypeÖ0 +c4Ì64ÎgoodtypeÖ0 +goodtypeÌ1ÎtestÖ0 +p1Ì64ÎgoodtypeÖ0 +p2Ì64ÎgoodtypeÖ0 +p3Ì64ÎgoodtypeÖ0 +p4Ì64ÎgoodtypeÖ0 +testÌ256Ö0