From c8f32cf3e8912ac4d14eb55b312910afcd32ffbe Mon Sep 17 00:00:00 2001 From: "nweiz@google.com" Date: Fri, 12 Dec 2014 01:50:49 +0000 Subject: [PATCH] Don't include extra whitespace in YAML scalar spans. R=rnystrom@google.com BUG=21841 Review URL: https://codereview.chromium.org//797103002 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42307 260f80e4-7a28-3924-810f-c04153c831b5 --- pkg/yaml/CHANGELOG.md | 4 ++++ pkg/yaml/lib/src/scanner.dart | 8 ++++++-- pkg/yaml/pubspec.yaml | 4 ++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/pkg/yaml/CHANGELOG.md b/pkg/yaml/CHANGELOG.md index f454255b612a..80548ed2f425 100644 --- a/pkg/yaml/CHANGELOG.md +++ b/pkg/yaml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.1.1 + +* Properly scope `SourceSpan`s for scalar values surrounded by whitespace. + ## 2.1.0 * Rewrite the parser for a 10x speed improvement. diff --git a/pkg/yaml/lib/src/scanner.dart b/pkg/yaml/lib/src/scanner.dart index 00685539ce4e..6c702c80e0e7 100644 --- a/pkg/yaml/lib/src/scanner.dart +++ b/pkg/yaml/lib/src/scanner.dart @@ -1156,6 +1156,7 @@ class Scanner { var leadingBreak = ''; var leadingBlank = false; var trailingBlank = false; + var end = _scanner.position; while (_scanner.column == indent && !_scanner.isDone) { // Check for a document indicator. libyaml doesn't do this, but the spec // mandates it. See example 9.5: @@ -1188,6 +1189,7 @@ class Scanner { _scanner.readChar(); } buffer.write(_scanner.substring(startPosition)); + end = _scanner.position; // libyaml always reads a line here, but this breaks on block scalars at // the end of the document that end without newlines. See example 8.1: @@ -1204,7 +1206,7 @@ class Scanner { if (chomping != _Chomping.STRIP) buffer.write(leadingBreak); if (chomping == _Chomping.KEEP) buffer.write(trailingBreaks); - return new ScalarToken(_scanner.spanFrom(start), buffer.toString(), + return new ScalarToken(_scanner.spanFrom(start, end), buffer.toString(), literal ? ScalarStyle.LITERAL : ScalarStyle.FOLDED); } @@ -1430,6 +1432,7 @@ class Scanner { /// Scans a plain scalar. Token _scanPlainScalar() { var start = _scanner.state; + var end = _scanner.state; var buffer = new StringBuffer(); var leadingBreak = ''; var trailingBreaks = ''; @@ -1466,6 +1469,7 @@ class Scanner { _scanner.readChar(); } buffer.write(_scanner.substring(startPosition)); + end = _scanner.state; // Is it the end? if (!_isBlank && !_isBreak) break; @@ -1501,7 +1505,7 @@ class Scanner { // Allow a simple key after a plain scalar with leading blanks. if (leadingBreak.isNotEmpty) _simpleKeyAllowed = true; - return new ScalarToken(_scanner.spanFrom(start), buffer.toString(), + return new ScalarToken(_scanner.spanFrom(start, end), buffer.toString(), ScalarStyle.PLAIN); } diff --git a/pkg/yaml/pubspec.yaml b/pkg/yaml/pubspec.yaml index d0d51c5f6c6f..f149b1f6ed46 100644 --- a/pkg/yaml/pubspec.yaml +++ b/pkg/yaml/pubspec.yaml @@ -1,12 +1,12 @@ name: yaml -version: 2.1.0 +version: 2.1.1 author: "Dart Team " homepage: http://www.dartlang.org description: A parser for YAML. dependencies: collection: ">=1.1.0 <2.0.0" path: ">=1.2.0 <2.0.0" - string_scanner: ">=0.1.2 <0.2.0" + string_scanner: ">=0.1.3 <0.2.0" source_span: ">=1.0.0 <2.0.0" dev_dependencies: unittest: ">=0.9.0 <0.12.0"