sphinx-contrib / matlabdomain

A Sphinx extension for documenting Matlab code
http://sphinxcontrib-matlabdomain.readthedocs.io/
Other
70 stars 45 forks source link

Problem when documenting multiple Matlab classes #40

Closed joeced closed 6 years ago

joeced commented 9 years ago

Originally reported by: Sandor Toth (Bitbucket: tothsa, GitHub: Unknown)


I tried to document a larger Matlab project using Sphinx and the sphinxcontrib-matlabdomain package. It works fine for a single folder that stores all .m files. However my project contains multiple classes stored in separate folders such as:

   project
    |-- matfiles
    |    |-- @class1
    |    |    |-- class1.m
    |    |    |-- method1.m
    |    |    |-- method2.m
    |    |    +-- method1.m
    |    |-- @class2
    |    |    |-- class2.m
    |    |    |-- methodA.m
    |    |    |-- methodB.m
    |    |    +-- methodC.m
    |    +-- function
    |         |-- fun1.m
    |         |-- fun2.m
    |         +-- fun3.m
    +-- doc
         |-- conf.py
         +-- index.rst

I adde the following lines to conf.py:

matlab_src_dir = os.path.abspath('..')
extensions = [
    'sphinx.ext.autodoc',
    'sphinxcontrib.matlab',
]
primary_domain = 'mat'

And I added the following lines to index.rst:

.. module:: matfiles

.. automethod:: class1.method1

I got the following error:

Exception occurred:
  File "/Library/Python/2.7/site-packages/sphinxcontrib/mat_documenters.py", line 788, in import_object
    if self.object.attrs.get('Static'):
AttributeError: 'NoneType' object has no attribute 'attrs'
The full traceback has been saved in /var/folders/70/g0lr37wn60gbbymnsks_t5vm0000gn/T/sphinx-err-uD8qpe.log, if you want to report the issue to the developers.
Please also report this if it was a user error, so that a better error message can be provided next time.
A bug report can be filed in the tracker at <https://github.com/sphinx-doc/sphinx/issues>. Thanks!
| reading sources... [100%] index

So my question is, is there a way to document multi class Matlab projects where class methods are saved in a folder with name @class?


joeced commented 6 years ago

Original comment by Mark Mikofski (Bitbucket: bwanamarko, GitHub: Unknown):


fixes #23 and fixes #35

joeced commented 9 years ago

Original comment by Mark Mikofski (Bitbucket: bwanamarko, GitHub: Unknown):


fixes #23 and fixes #35

joeced commented 9 years ago

Original comment by Sandor Toth (Bitbucket: tothsa, GitHub: Unknown):


Thank you for the help! I realised that when a class is in a @classname folder, it has to added as a module and all class methods in the @classname folder become functions. Is there a way to document the methods of @classname class as methods?

joeced commented 9 years ago

Original comment by Mark Mikofski (Bitbucket: bwanamarko, GitHub: Unknown):


according to matlab docs on methods in separate folders you only need to use a method signature if it is a non-default method:

If you want to use nondefault method attributes for a method implemented in a separate file, you must add the function signature to a methods block with the attribute specification.

IE: like a static method or has any method attributes. Then it won't work with autodoc extension until we tell it to skip those signatures.

joeced commented 9 years ago

Original comment by Mark Mikofski (Bitbucket: bwanamarko, GitHub: Unknown):


You should be able to document class @ folders, see this example from the test data however if you look at the comments in #21 you'll see that the method protocols in the class m-file don't match any protocol that Pygments (the syntax lexer that parses matlab files) recognizes, so someone need to add a regex to the MatObject.parse_mfile method on line 157 of mat_types that ignores function protocols in classdef mfiles when the actual method is in a separate file.