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 : 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 new ArgumentError(
29 0 : 'The context line "$context" must contain "$text".');
30 : }
31 :
32 0 : if (findLineStart(context, text, start.column) == null) {
33 0 : throw new ArgumentError('The span text "$text" must start at '
34 0 : 'column ${start.column + 1} in a line within "$context".');
35 : }
36 : }
37 : }
|