Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(133)

Side by Side Diff: source_span/lib/src/location.dart

Issue 1400473008: Roll Observatory packages and add a roll script (Closed) Base URL: git@github.com:dart-lang/observatory_pub_packages.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « source_span/lib/src/file.dart ('k') | source_span/lib/src/location_mixin.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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_span.location;
6
7 import 'span.dart';
8
9 // TODO(nweiz): Use SourceLocationMixin once we decide to cut a release with
10 // breaking changes. See SourceLocationMixin for details.
11
12 /// A class that describes a single location within a source file.
13 ///
14 /// This class should not be extended. Instead, [SourceLocationBase] should be
15 /// extended instead.
16 class SourceLocation implements Comparable<SourceLocation> {
17 /// URL of the source containing this location.
18 ///
19 /// This may be null, indicating that the source URL is unknown or
20 /// unavailable.
21 final Uri sourceUrl;
22
23 /// The 0-based offset of this location in the source.
24 final int offset;
25
26 /// The 0-based line of this location in the source.
27 final int line;
28
29 /// The 0-based column of this location in the source
30 final int column;
31
32 /// Returns a representation of this location in the `source:line:column`
33 /// format used by text editors.
34 ///
35 /// This prints 1-based lines and columns.
36 String get toolString {
37 var source = sourceUrl == null ? 'unknown source' : sourceUrl;
38 return '$source:${line + 1}:${column + 1}';
39 }
40
41 /// Creates a new location indicating [offset] within [sourceUrl].
42 ///
43 /// [line] and [column] default to assuming the source is a single line. This
44 /// means that [line] defaults to 0 and [column] defaults to [offset].
45 ///
46 /// [sourceUrl] may be either a [String], a [Uri], or `null`.
47 SourceLocation(int offset, {sourceUrl, int line, int column})
48 : sourceUrl = sourceUrl is String ? Uri.parse(sourceUrl) : sourceUrl,
49 offset = offset,
50 line = line == null ? 0 : line,
51 column = column == null ? offset : column {
52 if (offset < 0) {
53 throw new RangeError("Offset may not be negative, was $offset.");
54 } else if (line != null && line < 0) {
55 throw new RangeError("Line may not be negative, was $line.");
56 } else if (column != null && column < 0) {
57 throw new RangeError("Column may not be negative, was $column.");
58 }
59 }
60
61 /// Returns the distance in characters between [this] and [other].
62 ///
63 /// This always returns a non-negative value.
64 int distance(SourceLocation other) {
65 if (sourceUrl != other.sourceUrl) {
66 throw new ArgumentError("Source URLs \"${sourceUrl}\" and "
67 "\"${other.sourceUrl}\" don't match.");
68 }
69 return (offset - other.offset).abs();
70 }
71
72 /// Returns a span that covers only a single point: this location.
73 SourceSpan pointSpan() => new SourceSpan(this, this, "");
74
75 /// Compares two locations.
76 ///
77 /// [other] must have the same source URL as [this].
78 int compareTo(SourceLocation other) {
79 if (sourceUrl != other.sourceUrl) {
80 throw new ArgumentError("Source URLs \"${sourceUrl}\" and "
81 "\"${other.sourceUrl}\" don't match.");
82 }
83 return offset - other.offset;
84 }
85
86 bool operator ==(other) =>
87 other is SourceLocation && sourceUrl == other.sourceUrl &&
88 offset == other.offset;
89
90 int get hashCode => sourceUrl.hashCode + offset;
91
92 String toString() => '<$runtimeType: $offset $toolString>';
93 }
94
95 /// A base class for source locations with [offset], [line], and [column] known
96 /// at construction time.
97 class SourceLocationBase extends SourceLocation {
98 SourceLocationBase(int offset, {sourceUrl, int line, int column})
99 : super(offset, sourceUrl: sourceUrl, line: line, column: column);
100 }
OLDNEW
« no previous file with comments | « source_span/lib/src/file.dart ('k') | source_span/lib/src/location_mixin.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698