| // 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'); |
| } |