Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(82)

Unified Diff: pkg/yaml/lib/src/composer.dart

Issue 302313007: Attach source range information to parsed YAML nodes. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: fix tests Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/yaml/CHANGELOG.md ('k') | pkg/yaml/lib/src/constructor.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/yaml/lib/src/composer.dart
diff --git a/pkg/yaml/lib/src/composer.dart b/pkg/yaml/lib/src/composer.dart
index 317809653d4bfe54935e39a23d008be0d2623ded..4c19da14ab874c77a8ec741e29105117675713be 100644
--- a/pkg/yaml/lib/src/composer.dart
+++ b/pkg/yaml/lib/src/composer.dart
@@ -4,6 +4,8 @@
library yaml.composer;
+import 'package:source_maps/source_maps.dart';
+
import 'model.dart';
import 'visitor.dart';
import 'yaml_exception.dart';
@@ -45,13 +47,13 @@ class Composer extends Visitor {
/// Currently this only supports the YAML core type schema.
Node visitScalar(ScalarNode scalar) {
if (scalar.tag.name == "!") {
- return setAnchor(scalar, parseString(scalar.content));
+ return setAnchor(scalar, parseString(scalar));
} else if (scalar.tag.name == "?") {
for (var fn in [parseNull, parseBool, parseInt, parseFloat]) {
- var result = fn(scalar.content);
+ var result = fn(scalar);
if (result != null) return result;
}
- return setAnchor(scalar, parseString(scalar.content));
+ return setAnchor(scalar, parseString(scalar));
}
var result = _parseByTag(scalar);
@@ -62,11 +64,11 @@ class Composer extends Visitor {
ScalarNode _parseByTag(ScalarNode scalar) {
switch (scalar.tag.name) {
- case "null": return parseNull(scalar.content);
- case "bool": return parseBool(scalar.content);
- case "int": return parseInt(scalar.content);
- case "float": return parseFloat(scalar.content);
- case "str": return parseString(scalar.content);
+ case "null": return parseNull(scalar);
+ case "bool": return parseBool(scalar);
+ case "int": return parseInt(scalar);
+ case "float": return parseFloat(scalar);
+ case "str": return parseString(scalar);
}
throw new YamlException('Undefined tag: ${scalar.tag}.');
}
@@ -78,7 +80,8 @@ class Composer extends Visitor {
throw new YamlException("Invalid tag for sequence: ${seq.tag}.");
}
- var result = setAnchor(seq, new SequenceNode(Tag.yaml('seq'), null));
+ var result = setAnchor(seq,
+ new SequenceNode(Tag.yaml('seq'), null, seq.span));
result.content = super.visitSequence(seq);
return result;
}
@@ -90,7 +93,8 @@ class Composer extends Visitor {
throw new YamlException("Invalid tag for mapping: ${map.tag}.");
}
- var result = setAnchor(map, new MappingNode(Tag.yaml('map'), null));
+ var result = setAnchor(map,
+ new MappingNode(Tag.yaml('map'), null, map.span));
result.content = super.visitMapping(map);
return result;
}
@@ -105,36 +109,40 @@ class Composer extends Visitor {
}
/// Parses a null scalar.
- ScalarNode parseNull(String content) {
- if (!new RegExp(r"^(null|Null|NULL|~|)$").hasMatch(content)) return null;
- return new ScalarNode(Tag.yaml("null"), value: null);
+ ScalarNode parseNull(ScalarNode scalar) {
+ if (new RegExp(r"^(null|Null|NULL|~|)$").hasMatch(scalar.content)) {
+ return new ScalarNode(Tag.yaml("null"), scalar.span, value: null);
+ } else {
+ return null;
+ }
}
/// Parses a boolean scalar.
- ScalarNode parseBool(String content) {
+ ScalarNode parseBool(ScalarNode scalar) {
var match = new RegExp(r"^(?:(true|True|TRUE)|(false|False|FALSE))$").
- firstMatch(content);
+ firstMatch(scalar.content);
if (match == null) return null;
- return new ScalarNode(Tag.yaml("bool"), value: match.group(1) != null);
+ return new ScalarNode(Tag.yaml("bool"), scalar.span,
+ value: match.group(1) != null);
}
/// Parses an integer scalar.
- ScalarNode parseInt(String content) {
- var match = new RegExp(r"^[-+]?[0-9]+$").firstMatch(content);
+ ScalarNode parseInt(ScalarNode scalar) {
+ var match = new RegExp(r"^[-+]?[0-9]+$").firstMatch(scalar.content);
if (match != null) {
- return new ScalarNode(Tag.yaml("int"),
+ return new ScalarNode(Tag.yaml("int"), scalar.span,
value: int.parse(match.group(0)));
}
- match = new RegExp(r"^0o([0-7]+)$").firstMatch(content);
+ match = new RegExp(r"^0o([0-7]+)$").firstMatch(scalar.content);
if (match != null) {
int n = int.parse(match.group(1), radix: 8);
- return new ScalarNode(Tag.yaml("int"), value: n);
+ return new ScalarNode(Tag.yaml("int"), scalar.span, value: n);
}
- match = new RegExp(r"^0x[0-9a-fA-F]+$").firstMatch(content);
+ match = new RegExp(r"^0x[0-9a-fA-F]+$").firstMatch(scalar.content);
if (match != null) {
- return new ScalarNode(Tag.yaml("int"),
+ return new ScalarNode(Tag.yaml("int"), scalar.span,
value: int.parse(match.group(0)));
}
@@ -142,33 +150,33 @@ class Composer extends Visitor {
}
/// Parses a floating-point scalar.
- ScalarNode parseFloat(String content) {
+ ScalarNode parseFloat(ScalarNode scalar) {
var match = new RegExp(
- r"^[-+]?(\.[0-9]+|[0-9]+(\.[0-9]*)?)([eE][-+]?[0-9]+)?$").
- firstMatch(content);
+ r"^[-+]?(\.[0-9]+|[0-9]+(\.[0-9]*)?)([eE][-+]?[0-9]+)?$").
+ firstMatch(scalar.content);
if (match != null) {
// YAML allows floats of the form "0.", but Dart does not. Fix up those
// floats by removing the trailing dot.
var matchStr = match.group(0).replaceAll(new RegExp(r"\.$"), "");
- return new ScalarNode(Tag.yaml("float"),
+ return new ScalarNode(Tag.yaml("float"), scalar.span,
value: double.parse(matchStr));
}
- match = new RegExp(r"^([+-]?)\.(inf|Inf|INF)$").firstMatch(content);
+ match = new RegExp(r"^([+-]?)\.(inf|Inf|INF)$").firstMatch(scalar.content);
if (match != null) {
var value = match.group(1) == "-" ? -double.INFINITY : double.INFINITY;
- return new ScalarNode(Tag.yaml("float"), value: value);
+ return new ScalarNode(Tag.yaml("float"), scalar.span, value: value);
}
- match = new RegExp(r"^\.(nan|NaN|NAN)$").firstMatch(content);
+ match = new RegExp(r"^\.(nan|NaN|NAN)$").firstMatch(scalar.content);
if (match != null) {
- return new ScalarNode(Tag.yaml("float"), value: double.NAN);
+ return new ScalarNode(Tag.yaml("float"), scalar.span, value: double.NAN);
}
return null;
}
/// Parses a string scalar.
- ScalarNode parseString(String content) =>
- new ScalarNode(Tag.yaml("str"), value: content);
+ ScalarNode parseString(ScalarNode scalar) =>
+ new ScalarNode(Tag.yaml("str"), scalar.span, value: scalar.content);
}
« no previous file with comments | « pkg/yaml/CHANGELOG.md ('k') | pkg/yaml/lib/src/constructor.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698