module ESS # These methods have been deprecated / moved macro current_module() return VERSION >= v"0.7-" ? :(@__MODULE__) : :(current_module()) end parse = VERSION >= v"0.7-" ? Base.Meta.parse : Base.parse function_module = VERSION >= v"0.7-" ? Base.parentmodule : Base.function_module function all_help_topics() ## There are not clear topics anymore. Approximate those with a very general ## apropos(" ") Base.Docs.apropos(" ") end function help(topic::AbstractString) if (VERSION >= v"1.0-") Core.eval(parentmodule(ESS), parse("@doc $topic")) elseif (VERSION >= v"0.4-") Core.eval(@current_module(), parse("@doc $topic")) else Base.Help.help(topic) end end ## modified version of function show(io::IO, m::Method) function fun_args(m::Method) tv, decls, file, line = Base.arg_decl_parts(m) io = VERSION >= v"0.7-" ? Base.stdout : STDOUT::IO # STDOUT is no longer in 1.0 if !isempty(tv) Base.show_delim_array(io, tv, '{', ',', '}', false) end print(io, "(") join(io, [escape_string(isempty(d[2]) ? d[1] : d[1]*"::"*d[2]) for d in decls], ",", ",") Base.print(io, ")") end ## modified versionof show(io::IO, mt::MethodTable) function fun_args(f::Function) mt = Base.MethodList(methods(f).mt) mod = function_module(f) # Base.function_module deprecated in 0.7 if mod == Main mod = "nil" end print("(list \"$mod\" nil '(") for d in mt print("\"") ## method fun_args(d) print("\" ") end print("))") end function fun_args(s::AbstractString) try mod = VERSION >= v"1.0-" ? parentmodule(ESS) : @current_module() m = Core.eval(mod, parse(s)) if ! isa(m, String) fun_args(m) end catch print("(list nil nil nil)") end end function fun_args(t::DataType) print("(list nil nil '(") for d = fieldnames(t) print("\"$d\" ") end print("))") end ### OBJECT COMPLETION # Must print an output of the form: # # Cache Module # Write Module # add Function # free Function function components(m::Module) for v in sort(names(m, all=true, imported=true)) s = string(v) if !startswith(s, "#") && isdefined(m,v) println(rpad(s, 30), summary(Core.eval(m,v))) end end end function components(t::DataType) for v in sort(fieldnames(t)) println(rpad(string(v), 30), "field") end end function components(v) t = typeof(v) if isa(t, DataType) return components(t) end end ### MISC function main_modules(m::Module) for nm in names(m) if isdefined(m, nm) mod = Core.eval(m, nm) if isa(mod, Module) print("\"$nm\" ") end end end end if VERSION >= v"0.7-" main_modules() = main_modules(Base.parentmodule(@current_module())) else main_modules() = main_modules(@current_module()) end end