From 185a9c57df31a980010e3202f9a2d11da97a378f Mon Sep 17 00:00:00 2001 From: Michael Hatherly Date: Tue, 26 May 2015 08:19:52 +0200 Subject: [PATCH] Add support for 'function end' syntax. --- src/Collector/utilities.jl | 3 ++ .../FunctionSyntax/FunctionSyntax.jl | 11 ++++++++ test/Collector/facts.jl | 28 +++++++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 test/Collector/FunctionSyntax/FunctionSyntax.jl diff --git a/src/Collector/utilities.jl b/src/Collector/utilities.jl index 4d4bf44..0c84717 100644 --- a/src/Collector/utilities.jl +++ b/src/Collector/utilities.jl @@ -113,6 +113,7 @@ getcategory(x) = isalias(x) ? :typealias : isglobal(x) ? :global : issymbol(x) ? :symbol : + isfunc(x) ? :symbol : istuple(x) ? :tuple : isvcat(x) ? :vcat : isvect(x) ? :vect : @@ -135,6 +136,7 @@ skipexpr(x) = ismethod(x) = isexpr(x, [:function, :(=)]) && isexpr(x.args[1], :call) isglobal(x) = isexpr(x, [:global, :const, :(=)]) && !isexpr(x.args[1], :call) +isfunc(x) = isexpr(x, :function) && isa(x.args[1], Symbol) istype(x) = isexpr(x, [:type, :abstract]) isconcretetype(x) = isexpr(x, :type) isalias(x) = isexpr(x, :typealias) @@ -192,6 +194,7 @@ isdocumentable(ex) = isalias(ex) || isglobal(ex) || issymbol(ex) || + isfunc(ex) || isquote(ex) || ismacrocall(ex) || istuple(ex) || diff --git a/test/Collector/FunctionSyntax/FunctionSyntax.jl b/test/Collector/FunctionSyntax/FunctionSyntax.jl new file mode 100644 index 0000000..4c6270e --- /dev/null +++ b/test/Collector/FunctionSyntax/FunctionSyntax.jl @@ -0,0 +1,11 @@ +module FunctionSyntax + +"f_1" +function f_1 end + +""" +f_2 +""" +function f_2 end + +end diff --git a/test/Collector/facts.jl b/test/Collector/facts.jl index 55f2140..f677b70 100644 --- a/test/Collector/facts.jl +++ b/test/Collector/facts.jl @@ -174,3 +174,31 @@ facts("Base") do end end + +## 'function end' syntax tests. ## + +if VERSION >= v"0.4-dev+4989" + require(joinpath(dirname(@__FILE__), "FunctionSyntax", "FunctionSyntax.jl")) + import FunctionSyntax + + facts("Function Syntax.") do + metadata = Docile.Interface.metadata(FunctionSyntax) + entries = Docile.Interface.entries(metadata) + + @fact length(entries) => 2 + + @fact Docile.Interface.metadata(metadata) => @compat( + Dict{Symbol, Any}( + :format => :md, + :exports => Set([:FunctionSyntax]), + :manual => UTF8String[] + ) + ) + + @fact rawdocs(entries, FunctionSyntax.f_1) => "f_1" + @fact rawdocs(entries, FunctionSyntax.f_2) => "f_2\n" + + @fact docsmeta(entries, :category, FunctionSyntax.f_1) => :function + @fact docsmeta(entries, :category, FunctionSyntax.f_2) => :function + end +end