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 : library source_maps.source_map_span;
6 :
7 : import 'package:source_span/source_span.dart';
8 :
9 : /// A [SourceSpan] for spans coming from or being written to source maps.
10 : ///
11 : /// These spans have an extra piece of metadata: whether or not they represent
12 : /// an identifier (see [isIdentifier]).
13 : class SourceMapSpan extends SourceSpanBase {
14 : /// Whether this span represents an identifier.
15 : ///
16 : /// If this is `true`, [text] is the value of the identifier.
17 : final bool isIdentifier;
18 :
19 : SourceMapSpan(SourceLocation start, SourceLocation end, String text,
20 : {this.isIdentifier: false})
21 0 : : super(start, end, text);
22 :
23 : /// Creates a [SourceMapSpan] for an identifier with value [text] starting at
24 : /// [start].
25 : ///
26 : /// The [end] location is determined by adding [text] to [start].
27 : SourceMapSpan.identifier(SourceLocation start, String text)
28 0 : : this(
29 : start,
30 0 : new SourceLocation(start.offset + text.length,
31 0 : sourceUrl: start.sourceUrl,
32 0 : line: start.line,
33 0 : column: start.column + text.length),
34 : text,
35 : isIdentifier: true);
36 : }
37 :
38 : /// A wrapper aruond a [FileSpan] that implements [SourceMapSpan].
39 : class SourceMapFileSpan implements SourceMapSpan, FileSpan {
40 : final FileSpan _inner;
41 : final bool isIdentifier;
42 :
43 0 : SourceFile get file => _inner.file;
44 0 : FileLocation get start => _inner.start;
45 0 : FileLocation get end => _inner.end;
46 0 : String get text => _inner.text;
47 0 : String get context => _inner.context;
48 0 : Uri get sourceUrl => _inner.sourceUrl;
49 0 : int get length => _inner.length;
50 :
51 0 : SourceMapFileSpan(this._inner, {this.isIdentifier: false});
52 :
53 0 : int compareTo(SourceSpan other) => _inner.compareTo(other);
54 0 : String highlight({color}) => _inner.highlight(color: color);
55 0 : SourceSpan union(SourceSpan other) => _inner.union(other);
56 0 : FileSpan expand(FileSpan other) => _inner.expand(other);
57 : String message(String message, {color}) =>
58 0 : _inner.message(message, color: color);
59 : String toString() =>
60 0 : _inner.toString().replaceAll("FileSpan", "SourceMapFileSpan");
61 : }
|