The simple solution: Use ctags -e instead of etags (assuming "Exuberant Ctags")
While man ctags explicitly says that etags is preferred for use with emacs, ctags seems to have much better fortran support. I now use:
ctags -e --recurse
# : :
# : `- Recursive processing of subdirectories.
# : Apparently also filters by ...
Note: This is a very complicated solution. See How to use xref-find-references on Elisp files without "No references found for" errors for when I came to my senses and simplified things.
Problems and fixes
I found multiple things that I did that tripped me up:
I had an ~/ID file that is generated using ID Utils. xref, or
something beneath it, ...
xref provides UI for code navigation. The actual functionalities are provided by the backend. In you case, the backend is etags.
If you open TAGS file, its format is very simple. It has only the information of tag definition. So you can not find reference of tag.
So you got two solutions,
Install lsp-mode and some language server, hope they ...
ctags supports regular expression which could be used to parse tags.
Add below code into ~/.ctags,
--regex-fortran=/^[ \t]*MODULE[ \t]+(PROCEDURE|SUBROUTINE)[ \t]+([a-zA-Z0-9_]+)/\2/s,subroutines/
hello.f is like,
MODULE PROCEDURE MySubroutineName1 ! or
MODULE SUBROUTINE MySubRoutineName2
Then run ctags -e hello.f to test.