Line data Source code
1 : // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 2 : // for details. All rights reserved. Use of this source code is governed by a 3 : // BSD-style license that can be found in the LICENSE file. 4 : 5 : import 'location.dart'; 6 : import 'span.dart'; 7 : import 'utils.dart'; 8 : 9 : /// A class that describes a segment of source text with additional context. 10 : class SourceSpanWithContext extends SourceSpanBase { 11 : // This is a getter so that subclasses can override it. 12 : /// Text around the span, which includes the line containing this span. 13 0 : String get context => _context; 14 : final String _context; 15 : 16 : /// Creates a new span from [start] to [end] (exclusive) containing [text], in 17 : /// the given [context]. 18 : /// 19 : /// [start] and [end] must have the same source URL and [start] must come 20 : /// before [end]. [text] must have a number of characters equal to the 21 : /// distance between [start] and [end]. [context] must contain [text], and 22 : /// [text] should start at `start.column` from the beginning of a line in 23 : /// [context]. 24 0 : SourceSpanWithContext( 25 : SourceLocation start, SourceLocation end, String text, this._context) 26 0 : : super(start, end, text) { 27 0 : if (!context.contains(text)) { 28 0 : throw ArgumentError('The context line "$context" must contain "$text".'); 29 : } 30 : 31 0 : if (findLineStart(context, text, start.column) == null) { 32 0 : throw ArgumentError('The span text "$text" must start at ' 33 0 : 'column ${start.column + 1} in a line within "$context".'); 34 : } 35 : } 36 : }