From b016cdd1f839c5037ce13dc544e4a40b860c9d0a Mon Sep 17 00:00:00 2001 From: Oscar Dowson Date: Wed, 6 Nov 2024 15:00:59 +1300 Subject: [PATCH] Simplify how we copy docstrings for MOI enums (#3872) --- src/JuMP.jl | 36 ++++++------------------------------ 1 file changed, 6 insertions(+), 30 deletions(-) diff --git a/src/JuMP.jl b/src/JuMP.jl index b26532e9c8e..94f7a17f0cf 100644 --- a/src/JuMP.jl +++ b/src/JuMP.jl @@ -1307,39 +1307,15 @@ include("print.jl") # `MOI.OPTIMAL`. This piece of code re-exports them from JuMP so that users can # use: `MOI.OPTIMAL`, `JuMP.OPTIMAL`, or `using JuMP; OPTIMAL`. -function _eval_instances_in_jump(moi_enum) - for enum in instances(moi_enum) - name = Symbol(enum) - # `eval` the instance as `const name = MOI.name`. - eval(Expr(:const, Expr(:(=), name, enum))) - # Documentation is not copied for a `const` expression of an object, so - # we need to manually set the docstring in this `@__MODULE__`. - docstr = Docs.docstr(Docs.Binding(MOI, name)) - d = Docs.DocStr( - docstr.text, - nothing, - Dict{Symbol,Any}( - :typesig => Union{}, - :module => @__MODULE__, - :linenumber => @__LINE__, - :binding => getfield(@__MODULE__, name), - :path => @__FILE__, - ), - ) - Docs.doc!(@__MODULE__, Docs.Binding(@__MODULE__, name), d, Union{}) +for sym in [:ResultStatusCode, :TerminationStatusCode, :OptimizationSense] + @eval const $sym = MOI.$sym + for enum in instances(getfield(MOI, sym)) + @eval const $(Symbol(enum)) = $enum + docstr = Docs.docstr(Docs.Binding(MOI, Symbol(enum))) + Docs.doc!(@__MODULE__, Docs.Binding(@__MODULE__, Symbol(enum)), docstr) end - return end -const ResultStatusCode = MOI.ResultStatusCode -_eval_instances_in_jump(MOI.ResultStatusCode) - -const TerminationStatusCode = MOI.TerminationStatusCode -_eval_instances_in_jump(MOI.TerminationStatusCode) - -const OptimizationSense = MOI.OptimizationSense -_eval_instances_in_jump(MOI.OptimizationSense) - # JuMP exports everything except internal symbols, which are defined as those # whose name starts with an underscore. Macros whose names start with # underscores are internal as well. If you don't want all of these symbols