blob: b8f1152f71b27f0f14fec2d90a5689d1f7561edd [file] [log] [blame]
// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
library source_maps.source_map_span;
import 'package:source_span/source_span.dart';
/// A [SourceSpan] for spans coming from or being written to source maps.
///
/// These spans have an extra piece of metadata: whether or not they represent
/// an identifier (see [isIdentifier]).
class SourceMapSpan extends SourceSpanBase {
/// Whether this span represents an identifier.
///
/// If this is `true`, [text] is the value of the identifier.
final bool isIdentifier;
SourceMapSpan(SourceLocation start, SourceLocation end, String text,
{this.isIdentifier = false})
: super(start, end, text);
/// Creates a [SourceMapSpan] for an identifier with value [text] starting at
/// [start].
///
/// The [end] location is determined by adding [text] to [start].
SourceMapSpan.identifier(SourceLocation start, String text)
: this(
start,
SourceLocation(start.offset + text.length,
sourceUrl: start.sourceUrl,
line: start.line,
column: start.column + text.length),
text,
isIdentifier: true);
}
/// A wrapper aruond a [FileSpan] that implements [SourceMapSpan].
class SourceMapFileSpan implements SourceMapSpan, FileSpan {
final FileSpan _inner;
@override
final bool isIdentifier;
@override
SourceFile get file => _inner.file;
@override
FileLocation get start => _inner.start;
@override
FileLocation get end => _inner.end;
@override
String get text => _inner.text;
@override
String get context => _inner.context;
@override
Uri get sourceUrl => _inner.sourceUrl;
@override
int get length => _inner.length;
SourceMapFileSpan(this._inner, {this.isIdentifier = false});
@override
int compareTo(SourceSpan other) => _inner.compareTo(other);
@override
String highlight({color}) => _inner.highlight(color: color);
@override
SourceSpan union(SourceSpan other) => _inner.union(other);
@override
FileSpan expand(FileSpan other) => _inner.expand(other);
@override
String message(String message, {color}) =>
_inner.message(message, color: color);
@override
String toString() =>
_inner.toString().replaceAll('FileSpan', 'SourceMapFileSpan');
}