123456789101112131415161718192021222324252627282930313233343536373839404142434445464748(************************************************************************)(* * The Coq Proof Assistant / The Coq Development Team *)(* v * INRIA, CNRS and contributors - Copyright 1999-2018 *)(* <O___,, * (see CREDITS file for the list of authors) *)(* \VV/ **************************************************************)(* // * This file is distributed under the terms of the *)(* * GNU Lesser General Public License Version 2.1 *)(* * (see LICENSE file for the text of the license) *)(************************************************************************)(************************************************************************)(* Coq Language Server Protocol *)(* Copyright 2016-2019 MINES ParisTech -- Dual License LGPL 2.1 / GPL3+ *)(* Copyright 2019-2024 Inria -- Dual License LGPL 2.1 / GPL3+ *)(* Written by: Emilio J. Gallego Arias *)(************************************************************************)(* Taken from sertop / Coq *)letensure_no_pending_proofs~in_file~st=matchst.Vernacstate.interp.lemmaswith|Somelemmas->letpfs=Vernacstate.LemmaStack.get_all_proof_nameslemmasinCErrors.user_errPp.(str"There are pending proofs in file "++strin_file++str": "++(pfs|>List.rev|>prlist_with_seppr_commaNames.Id.print)++str".")|None->letpm=st.Vernacstate.interp.programinletwhat_for=Pp.str("file "^in_file)inNeList.iter(funpm->Declare.Obls.check_solved_obligations~what_for~pm)pmletsave_vo~st~ldirin_file=letst=State.to_coqstinlet()=ensure_no_pending_proofs~in_file~stinletout_vo=Filename.(remove_extensionin_file)^".vo"inletoutput_native_objects=falseinlettodo_proofs=Library.ProofsTodoNoneinlet()=Library.save_library_totodo_proofs~output_native_objectsldirout_voin()letsave_vo~token~st~ldir~in_file=Protect.eval~token~f:(save_vo~st~ldir)in_file