Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Simplify how we copy docstrings for MOI enums #3872

Merged
merged 2 commits into from
Nov 6, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 6 additions & 30 deletions src/JuMP.jl
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Loading