public Options WithLocationMembersPlacement(LocationMembersPlacement value) { return(value == LocationMembersPlacement ? this : new Options(this) { LocationMembersPlacement = value }); }
private Options(Options options) { IncludingLineColumn = options.IncludingLineColumn; IncludingRange = options.IncludingRange; LocationMembersPlacement = options.LocationMembersPlacement; }
public Visitor(JsonWriter writer, bool includeLineColumn, bool includeRange, LocationMembersPlacement locationMembersPlacement) { _writer = writer ?? throw new ArgumentNullException(nameof(writer)); _stack = new ObservableStack <INode>(); _stack.Pushed += node => { _writer.StartObject(); if ((includeLineColumn || includeRange) && locationMembersPlacement == LocationMembersPlacement.Start) { WriteLocationInfo(node); } Member("type", node.Type.ToString()); }; _stack.Popped += node => { if ((includeLineColumn || includeRange) && locationMembersPlacement == LocationMembersPlacement.End) { WriteLocationInfo(node); } _writer.EndObject(); }; void WriteLocationInfo(INode node) { if (includeRange) { writer.Member("range"); writer.StartArray(); writer.Number(node.Range.Start); writer.Number(node.Range.End); writer.EndArray(); } if (includeLineColumn) { writer.Member("loc"); writer.StartObject(); writer.Member("start"); Write(node.Location.Start); writer.Member("end"); Write(node.Location.End); writer.EndObject(); } void Write(Position position) { writer.StartObject(); Member("line", position.Line); Member("column", position.Column); writer.EndObject(); } } }