Deprecate the use of runes in SourceFile. (#16)
This behavior runs contrary to the rest of Dart's string handling, and
in particular breaks string_scanner. See dart-lang/string_scanner#4.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0176b9f..68eafaa 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,16 @@
+# 1.4.0
+
+* The `new SourceFile()` constructor is deprecated. This constructed a source
+ file from a string's runes, rather than its code units, which runs counter to
+ the way Dart handles strings otherwise. The `new StringFile.fromString()`
+ constructor (see below) should be used instead.
+
+* The `new SourceFile.fromString()` constructor was added. This works like `new
+ SourceFile()`, except it uses code units rather than runes.
+
+* The current behavior when characters larger than `0xFFFF` are passed to `new
+ SourceFile.decoded()` is now considered deprecated.
+
# 1.3.1
* Properly highlight spans for lines that include tabs with
diff --git a/lib/src/file.dart b/lib/src/file.dart
index 1d39cf1..0217c2d 100644
--- a/lib/src/file.dart
+++ b/lib/src/file.dart
@@ -49,15 +49,28 @@
/// previous result.
int _cachedLine;
- /// Creates a new source file from [text].
+ /// This constructor is deprecated.
///
- /// [url] may be either a [String], a [Uri], or `null`.
+ /// Use [new SourceFile.fromString] instead.
+ @Deprecated("Will be removed in 2.0.0")
SourceFile(String text, {url})
: this.decoded(text.runes, url: url);
- /// Creates a new source file from a list of decoded characters.
+ /// Creates a new source file from [text].
///
/// [url] may be either a [String], a [Uri], or `null`.
+ SourceFile.fromString(String text, {url})
+ : this.decoded(text.codeUnits, url: url);
+
+ /// Creates a new source file from a list of decoded code units.
+ ///
+ /// [url] may be either a [String], a [Uri], or `null`.
+ ///
+ /// Currently, if [decodedChars] contains characters larger than `0xFFFF`,
+ /// they'll be treated as single characters rather than being split into
+ /// surrogate pairs. **This behavior is deprecated**. For
+ /// forwards-compatibility, callers should only pass in characters less than
+ /// or equal to `0xFFFF`.
SourceFile.decoded(Iterable<int> decodedChars, {url})
: url = url is String ? Uri.parse(url) : url,
_decodedChars = new Uint32List.fromList(decodedChars.toList()) {
diff --git a/pubspec.yaml b/pubspec.yaml
index 70f4e10..46e3d52 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
name: source_span
-version: 1.3.1
+version: 1.4.0
author: Dart Team <misc@dartlang.org>
description: A library for identifying source spans and locations.
homepage: https://github.com/dart-lang/source_span