--- a/src/Pure/Isar/document_structure.scala Wed Dec 02 10:30:59 2020 +0100
+++ b/src/Pure/Isar/document_structure.scala Wed Dec 02 15:01:37 2020 +0100
@@ -101,7 +101,7 @@
/* result structure */
val spans = syntax.parse_spans(text)
- spans.foreach(span => add(Command(Document_ID.none, node_name, Command.no_blobs, span)))
+ spans.foreach(span => add(Command(Document_ID.none, node_name, Command.Blobs_Info.none, span)))
result()
}
@@ -174,7 +174,7 @@
for { span <- syntax.parse_spans(text) } {
sections.add(
new Command_Item(syntax.keywords,
- Command(Document_ID.none, node_name, Command.no_blobs, span)))
+ Command(Document_ID.none, node_name, Command.Blobs_Info.none, span)))
}
sections.result()
}
--- a/src/Pure/PIDE/command.scala Wed Dec 02 10:30:59 2020 +0100
+++ b/src/Pure/PIDE/command.scala Wed Dec 02 15:01:37 2020 +0100
@@ -14,15 +14,23 @@
object Command
{
- type Edit = (Option[Command], Option[Command])
+ /* blobs */
sealed case class Blob(
name: Document.Node.Name,
src_path: Path,
content: Option[(SHA1.Digest, Symbol.Text_Chunk)])
- type Blobs_Info = (List[Exn.Result[Blob]], Int)
- val no_blobs: Blobs_Info = (Nil, -1)
+ object Blobs_Info
+ {
+ val none: Blobs_Info = Blobs_Info(Nil, -1)
+
+ def errors(msgs: List[String]): Blobs_Info =
+ Blobs_Info(msgs.map(msg => Exn.Exn[Blob](ERROR(msg))), -1)
+ }
+
+ sealed case class Blobs_Info(blobs: List[Exn.Result[Blob]], index: Int)
+
/** accumulated results from prover **/
@@ -359,7 +367,7 @@
}
val empty: Command =
- Command(Document_ID.none, Document.Node.Name.empty, no_blobs, Command_Span.empty)
+ Command(Document_ID.none, Document.Node.Name.empty, Blobs_Info.none, Command_Span.empty)
def unparsed(
source: String,
@@ -370,7 +378,7 @@
markups: Markups = Markups.empty): Command =
{
val (source1, span1) = Command_Span.unparsed(source, theory).compact_source
- new Command(id, node_name, no_blobs, span1, source1, results, markups)
+ new Command(id, node_name, Blobs_Info.none, span1, source1, results, markups)
}
def text(source: String): Command = unparsed(source)
@@ -380,7 +388,9 @@
markups = Markups.init(Markup_Tree.from_XML(body)))
- /* perspective */
+ /* edits and perspective */
+
+ type Edit = (Option[Command], Option[Command])
object Perspective
{
@@ -431,13 +441,11 @@
yield {
val completion =
if (Thy_Header.is_base_name(s)) resources.complete_import_name(node_name, s) else Nil
- val msg =
- "Bad theory import " +
- Markup.Path(import_name.node).markup(quote(import_name.toString)) +
- Position.here(pos) + Completion.report_theories(pos, completion)
- Exn.Exn[Command.Blob](ERROR(msg))
+ "Bad theory import " +
+ Markup.Path(import_name.node).markup(quote(import_name.toString)) +
+ Position.here(pos) + Completion.report_theories(pos, completion)
}
- (errors, -1)
+ Blobs_Info.errors(errors)
// auxiliary files
case _ =>
@@ -450,7 +458,7 @@
val content = get_blob(name).map(blob => (blob.bytes.sha1_digest, blob.chunk))
Blob(name, src_path, content)
}).user_error)
- (blobs, loaded_files.index)
+ Blobs_Info(blobs, loaded_files.index)
}
}
}
@@ -482,8 +490,8 @@
/* blobs */
- def blobs: List[Exn.Result[Command.Blob]] = blobs_info._1
- def blobs_index: Int = blobs_info._2
+ def blobs: List[Exn.Result[Command.Blob]] = blobs_info.blobs
+ def blobs_index: Int = blobs_info.index
def blobs_ok: Boolean =
blobs.forall({ case Exn.Res(_) => true case _ => false })