Matthew,

Thank you for the example.
I see indeed a feature tthat is not supported yet in doxygen:
generic,   public :: wibble => wibble_integer, wibble_real

It will take a it of time before I can have a good look at this problem.


Albert


On Thu, Sep 22, 2016 at 3:45 PM, Hambley, Matthew <
matthew.hamb...@metoffice.gov.uk> wrote:

> From: Albert [mailto:albert.te...@gmail.com]
> >
> > Can you create a small  example to show the short comings?
>
> Of course. What follows is a Fortran module which should illustrate what I
> am trying to describe. (Object Fortran is, sadly, never short)
>
> Having carefully laid it out I suddenly had a nasty realisation that
> Outlook is probably about to mangle it horrible so I've attached a copy as
> well. Skip past the source code for commentary.
>
> module test_mod
>
>   use iso_fortran_env, only : output_unit
>
>   implicit none
>
>   private
>
>   !> @brief Type which does a thing
>   !> @details Documented where we would expect.
>   !>
>   type, public :: test_type
>
>     private
>
>     integer, allocatable :: foo(:)
>
>   contains
>
>     private
>     !> @brief Document in the type declaration
>     !> @details Not so good as there are no arguments here. If they are
>     !>          documented here they show up in documentation but Doxygen
>     !>          complains about them being documented but not existing. Of
>     !>          course they do, but further down.
>     !>
>     !>          Regardless the documentation is separate from the
>     !>          implementation.
>     !> @param teapot Some argument.
>     !>
>     procedure, public :: wobble
>     procedure, public :: wubble
>     generic,   public :: wibble => wibble_integer, wibble_real
>
>     !> @brief One aspect of wibble
>     !> @details I can document this here but it appears as a method of
>     !>          the type whereas really it should appear under
>     !>          "wibble". After all, it is private and not part of the
>     !>          API.
>     !>
>     procedure wibble_integer
>     procedure wibble_real
>
>     final :: destroy_test
>
>   end type test_type
>
>   interface test_type
>     procedure create_test_default
>     !> @brief Specific initialiser
>     !> @details Will this how up? No it will not.
>     procedure create_test_specific
>   end interface test_type
>
> contains
>
>   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
>   !> @brief Default initialiser
>   !>
>   !> @details It would be nice to document this here but it wont show up.
>   !>
>   function create_test_default() result(new_test)
>
>     implicit none
>
>     type(test_type) :: new_test
>
>     allocate( new_test%foo(10) )
>   end function create_test_default
>
> !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
> function create_test_specific( tally ) result(new_test)
>
>     implicit none
>
>     integer, intent(in) :: tally
>
>     type(test_type) :: new_test
>
>     allocate( new_test%foo(tally) )
>
>   end function create_test_specific
>
>   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
> !!!!!!!!!!!!!
>   !> @brief Destructor.
>   !> @details Would prefer to document this here.
>   !>
>   subroutine destroy_test( this )
>
>     implicit none
>     type(test_type), intent(inout) :: this
>
>     deallocate( this%foo )
>
>   end subroutine destroy_test
>
>   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
> !!!!!!!!!!!!!
>   !> @brief A more sensible place to document.
>   !> @details But it does not appear.
>   !> @param teapot Some other argument.
>   !>
>   subroutine wobble( this, teapot )
>
>     implicit none
>
>     class(test_type), intent(in) :: this
>     integer,          intent(in) :: teapot
>
>     write( output_unit, '("wobble ", I0)' ) teapot
>
>   end subroutine wobble
>
>   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
> !!!!!!!!!!!!!
>   subroutine wubble( this, cheese )
>
>     implicit none
>
>     class(test_type), intent(in) :: this
>     integer,          intent(in) :: cheese
>
>     write( output_unit, '("wubble ", I0)' ) cheese
>
>   end subroutine wubble
>
>   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
> !!!!!!!!!!!!!
>   subroutine wibble_integer( this, value )
>
>     implicit none
>
>     class(test_type), intent(inout) :: this
>     integer,         intent(in) :: value
>
>     write( output_unit, '("wibble ", I0)' ) value
>
>   end subroutine wibble_integer
>
>   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
> !!!!!!!!!!!!!
>   !> @brief Again I would like to document this here.
>   !> @details But again it will not show up.
>   !> @param value A floating point argument.
>   !>
>   subroutine wibble_real( this, value )
>
>     implicit none
>
>     class(test_type), intent(inout) :: this
>     real,            intent(in) :: value
>
>     write( output_unit, '("wibble ", F14.4)' ) value
>
>   end subroutine wibble_real
>
> end module test_mod
>
> Running this through Doxygen I get the following messages:
>
> test_mod.f90:29: warning: Member wubble (function) of class
> test_mod::test_type is not documented.
>
> Of course it is, but at the definition rather than the declaration.
>
> test_mod.f90:30: warning: Member wibble=> wibble_integer, wibble_real
> (function) of class test_mod::test_type is not documented.
>
> This is sort of true except wibble is documented by wibble_integer and
> wibble_real.
>
> test_mod.f90:38: warning: Member wibble_real (function) of class
> test_mod::test_type is not documented.
>
> It is, but further down.
>
> test_mod.f90:40: warning: Member destroy_test (function) of class
> test_mod::test_type is not documented.
>
> Again, it is, but further down.
>
> test_mod.f90:13: warning: Member foo (variable) of class
> test_mod::test_type is not documented.
>
> True but irrelevant to the current issue.
>
> test_mod.f90:22: warning: argument 'teapot' of command @param is not found
> in the argument list of test_mod::test_type::wobble()
>
> It does, but at definition, not declaration.
>
> I realise that this is all pretty esoteric stuff and that there isn't a
> lot of object Fortran around but if you can suggest a solution I would be
> very grateful.
>
------------------------------------------------------------------------------
_______________________________________________
Doxygen-users mailing list
Doxygen-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/doxygen-users

Reply via email to