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

Unified Diff: lib/src/chunk.dart

Issue 822273004: Add API to provide a selection range, and return the updated selection after formatting. (Closed) Base URL: https://github.com/dart-lang/dart_style.git@master
Patch Set: Remove redundant argument check. Created 5 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « benchmark/benchmark.dart ('k') | lib/src/dart_formatter.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/src/chunk.dart
diff --git a/lib/src/chunk.dart b/lib/src/chunk.dart
index ffa96dbb486d89469ecd699804df6bf11472c0f9..f4e46da347b9bc2f5b3f46af1ef97b92d544620a 100644
--- a/lib/src/chunk.dart
+++ b/lib/src/chunk.dart
@@ -6,6 +6,43 @@ library dart_style.src.chunk;
import 'debug.dart';
+/// Tracks where a selection start or end point may appear in some piece of
+/// text.
+abstract class Selection {
+ /// The chunk of text.
+ String get text;
+
+ /// The offset from the beginning of [text] where the selection starts, or
+ /// `null` if the selection does not start within this chunk.
+ int get selectionStart => _selectionStart;
+ int _selectionStart;
+
+ /// The offset from the beginning of [text] where the selection ends, or
+ /// `null` if the selection does not start within this chunk.
+ int get selectionEnd => _selectionEnd;
+ int _selectionEnd;
+
+ /// Sets [selectionStart] to be [start] characters into [text].
+ void startSelection(int start) {
+ _selectionStart = start;
+ }
+
+ /// Sets [selectionStart] to be [fromEnd] characters from the end of [text].
+ void startSelectionFromEnd(int fromEnd) {
+ _selectionStart = text.length - fromEnd;
+ }
+
+ /// Sets [selectionEnd] to be [end] characters into [text].
+ void endSelection(int end) {
+ _selectionEnd = end;
+ }
+
+ /// Sets [selectionEnd] to be [fromEnd] characters from the end of [text].
+ void endSelectionFromEnd(int fromEnd) {
+ _selectionEnd = text.length - fromEnd;
+ }
+}
+
/// A chunk of non-breaking output text terminated by a hard or soft newline.
///
/// Chunks are created by [LineWriter] and fed into [LineSplitter]. Each
@@ -27,7 +64,7 @@ import 'debug.dart';
///
/// A split controls the leading spacing of the subsequent line, both
/// block-based [indent] and expression-wrapping-based [nesting].
-class Chunk {
+class Chunk extends Selection {
/// The literal text output for the chunk.
String get text => _text;
String _text;
@@ -279,3 +316,29 @@ class Span {
return result + ")";
}
}
+
+/// A comment in the source, with a bit of information about the surrounding
+/// whitespace.
+class SourceComment extends Selection {
+ /// The text of the comment, including `//`, `/*`, and `*/`.
+ final String text;
+
+ /// The number of newlines between the comment or token preceding this comment
+ /// and the beginning of this one.
+ ///
+ /// Will be zero if the comment is a trailing one.
+ final int linesBefore;
+
+ /// Whether this comment is a line comment.
+ final bool isLineComment;
+
+ /// Whether this comment starts at column one in the source.
+ ///
+ /// Comments that start at the start of the line will not be indented in the
+ /// output. This way, commented out chunks of code do not get erroneously
+ /// re-indented.
+ final bool isStartOfLine;
+
+ SourceComment(this.text, this.linesBefore,
+ {this.isLineComment, this.isStartOfLine});
+}
« no previous file with comments | « benchmark/benchmark.dart ('k') | lib/src/dart_formatter.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698