Skip to content

Commit

Permalink
Don't include extra whitespace in YAML scalar spans.
Browse files Browse the repository at this point in the history
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
  • Loading branch information
nex3 committed Dec 12, 2014
1 parent 7a46d42 commit c8f32cf
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 4 deletions.
4 changes: 4 additions & 0 deletions pkg/yaml/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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.
Expand Down
8 changes: 6 additions & 2 deletions pkg/yaml/lib/src/scanner.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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:
Expand All @@ -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);
}

Expand Down Expand Up @@ -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 = '';
Expand Down Expand Up @@ -1466,6 +1469,7 @@ class Scanner {
_scanner.readChar();
}
buffer.write(_scanner.substring(startPosition));
end = _scanner.state;

// Is it the end?
if (!_isBlank && !_isBreak) break;
Expand Down Expand Up @@ -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);
}

Expand Down
4 changes: 2 additions & 2 deletions pkg/yaml/pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
name: yaml
version: 2.1.0
version: 2.1.1
author: "Dart Team <misc@dartlang.org>"
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"
Expand Down

0 comments on commit c8f32cf

Please sign in to comment.