remove unused scanner error list

Change-Id: I3dd5d66dcf05ae2bf9f2087724801cae4f3b6036
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97542
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
diff --git a/pkg/front_end/lib/src/fasta/scanner.dart b/pkg/front_end/lib/src/fasta/scanner.dart
index 17c3f09..bcd395a 100644
--- a/pkg/front_end/lib/src/fasta/scanner.dart
+++ b/pkg/front_end/lib/src/fasta/scanner.dart
@@ -6,8 +6,6 @@
 
 import 'dart:convert' show unicodeReplacementCharacterRune, utf8;
 
-import 'fasta_codes.dart' show LocatedMessage;
-
 import '../scanner/token.dart' show Token;
 
 import 'scanner/string_scanner.dart' show StringScanner;
@@ -41,14 +39,6 @@
 typedef Token Recover(List<int> bytes, Token tokens, List<int> lineStarts);
 
 abstract class Scanner {
-  /// A list of errors that occurred during [tokenize] or `null` if none.
-  List<LocatedMessage> errors;
-
-  /// Returns `true` if errors should be reported via the [errors] list.
-  // TODO(danrubel): Remove this once all scanner clients can process
-  // errors reported via the [errors] list.
-  bool get reportErrors;
-
   /// Returns true if an error occured during [tokenize].
   bool get hasErrors;
 
@@ -62,10 +52,7 @@
   final List<int> lineStarts;
   final bool hasErrors;
 
-  /// Returns a list of errors that occured during [tokenize] or `null` if none.
-  final List<LocatedMessage> errors;
-
-  ScannerResult(this.tokens, this.lineStarts, this.hasErrors, this.errors);
+  ScannerResult(this.tokens, this.lineStarts, this.hasErrors);
 }
 
 /// Scan/tokenize the given UTF8 [bytes].
@@ -104,6 +91,5 @@
     recover ??= defaultRecoveryStrategy;
     tokens = recover(bytes, tokens, scanner.lineStarts);
   }
-  return new ScannerResult(
-      tokens, scanner.lineStarts, scanner.hasErrors, scanner.errors);
+  return new ScannerResult(tokens, scanner.lineStarts, scanner.hasErrors);
 }
diff --git a/pkg/front_end/lib/src/fasta/scanner/abstract_scanner.dart b/pkg/front_end/lib/src/fasta/scanner/abstract_scanner.dart
index 3377316..bbda63f 100644
--- a/pkg/front_end/lib/src/fasta/scanner/abstract_scanner.dart
+++ b/pkg/front_end/lib/src/fasta/scanner/abstract_scanner.dart
@@ -16,8 +16,7 @@
         messageExpectedHexDigit,
         messageMissingExponent,
         messageUnexpectedDollarInString,
-        messageUnterminatedComment,
-        templateUnterminatedString;
+        messageUnterminatedComment;
 
 import '../scanner.dart'
     show ErrorToken, Keyword, Scanner, buildUnexpectedCharacterToken;
@@ -1262,17 +1261,9 @@
     appendSyntheticSubstringToken(TokenType.STRING, start, asciiOnly, suffix);
     // Ensure that the error is reported on a visible token
     int errorStart = tokenStart < stringOffset ? tokenStart : quoteStart;
-    if (reportErrors) {
-      addError(errorStart, stringOffset - errorStart,
-          templateUnterminatedString.withArguments(prefix, suffix));
-    } else {
-      appendErrorToken(
-          new UnterminatedString(prefix, errorStart, stringOffset));
-    }
+    appendErrorToken(new UnterminatedString(prefix, errorStart, stringOffset));
   }
 
-  void addError(int charOffset, int length, Message message);
-
   int advanceAfterError(bool shouldAdvance) {
     if (atEndOfFile()) return $EOF;
     if (shouldAdvance) {
diff --git a/pkg/front_end/lib/src/fasta/scanner/array_based_scanner.dart b/pkg/front_end/lib/src/fasta/scanner/array_based_scanner.dart
index 48f16b6..b6e0f09 100644
--- a/pkg/front_end/lib/src/fasta/scanner/array_based_scanner.dart
+++ b/pkg/front_end/lib/src/fasta/scanner/array_based_scanner.dart
@@ -6,8 +6,6 @@
 
 import 'error_token.dart' show ErrorToken, UnmatchedToken;
 
-import '../fasta_codes.dart' show LocatedMessage, Message;
-
 import '../../scanner/token.dart'
     show BeginToken, Keyword, KeywordToken, SyntheticToken, Token, TokenType;
 
@@ -27,14 +25,10 @@
 import '../util/link.dart' show Link;
 
 abstract class ArrayBasedScanner extends AbstractScanner {
-  List<LocatedMessage> errors;
-  final bool reportErrors;
   bool hasErrors = false;
 
-  ArrayBasedScanner(bool includeComments,
-      {int numberOfBytesHint, bool reportErrors})
-      : this.reportErrors = reportErrors ?? false,
-        super(includeComments, numberOfBytesHint: numberOfBytesHint);
+  ArrayBasedScanner(bool includeComments, {int numberOfBytesHint})
+      : super(includeComments, numberOfBytesHint: numberOfBytesHint);
 
   /**
    * The stack of open groups, e.g [: { ... ( .. :]
@@ -369,10 +363,4 @@
     begin.endGroup = tail;
     appendErrorToken(new UnmatchedToken(begin));
   }
-
-  void addError(int charOffset, int length, Message message) {
-    hasErrors = true;
-    (errors ??= <LocatedMessage>[])
-        .add(new LocatedMessage(null, charOffset, length, message));
-  }
 }
diff --git a/pkg/front_end/lib/src/fasta/scanner/string_scanner.dart b/pkg/front_end/lib/src/fasta/scanner/string_scanner.dart
index 953ebd1f..b5cb240 100644
--- a/pkg/front_end/lib/src/fasta/scanner/string_scanner.dart
+++ b/pkg/front_end/lib/src/fasta/scanner/string_scanner.dart
@@ -26,11 +26,9 @@
   int scanOffset = -1;
 
   StringScanner(String string,
-      {bool includeComments: false,
-      bool scanLazyAssignmentOperators: false,
-      bool reportErrors})
+      {bool includeComments: false, bool scanLazyAssignmentOperators: false})
       : string = ensureZeroTermination(string),
-        super(includeComments, reportErrors: reportErrors);
+        super(includeComments);
 
   static String ensureZeroTermination(String string) {
     return (string.isEmpty || string.codeUnitAt(string.length - 1) != 0)
diff --git a/pkg/front_end/lib/src/fasta/scanner/utf8_bytes_scanner.dart b/pkg/front_end/lib/src/fasta/scanner/utf8_bytes_scanner.dart
index e16d159..eec14d4 100644
--- a/pkg/front_end/lib/src/fasta/scanner/utf8_bytes_scanner.dart
+++ b/pkg/front_end/lib/src/fasta/scanner/utf8_bytes_scanner.dart
@@ -81,9 +81,8 @@
    * array whose last element is '0' to signal the end of the file. If this
    * is not the case, the entire array is copied before scanning.
    */
-  Utf8BytesScanner(this.bytes, {bool includeComments: false, bool reportErrors})
-      : super(includeComments,
-            numberOfBytesHint: bytes.length, reportErrors: reportErrors) {
+  Utf8BytesScanner(this.bytes, {bool includeComments: false})
+      : super(includeComments, numberOfBytesHint: bytes.length) {
     assert(bytes.last == 0);
     // Skip a leading BOM.
     if (containsBomAt(0)) byteOffset += 3;
diff --git a/pkg/front_end/lib/src/scanner/errors.dart b/pkg/front_end/lib/src/scanner/errors.dart
index 9e54680..6cdb878 100644
--- a/pkg/front_end/lib/src/scanner/errors.dart
+++ b/pkg/front_end/lib/src/scanner/errors.dart
@@ -174,22 +174,6 @@
   }
 }
 
-void translateScanError(
-    Code errorCode, int charOffset, int length, ReportError reportError) {
-  switch (errorCode.analyzerCodes?.first) {
-    case "UNTERMINATED_STRING_LITERAL":
-      // TODO(paulberry,ahe): Fasta reports the error location as the entire
-      // string; analyzer expects the end of the string.
-      reportError(ScannerErrorCode.UNTERMINATED_STRING_LITERAL,
-          charOffset + length - 1, null);
-      break;
-
-    default:
-      throw new UnimplementedError(
-          '$errorCode "${errorCode.analyzerCodes?.first}"');
-  }
-}
-
 /**
  * Determines whether the given [charOffset], which came from the non-EOF token
  * [token], represents the end of the input.
diff --git a/pkg/front_end/test/fasta/parser/type_info_test.dart b/pkg/front_end/test/fasta/parser/type_info_test.dart
index eced64d..531df46 100644
--- a/pkg/front_end/test/fasta/parser/type_info_test.dart
+++ b/pkg/front_end/test/fasta/parser/type_info_test.dart
@@ -58,8 +58,7 @@
     recover ??= defaultRecoveryStrategy;
     tokens = recover(bytes, tokens, scanner.lineStarts);
   }
-  return new ScannerResult(
-      tokens, scanner.lineStarts, scanner.hasErrors, scanner.errors);
+  return new ScannerResult(tokens, scanner.lineStarts, scanner.hasErrors);
 }
 
 @reflectiveTest
diff --git a/pkg/front_end/test/scanner_fasta_test.dart b/pkg/front_end/test/scanner_fasta_test.dart
index a2a0633..d9ca57f 100644
--- a/pkg/front_end/test/scanner_fasta_test.dart
+++ b/pkg/front_end/test/scanner_fasta_test.dart
@@ -98,16 +98,6 @@
     var firstToken = scanner.tokenize();
     Token token = new Token.eof(-1)..setNext(firstToken);
 
-    // Translate listed scanner errors
-    if (scanner.errors != null) {
-      for (LocatedMessage error in scanner.errors) {
-        translateScanError(error.code, error.charOffset, error.length,
-            (ScannerErrorCode errorCode, int offset, List<Object> arguments) {
-          listener.errors.add(new TestError(offset, errorCode, arguments));
-        });
-      }
-    }
-
     // Translate error tokens
     if (scanner.hasErrors) {
       Token next = firstToken;
@@ -367,28 +357,7 @@
 
 /// Base class for scanner tests that examine the token stream in Fasta format.
 abstract class ScannerTest_Fasta_Base {
-  List<LocatedMessage> scanErrors;
-
-  Token scan(String source, {int errorCount});
-
-  expectError(Code code, int charOffset, int length) {
-    if (scanErrors == null) {
-      fail('Expected $code but found no errors');
-    }
-    for (LocatedMessage e in scanErrors) {
-      if (e.code == code && e.charOffset == charOffset && e.length == length) {
-        return;
-      }
-    }
-    final msg = new StringBuffer();
-    msg.writeln('Expected:');
-    msg.writeln('  $code at $charOffset, $length');
-    msg.writeln('but found:');
-    for (LocatedMessage e in scanErrors) {
-      msg.writeln('  ${e.code} at ${e.charOffset}, ${e.length}');
-    }
-    fail(msg.toString());
-  }
+  Token scan(String source);
 
   expectToken(Token token, TokenType type, int offset, int length,
       {bool isSynthetic: false, String lexeme}) {
@@ -431,8 +400,7 @@
   }
 
   void test_string_simple_unterminated_interpolation_block() {
-    Token token = scan(r'"foo ${bar', errorCount: 1);
-    expectError(codeUnterminatedString, 0, 10);
+    Token token = scan(r'"foo ${bar');
     expectToken(token, TokenType.STRING, 0, 5, lexeme: '"foo ');
 
     token = token.next;
@@ -456,12 +424,12 @@
     expectToken(token, TokenType.STRING, 10, 0, isSynthetic: true, lexeme: '"');
 
     token = token.next;
-    expect(token.isEof, isTrue);
+    expect((token as fasta.ErrorToken).errorCode, same(codeUnterminatedString));
+    expect((token as fasta.UnterminatedString).start, '"');
   }
 
   void test_string_simple_unterminated_interpolation_block2() {
-    Token token = scan(r'"foo ${bar(baz[', errorCount: 1);
-    expectError(codeUnterminatedString, 0, 15);
+    Token token = scan(r'"foo ${bar(baz[');
     expectToken(token, TokenType.STRING, 0, 5, lexeme: '"foo ');
 
     token = token.next;
@@ -513,12 +481,12 @@
     expectToken(token, TokenType.STRING, 15, 0, isSynthetic: true, lexeme: '"');
 
     token = token.next;
-    expect(token.isEof, isTrue);
+    expect((token as fasta.ErrorToken).errorCode, same(codeUnterminatedString));
+    expect((token as fasta.UnterminatedString).start, '"');
   }
 
   void test_string_simple_missing_interpolation_identifier() {
-    Token token = scan(r'"foo $', errorCount: 1);
-    expectError(codeUnterminatedString, 0, 6);
+    Token token = scan(r'"foo $');
     expectToken(token, TokenType.STRING, 0, 5, lexeme: '"foo ');
 
     token = token.next;
@@ -536,68 +504,68 @@
     expectToken(token, TokenType.STRING, 6, 0, isSynthetic: true, lexeme: '"');
 
     token = token.next;
-    expect(token.isEof, isTrue);
+    expect((token as fasta.ErrorToken).errorCode, same(codeUnterminatedString));
+    expect((token as fasta.UnterminatedString).start, '"');
   }
 
   void test_string_multi_unterminated() {
-    Token token = scan("'''string", errorCount: 1);
-    expectError(codeUnterminatedString, 0, 9);
+    Token token = scan("'''string");
     expectToken(token, TokenType.STRING, 0, 9,
         lexeme: "'''string'''", isSynthetic: true);
 
     token = token.next;
-    expect(token.isEof, isTrue);
+    expect((token as fasta.ErrorToken).errorCode, same(codeUnterminatedString));
+    expect((token as fasta.UnterminatedString).start, "'''");
   }
 
   void test_string_raw_multi_unterminated() {
-    Token token = scan("r'''string", errorCount: 1);
-    expectError(codeUnterminatedString, 0, 10);
+    Token token = scan("r'''string");
     expectToken(token, TokenType.STRING, 0, 10,
         lexeme: "r'''string'''", isSynthetic: true);
 
     token = token.next;
-    expect(token.isEof, isTrue);
+    expect((token as fasta.ErrorToken).errorCode, same(codeUnterminatedString));
+    expect((token as fasta.UnterminatedString).start, "r'''");
   }
 
   void test_string_raw_simple_unterminated_eof() {
-    Token token = scan("r'string", errorCount: 1);
-    expectError(codeUnterminatedString, 0, 8);
+    Token token = scan("r'string");
     expectToken(token, TokenType.STRING, 0, 8,
         lexeme: "r'string'", isSynthetic: true);
 
     token = token.next;
-    expect(token.isEof, isTrue);
+    expect((token as fasta.ErrorToken).errorCode, same(codeUnterminatedString));
+    expect((token as fasta.UnterminatedString).start, "r'");
   }
 
   void test_string_raw_simple_unterminated_eol() {
-    Token token = scan("r'string\n", errorCount: 1);
-    expectError(codeUnterminatedString, 0, 8);
+    Token token = scan("r'string\n");
     expectToken(token, TokenType.STRING, 0, 8,
         lexeme: "r'string'", isSynthetic: true);
 
     token = token.next;
-    expect(token.isEof, isTrue);
+    expect((token as fasta.ErrorToken).errorCode, same(codeUnterminatedString));
+    expect((token as fasta.UnterminatedString).start, "r'");
   }
 
   void test_string_simple_unterminated_eof() {
-    Token token = scan("'string", errorCount: 1);
-    expectError(codeUnterminatedString, 0, 7);
+    Token token = scan("'string");
     expectToken(token, TokenType.STRING, 0, 7,
         lexeme: "'string'", isSynthetic: true);
 
     token = token.next;
-    expect(token.isEof, isTrue);
+    expect((token as fasta.ErrorToken).errorCode, same(codeUnterminatedString));
+    expect((token as fasta.UnterminatedString).start, "'");
   }
 
   void test_string_simple_unterminated_eol() {
-    Token token = scan("'string\n", errorCount: 1);
-    expectError(codeUnterminatedString, 0, 7);
-
+    Token token = scan("'string\n");
     expectToken(token, TokenType.STRING, 0, 7,
         lexeme: "'string'", isSynthetic: true);
 
     token = token.next;
-    expect(token.isEof, isTrue);
+    expect((token as fasta.ErrorToken).errorCode, same(codeUnterminatedString));
+    expect((token as fasta.UnterminatedString).start, "'");
   }
 
   void test_match_angle_brackets() {
@@ -756,25 +724,23 @@
 /// Scanner tests that exercise the Fasta scanner directly.
 @reflectiveTest
 class ScannerTest_Fasta_Direct_UTF8 extends ScannerTest_Fasta_Direct {
-  createScanner(String source, {bool includeComments, bool reportErrors}) {
+  createScanner(String source, {bool includeComments}) {
     List<int> encoded = utf8.encode(source).toList(growable: true);
     encoded.add(0); // Ensure 0 terminted bytes for UTF8 scanner
     return new fasta.Utf8BytesScanner(encoded,
-        includeComments: includeComments, reportErrors: reportErrors);
+        includeComments: includeComments);
   }
 }
 
 /// Scanner tests that exercise the Fasta scanner directly.
 @reflectiveTest
 class ScannerTest_Fasta_Direct extends ScannerTest_Fasta_Base {
-  createScanner(String source, {bool includeComments, bool reportErrors}) =>
-      new fasta.StringScanner(source,
-          includeComments: includeComments, reportErrors: reportErrors);
+  createScanner(String source, {bool includeComments}) =>
+      new fasta.StringScanner(source, includeComments: includeComments);
 
   @override
-  Token scan(String source, {int errorCount}) {
-    Scanner scanner =
-        createScanner(source, includeComments: true, reportErrors: true);
+  Token scan(String source) {
+    Scanner scanner = createScanner(source, includeComments: true);
     final Token first = scanner.tokenize();
     Token token = first;
     while (!token.isEof) {
@@ -786,8 +752,6 @@
       }
       token = next;
     }
-    scanErrors = scanner.errors;
-    expect(scanErrors, errorCount == null ? isNull : hasLength(errorCount));
     return first;
   }