OLD | NEW |
| (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 dart_style.src.source_code; | |
6 | |
7 /// Describes a chunk of source code that is to be formatted or has been | |
8 /// formatted. | |
9 class SourceCode { | |
10 /// The [uri] where the source code is from. | |
11 /// | |
12 /// Used in error messages if the code cannot be parsed. | |
13 final String uri; | |
14 | |
15 /// The Dart source code text. | |
16 final String text; | |
17 | |
18 /// Whether the source is a compilation unit or a bare statement. | |
19 final bool isCompilationUnit; | |
20 | |
21 /// The offset in [text] where the selection begins, or `null` if there is | |
22 /// no selection. | |
23 final int selectionStart; | |
24 | |
25 /// The number of selected characters or `null` if there is no selection. | |
26 final int selectionLength; | |
27 | |
28 /// Gets the source code before the beginning of the selection. | |
29 /// | |
30 /// If there is no selection, returns [text]. | |
31 String get textBeforeSelection { | |
32 if (selectionStart == null) return text; | |
33 return text.substring(0, selectionStart); | |
34 } | |
35 | |
36 /// Gets the selected source code, if any. | |
37 /// | |
38 /// If there is no selection, returns an empty string. | |
39 String get selectedText { | |
40 if (selectionStart == null) return ""; | |
41 return text.substring(selectionStart, selectionStart + selectionLength); | |
42 } | |
43 | |
44 /// Gets the source code following the selection. | |
45 /// | |
46 /// If there is no selection, returns an empty string. | |
47 String get textAfterSelection { | |
48 if (selectionStart == null) return ""; | |
49 return text.substring(selectionStart + selectionLength); | |
50 } | |
51 | |
52 SourceCode(this.text, | |
53 {this.uri, | |
54 this.isCompilationUnit: true, | |
55 this.selectionStart, | |
56 this.selectionLength}) { | |
57 // Must either provide both selection bounds or neither. | |
58 if ((selectionStart == null) != (selectionLength == null)) { | |
59 throw new ArgumentError( | |
60 "Is selectionStart is provided, selectionLength must be too."); | |
61 } | |
62 | |
63 if (selectionStart != null) { | |
64 if (selectionStart < 0) { | |
65 throw new ArgumentError("selectionStart must be non-negative."); | |
66 } | |
67 | |
68 if (selectionStart > text.length) { | |
69 throw new ArgumentError("selectionStart must be within text."); | |
70 } | |
71 } | |
72 | |
73 if (selectionLength != null) { | |
74 if (selectionLength < 0) { | |
75 throw new ArgumentError("selectionLength must be non-negative."); | |
76 } | |
77 | |
78 if (selectionStart + selectionLength > text.length) { | |
79 throw new ArgumentError("selectionLength must end within text."); | |
80 } | |
81 } | |
82 } | |
83 } | |
OLD | NEW |