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

Side by Side Diff: pkg/compiler/lib/src/io/source_information.dart

Issue 2788373002: Add Source.getTextLine and use it to display source snippets in error messages. (Closed)
Patch Set: dartfmt Created 3 years, 8 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
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 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. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library dart2js.source_information; 5 library dart2js.source_information;
6 6
7 import 'package:kernel/ast.dart' show Location;
7 import '../common.dart'; 8 import '../common.dart';
8 import '../elements/elements.dart' 9 import '../elements/elements.dart'
9 show 10 show
10 AstElement, 11 AstElement,
11 CompilationUnitElement, 12 CompilationUnitElement,
12 LocalElement, 13 LocalElement,
13 ResolvedAst, 14 ResolvedAst,
14 ResolvedAstKind; 15 ResolvedAstKind;
15 import '../js/js.dart' show JavaScriptNodeSourceInformation; 16 import '../js/js.dart' show JavaScriptNodeSourceInformation;
16 import '../script.dart'; 17 import '../script.dart';
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
195 196
196 String toString() { 197 String toString() {
197 // Use 1-based line/column info to match usual dart tool output. 198 // Use 1-based line/column info to match usual dart tool output.
198 return '${sourceUri}:[${line + 1},${column + 1}]'; 199 return '${sourceUri}:[${line + 1},${column + 1}]';
199 } 200 }
200 } 201 }
201 202
202 /// A location in a source file. 203 /// A location in a source file.
203 abstract class AbstractSourceLocation extends SourceLocation { 204 abstract class AbstractSourceLocation extends SourceLocation {
204 final SourceFile _sourceFile; 205 final SourceFile _sourceFile;
205 int _line; 206 Location _location;
206 207
207 AbstractSourceLocation(this._sourceFile) { 208 AbstractSourceLocation(this._sourceFile) {
208 assert(invariant(new SourceSpan(sourceUri, 0, 0), isValid, 209 assert(invariant(new SourceSpan(sourceUri, 0, 0), isValid,
209 message: "Invalid source location in ${sourceUri}: " 210 message: "Invalid source location in ${sourceUri}: "
210 "offset=$offset, length=${_sourceFile.length}.")); 211 "offset=$offset, length=${_sourceFile.length}."));
211 } 212 }
212 213
213 /// The absolute URI of the source file of this source location. 214 /// The absolute URI of the source file of this source location.
214 Uri get sourceUri => _sourceFile.uri; 215 Uri get sourceUri => _sourceFile.uri;
215 216
216 /// The character offset of the this source location into the source file. 217 /// The character offset of the this source location into the source file.
217 int get offset; 218 int get offset;
218 219
219 /// The 0-based line number of the [offset]. 220 /// The 0-based line number of the [offset].
220 int get line { 221 int get line {
221 if (_line == null) _line = _sourceFile.getLine(offset); 222 _location ??= _sourceFile.getLocation(offset);
222 return _line; 223 return _location.line - 1;
223 } 224 }
224 225
225 /// The 0-base column number of the [offset] with its line. 226 /// The 0-base column number of the [offset] with its line.
226 int get column => _sourceFile.getColumn(line, offset); 227 int get column {
228 _location ??= _sourceFile.getLocation(offset);
229 return _location.column - 1;
230 }
227 231
228 /// The name associated with this source location, if any. 232 /// The name associated with this source location, if any.
229 String get sourceName; 233 String get sourceName;
230 234
231 /// `true` if the offset within the length of the source file. 235 /// `true` if the offset within the length of the source file.
232 bool get isValid => offset < _sourceFile.length; 236 bool get isValid => offset < _sourceFile.length;
233 237
234 String get shortText { 238 String get shortText {
235 // Use 1-based line/column info to match usual dart tool output. 239 // Use 1-based line/column info to match usual dart tool output.
236 return '${sourceUri.pathSegments.last}:[${line + 1},${column + 1}]'; 240 return '${sourceUri.pathSegments.last}:[${line + 1},${column + 1}]';
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 @override 338 @override
335 int get line => null; 339 int get line => null;
336 340
337 @override 341 @override
338 int get offset => null; 342 int get offset => null;
339 343
340 String get shortName => '<no-location>'; 344 String get shortName => '<no-location>';
341 345
342 String toString() => '<no-location>'; 346 String toString() => '<no-location>';
343 } 347 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698