Documenter.jl: debugging for @autodocs

Created on 20 May 2018  路  10Comments  路  Source: JuliaDocs/Documenter.jl

julia --color=yes make.jl fails with an error:

ERROR: LoadError: UndefVarError: cdf not defined

My module does include parameters and local variables here and there named cdf.

The stack trace includes no information on which line or file or directory or function, etc. is causing the error. So, it is not possible to debug this, at least directly. I searched the Documenter docs for "debug", but could not find anything. I did find a debug=false option for makedocs in a repo, so I tried debug=true. This did not change anything.

Julia v0.6.2

Bug

Most helpful comment

Ok, repro here:
TestPackage.jl

module TestPackage
struct Foo end
"""
Callable Foo.
"""
(foo::Foo)() = println("Hello")
end

with index.md
@autodocs Modules = [TestPackage, ]

All 10 comments

Is it a public package? If so, do you have a link to the repo?

Yes. I just discovered the problem. Here is the offending line.

It is a doc string for a callable object. I read another issue about Documenter (or tool it uses) failing with some Julia syntax, which made me think of removing that doc string. But, I don't understand why nothing useful appeared in the stack trace. Unless I'm mistaken, this is not the case in general.

Btw. Here is the error:

ERROR: LoadError: UndefVarError: cdf not defined
Stacktrace:
 [1] category(::Base.Docs.Binding) at /home/lapeyre/.julia/v0.6/Documenter/src/DocSystem.jl:262
 [2] runner(::Type{Documenter.Expanders.AutoDocsBlocks}, ::Base.Markdown.Code, ::Documenter.Documents.Page, ::Documenter.Documents.Document) at /home/lapeyre/.julia/v0.6/Documenter/src/Expanders.jl:356
 [3] dispatch(::Type{Documenter.Expanders.ExpanderPipeline}, ::Base.Markdown.Code, ::Vararg{Any,N} where N) at /home/lapeyre/.julia/v0.6/Documenter/src/Selectors.jl:168
 [4] expand(::Documenter.Documents.Document) at /home/lapeyre/.julia/v0.6/Documenter/src/Expanders.jl:31
 [5] runner(::Type{Documenter.Builder.ExpandTemplates}, ::Documenter.Documents.Document) at /home/lapeyre/.julia/v0.6/Documenter/src/Builder.jl:178
 [6] dispatch(::Type{Documenter.Builder.DocumentPipeline}, ::Documenter.Documents.Document, ::Vararg{Documenter.Documents.Document,N} where N) at /home/lapeyre/.julia/v0.6/Documenter/src/Selectors.jl:168
 [7] cd(::Documenter.##2#3{Documenter.Documents.Document}, ::String) at ./file.jl:70
 [8] #makedocs#1(::Bool, ::Array{Any,1}, ::Function) at /home/lapeyre/.julia/v0.6/Documenter/src/Documenter.jl:204
 [9] (::Documenter.#kw##makedocs)(::Array{Any,1}, ::Documenter.#makedocs) at ./<missing>:0
 [10] include_from_node1(::String) at ./loading.jl:576
 [11] include(::String) at ./sysimg.jl:14
 [12] process_options(::Base.JLOptions) at ./client.jl:305
 [13] _start() at ./client.jl:371
while loading /home/lapeyre/.julia/v0.6/EmpiricalCDFs/docs/make.jl, in expression starting on line 3

... I have no idea where Julia sticks that doc string. Arguably, that documentation should be part of a different doc string, maybe for the type itself.

EDIT: I see a note to myself
# This documentation is inaccesible ?. So I think the particular error is mine.

I don't see any @autodocs blocks in the repo.

There is also no cdf function, so I wonder why @autodocs would try to include that?

Sorry, I did not see the email ping. I never pushed the version with @autodocs. There is no cdf function, but I define a method to make EmpiricalCDF a callable type.

The error occured when I did this:

"""
    (cdf::EmpiricalCDF)(x::Real) = _val_at_index(cdf, getcdfindex(cdf, x))
blahblah
"""
(cdf::EmpiricalCDF)(x::Real) = _val_at_index(cdf, getcdfindex(cdf, x))

Ok, repro here:
TestPackage.jl

module TestPackage
struct Foo end
"""
Callable Foo.
"""
(foo::Foo)() = println("Hello")
end

with index.md
@autodocs Modules = [TestPackage, ]

I believe the callable object syntax is not properly supported, since most of the logic was written in the 0.4 era (where this stuff was done with Base.call?).

I guess I'm also experiencing this error.

It seems that

(p::EpsilonGreedySelector)(values::AbstractArray{T, 1}) where T = println("!")

will throw error. But the following one won't:

(p::EpsilonGreedySelector)(values::AbstractArray{<:Number, 1}) =  println("!")

Hope it is helpful to debug.

Based in the repro by @fredrikekre, this seems to have been fixed. I haven't been able to reproduce this?
image

Julia 1.6
Documenter v0.26.3

Was this page helpful?
0 / 5 - 0 ratings

Related issues

briochemc picture briochemc  路  3Comments

cadojo picture cadojo  路  3Comments

haampie picture haampie  路  3Comments

Roger-luo picture Roger-luo  路  3Comments

jonathan-laurent picture jonathan-laurent  路  3Comments