Index: dart/utils/compiler/source_file.dart |
diff --git a/dart/utils/compiler/source_file.dart b/dart/utils/compiler/source_file.dart |
index 1078b59d9997fe6640266d117f099ce33a5129b6..ce03678946baa9d115f9094365f678faba17cc83 100644 |
--- a/dart/utils/compiler/source_file.dart |
+++ b/dart/utils/compiler/source_file.dart |
@@ -2,43 +2,24 @@ |
// for details. All rights reserved. Use of this source code is governed by a |
// BSD-style license that can be found in the LICENSE file. |
-// TODO(jimhug): This should be an interface to work better with tools. |
+#library('source_file'); |
+ |
+#import('../../frog/leg/colors.dart'); |
+ |
/** |
* Represents a file of source code. |
*/ |
-class SourceFile implements Comparable { |
- // TODO(terry): This filename for in memory buffer. May need to rework if |
- // filename is used for more than informational. |
- static String IN_MEMORY_FILE = '<buffer>'; |
+class SourceFile { |
/** The name of the file. */ |
final String filename; |
/** The text content of the file. */ |
- String _text; |
- |
- /** |
- * The order of the source file in a given library. This is used while we're |
- * writing code for a library. A single source file can be used |
- */ |
- // TODO(jmesserly): I don't like having properties that are only valid |
- // sometimes. An alternative would be to store it in a Map that's used by |
- // WorldGenerator while it's emitting code. This seems simpler. |
- int orderInLibrary; |
+ final String text; |
List<int> _lineStarts; |
- SourceFile(this.filename, this._text); |
- |
- String get text() => _text; |
- |
- set text(String newText) { |
- if (newText != _text) { |
- _text = newText; |
- _lineStarts = null; |
- orderInLibrary = null; |
- } |
- } |
+ SourceFile(this.filename, this.text); |
List<int> get lineStarts() { |
if (_lineStarts == null) { |
@@ -73,7 +54,7 @@ class SourceFile implements Comparable { |
* in the file. |
*/ |
String getLocationMessage(String message, int start, |
- [int end, bool includeText=false]) { |
+ [int end, bool includeText=false, bool useColors = true]) { |
var line = getLine(start); |
var column = getColumn(line, start); |
@@ -90,11 +71,11 @@ class SourceFile implements Comparable { |
} |
int toColumn = Math.min(column + (end-start), textLine.length); |
- if (options.useColors) { |
+ if (useColors) { |
buf.add(textLine.substring(0, column)); |
- buf.add(_RED_COLOR); |
+ buf.add(RED_COLOR); |
buf.add(textLine.substring(column, toColumn)); |
- buf.add(_NO_COLOR); |
+ buf.add(NO_COLOR); |
buf.add(textLine.substring(toColumn)); |
} else { |
buf.add(textLine); |
@@ -105,82 +86,13 @@ class SourceFile implements Comparable { |
buf.add(' '); |
} |
- if (options.useColors) buf.add(_RED_COLOR); |
+ if (useColors) buf.add(RED_COLOR); |
for (; i < toColumn; i++) { |
buf.add('^'); |
} |
- if (options.useColors) buf.add(_NO_COLOR); |
+ if (useColors) buf.add(NO_COLOR); |
} |
return buf.toString(); |
} |
- |
- /** Compares two source files. */ |
- int compareTo(SourceFile other) { |
- if (orderInLibrary != null && other.orderInLibrary != null) { |
- return orderInLibrary - other.orderInLibrary; |
- } else { |
- return filename.compareTo(other.filename); |
- } |
- } |
-} |
- |
- |
-/** |
- * A range of characters in a [SourceFile]. Used to represent the source |
- * positions of [Token]s and [Node]s for error reporting or other tooling |
- * work. |
- */ |
- // TODO(jmesserly): Rename to Span - but first write cool refactoring tool |
-class SourceSpan implements Comparable { |
- /** The [SourceFile] that contains this span. */ |
- final SourceFile file; |
- |
- /** The character position of the start of this span. */ |
- final int start; |
- |
- /** The character position of the end of this span. */ |
- final int end; |
- |
- SourceSpan(this.file, this.start, this.end); |
- |
- /** Returns the source text corresponding to this [Span]. */ |
- String get text() { |
- return file.text.substring(start, end); |
- } |
- |
- toMessageString(String message) { |
- return file.getLocationMessage(message, start, end: end, includeText: true); |
- } |
- |
- int get line() { |
- return file.getLine(start); |
- } |
- |
- int get column() { |
- return file.getColumn(line, start); |
- } |
- |
- int get endLine() { |
- return file.getLine(end); |
- } |
- |
- int get endColumn() { |
- return file.getColumn(endLine, end); |
- } |
- |
- String get locationText() { |
- var line = file.getLine(start); |
- var column = file.getColumn(line, start); |
- return '${file.filename}:${line + 1}:${column + 1}'; |
- } |
- |
- /** Compares two source spans by file and position. Handles nulls. */ |
- int compareTo(SourceSpan other) { |
- if (file == other.file) { |
- int d = start - other.start; |
- return d == 0 ? (end - other.end) : d; |
- } |
- return file.compareTo(other.file); |
- } |
} |