diff --git a/.github/workflows/jlpkgbutler-ci-pr-workflow.yml b/.github/workflows/jlpkgbutler-ci-pr-workflow.yml index a47670ec..24ae3325 100644 --- a/.github/workflows/jlpkgbutler-ci-pr-workflow.yml +++ b/.github/workflows/jlpkgbutler-ci-pr-workflow.yml @@ -7,6 +7,7 @@ on: jobs: test: runs-on: ${{ matrix.os }} + fail-fast: false strategy: matrix: julia-version: ['1.0', '1.1', '1.2', '1.3', '1.4', '1.5'] diff --git a/src/SymbolServer.jl b/src/SymbolServer.jl index 2e65ea3b..1d881e49 100644 --- a/src/SymbolServer.jl +++ b/src/SymbolServer.jl @@ -1,6 +1,6 @@ module SymbolServer -export SymbolServerInstance, getstore +export SymbolServerInstance, getstore, get_symbol_server using Serialization, Pkg, SHA using Base: UUID, Process @@ -202,6 +202,36 @@ end const stdlibs = load_core() + +VersionFloat(v::VersionNumber) = join(split(string(v),'.')[1:2],'.') + +global_env_path = joinpath(homedir(),".julia/environments/v$(VersionFloat(VERSION))") + +""" + symbol_server, symbol_extends = get_symbol_server(module_sym::Vector{Symbol}, env_path = global_env_path) + symbol_server, symbol_extends = get_symbol_server(module_sym::Symbol) + symbol_server, symbol_extends = get_symbol_server(module_sym::Nothing = nothing) + +Get symbols for the given module or current environment +""" +function get_symbol_server(module_sym::Vector{Symbol}, env_path = global_env_path) + # TODO write these to a file + printstyled("Getting the symbols for the environment at $env_path. Please wait....", color = :yellow) + env = SymbolServer.getenvtree(module_sym) + # symbol_server = SymbolServer.symbols(env) + symbol_server = getstore(SymbolServerInstance("", env_path), env_path)[2] + symbol_extends = SymbolServer.collect_extended_methods(env) + return symbol_server, symbol_extends +end + +get_symbol_server(module_sym::Symbol) = get_symbol_server([module_sym]) + +function get_symbol_server(module_sym::Nothing = nothing) + symbol_server = SymbolServer.stdlibs + symbol_extends = SymbolServer.collect_extended_methods(SymbolServer.stdlibs) + return symbol_server, symbol_extends +end + function _precompile_() ccall(:jl_generating_output, Cint, ()) == 1 || return nothing Base.precompile(Tuple{Type{SymbolServer.DataTypeStore},SymbolServer.FakeTypeName,SymbolServer.FakeTypeName,Array{Any,1},Array{Any,1},Array{Symbol,1},Array{Any,1},String,Bool}) diff --git a/test/runtests.jl b/test/runtests.jl index 81acb5a4..bbc0efbf 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -136,5 +136,63 @@ end end +# use for testing get_symbol_server +using Sockets, SHA, Markdown +@testset "get_symbol_servre" begin + let out = get_symbol_server() + symbol_server, symbol_extends = out + @test haskey(symbol_server, :Core) + @test typeof(symbol_server[:Core]) === SymbolServer.ModuleStore + + @test haskey(symbol_server, :Base) + @test typeof(symbol_server[:Base]) === SymbolServer.ModuleStore + + @test haskey(symbol_server, :Main) + @test typeof(symbol_server[:Main]) === SymbolServer.ModuleStore + + @test typeof(symbol_extends) === Dict{SymbolServer.VarRef,Vector{SymbolServer.VarRef}} + end + + let out = get_symbol_server(:Sockets) + symbol_server, symbol_extends = out + + @test haskey(symbol_server, :Sockets) + @test typeof(symbol_server[:Sockets]) === SymbolServer.ModuleStore + + @test haskey(symbol_server, :Core) + @test typeof(symbol_server[:Core]) === SymbolServer.ModuleStore + + @test haskey(symbol_server, :Base) + @test typeof(symbol_server[:Base]) === SymbolServer.ModuleStore + + @test haskey(symbol_server, :Main) + @test typeof(symbol_server[:Main]) === SymbolServer.ModuleStore + + @test typeof(symbol_extends) === Dict{SymbolServer.VarRef, Vector{SymbolServer.VarRef}} + + end + + let out = get_symbol_server([:SHA, :Markdown]) + symbol_server, symbol_extends = out + + @test haskey(symbol_server, :SHA) + @test typeof(symbol_server[:SHA]) === SymbolServer.ModuleStore + + @test haskey(symbol_server, :Markdown) + @test typeof(symbol_server[:Markdown]) === SymbolServer.ModuleStore + + @test haskey(symbol_server, :Core) + @test typeof(symbol_server[:Core]) === SymbolServer.ModuleStore + + @test haskey(symbol_server, :Base) + @test typeof(symbol_server[:Base]) === SymbolServer.ModuleStore + + @test haskey(symbol_server, :Main) + @test typeof(symbol_server[:Main]) === SymbolServer.ModuleStore + + @test typeof(symbol_extends) === Dict{SymbolServer.VarRef, Vector{SymbolServer.VarRef}} + + end +end