clarified ignored span / core range: include formal comments, e.g. relevant for error messages from antiquotations;
authorwenzelm
Tue, 31 Jul 2018 21:11:24 +0200
changeset 68729 3a02b424d5fb
parent 68728 c07f6fa02c59
child 68730 0bc491938780
clarified ignored span / core range: include formal comments, e.g. relevant for error messages from antiquotations;
src/Pure/Isar/outer_syntax.ML
src/Pure/Isar/outer_syntax.scala
src/Pure/Isar/token.ML
src/Pure/Isar/token.scala
src/Pure/PIDE/command.ML
src/Pure/PIDE/command.scala
--- a/src/Pure/Isar/outer_syntax.ML	Tue Jul 31 21:06:09 2018 +0200
+++ b/src/Pure/Isar/outer_syntax.ML	Tue Jul 31 21:11:24 2018 +0200
@@ -233,7 +233,7 @@
 fun ship span =
   let
     val kind =
-      if forall Token.is_improper span then Command_Span.Ignored_Span
+      if forall Token.is_ignored span then Command_Span.Ignored_Span
       else if exists Token.is_error span then Command_Span.Malformed_Span
       else
         (case find_first Token.is_command span of
@@ -241,18 +241,18 @@
         | SOME cmd => Command_Span.Command_Span (Token.content_of cmd, Token.pos_of cmd));
   in cons (Command_Span.Span (kind, span)) end;
 
-fun flush (result, content, improper) =
+fun flush (result, content, ignored) =
   result
   |> not (null content) ? ship (rev content)
-  |> not (null improper) ? ship (rev improper);
+  |> not (null ignored) ? ship (rev ignored);
 
-fun parse tok (result, content, improper) =
-  if Token.is_improper tok then (result, content, tok :: improper)
+fun parse tok (result, content, ignored) =
+  if Token.is_ignored tok then (result, content, tok :: ignored)
   else if Token.is_command_modifier tok orelse
     Token.is_command tok andalso
       (not (exists Token.is_command_modifier content) orelse exists Token.is_command content)
-  then (flush (result, content, improper), [tok], [])
-  else (result, tok :: (improper @ content), []);
+  then (flush (result, content, ignored), [tok], [])
+  else (result, tok :: (ignored @ content), []);
 
 in
 
--- a/src/Pure/Isar/outer_syntax.scala	Tue Jul 31 21:06:09 2018 +0200
+++ b/src/Pure/Isar/outer_syntax.scala	Tue Jul 31 21:11:24 2018 +0200
@@ -161,12 +161,12 @@
   {
     val result = new mutable.ListBuffer[Command_Span.Span]
     val content = new mutable.ListBuffer[Token]
-    val improper = new mutable.ListBuffer[Token]
+    val ignored = new mutable.ListBuffer[Token]
 
     def ship(span: List[Token])
     {
       val kind =
-        if (span.forall(_.is_improper)) Command_Span.Ignored_Span
+        if (span.forall(_.is_ignored)) Command_Span.Ignored_Span
         else if (span.exists(_.is_error)) Command_Span.Malformed_Span
         else
           span.find(_.is_command) match {
@@ -186,16 +186,16 @@
     def flush()
     {
       if (content.nonEmpty) { ship(content.toList); content.clear }
-      if (improper.nonEmpty) { ship(improper.toList); improper.clear }
+      if (ignored.nonEmpty) { ship(ignored.toList); ignored.clear }
     }
 
     for (tok <- toks) {
-      if (tok.is_improper) improper += tok
+      if (tok.is_ignored) ignored += tok
       else if (keywords.is_before_command(tok) ||
         tok.is_command &&
           (!content.exists(keywords.is_before_command(_)) || content.exists(_.is_command)))
       { flush(); content += tok }
-      else { content ++= improper; improper.clear; content += tok }
+      else { content ++= ignored; ignored.clear; content += tok }
     }
     flush()
 
--- a/src/Pure/Isar/token.ML	Tue Jul 31 21:06:09 2018 +0200
+++ b/src/Pure/Isar/token.ML	Tue Jul 31 21:11:24 2018 +0200
@@ -47,6 +47,7 @@
   val is_comment: T -> bool
   val is_informal_comment: T -> bool
   val is_formal_comment: T -> bool
+  val is_ignored: T -> bool
   val is_begin_ignore: T -> bool
   val is_end_ignore: T -> bool
   val is_error: T -> bool
@@ -227,6 +228,10 @@
 fun ident_with pred (Token (_, (Ident, x), _)) = pred x
   | ident_with _ _ = false;
 
+fun is_ignored (Token (_, (Space, _), _)) = true
+  | is_ignored (Token (_, (Comment NONE, _), _)) = true
+  | is_ignored _ = false;
+
 fun is_proper (Token (_, (Space, _), _)) = false
   | is_proper (Token (_, (Comment _, _), _)) = false
   | is_proper _ = true;
--- a/src/Pure/Isar/token.scala	Tue Jul 31 21:06:09 2018 +0200
+++ b/src/Pure/Isar/token.scala	Tue Jul 31 21:11:24 2018 +0200
@@ -296,6 +296,7 @@
   def is_informal_comment: Boolean = kind == Token.Kind.INFORMAL_COMMENT
   def is_formal_comment: Boolean = kind == Token.Kind.FORMAL_COMMENT
   def is_comment: Boolean = is_informal_comment || is_formal_comment
+  def is_ignored: Boolean = is_space || is_informal_comment
   def is_improper: Boolean = is_space || is_comment
   def is_proper: Boolean = !is_space && !is_comment
   def is_error: Boolean = kind == Token.Kind.ERROR
--- a/src/Pure/PIDE/command.ML	Tue Jul 31 21:06:09 2018 +0200
+++ b/src/Pure/PIDE/command.ML	Tue Jul 31 21:11:24 2018 +0200
@@ -136,7 +136,7 @@
   let
     val command_reports = Outer_Syntax.command_reports thy;
 
-    val core_range = Token.range_of (drop_suffix Token.is_improper span);
+    val core_range = Token.range_of (drop_suffix Token.is_ignored span);
     val pos =
       (case find_first Token.is_command span of
         SOME tok => Token.pos_of tok
--- a/src/Pure/PIDE/command.scala	Tue Jul 31 21:06:09 2018 +0200
+++ b/src/Pure/PIDE/command.scala	Tue Jul 31 21:11:24 2018 +0200
@@ -605,7 +605,7 @@
 
   val core_range: Text.Range =
     Text.Range(0,
-      (length /: span.content.reverse.iterator.takeWhile(_.is_improper))(_ - _.source.length))
+      (length /: span.content.reverse.iterator.takeWhile(_.is_ignored))(_ - _.source.length))
 
   def source(range: Text.Range): String = range.substring(source)