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

Unified Diff: pkg/analyzer/lib/src/services/writer.dart

Issue 136983004: Line-break indenter plumbing. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 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 | « pkg/analyzer/lib/src/services/formatter_impl.dart ('k') | pkg/analyzer/test/services/formatter_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/lib/src/services/writer.dart
===================================================================
--- pkg/analyzer/lib/src/services/writer.dart (revision 31752)
+++ pkg/analyzer/lib/src/services/writer.dart (working copy)
@@ -10,9 +10,10 @@
final tokens = <LineToken>[];
final bool useTabs;
final int spacesPerIndent;
+ final int indent;
final LinePrinter printer;
- Line({indent: 0, this.useTabs: false, this.spacesPerIndent: 2,
+ Line({this.indent: 0, this.useTabs: false, this.spacesPerIndent: 2,
this.printer: const SimpleLinePrinter()}) {
if (indent > 0) {
_indent(indent);
@@ -54,20 +55,30 @@
}
+typedef String Indenter(int n);
+
+
/// A simple line breaking [LinePrinter]
class SimpleLineBreaker extends LinePrinter {
+ static final NO_OP_INDENTER = (n) => '';
+
final chunks = <Chunk>[];
final int maxLength;
+ Indenter indenter;
- SimpleLineBreaker(this.maxLength);
+ SimpleLineBreaker(this.maxLength, [this.indenter]) {
+ if (indenter == null) {
+ indenter = NO_OP_INDENTER;
+ }
+ }
String printLine(Line line) {
var buf = new StringBuffer();
var chunks = breakLine(line);
for (var i = 0; i < chunks.length; ++i) {
if (i > 0) {
- buf.write(indent(chunks[i]));
+ buf.write(indent(chunks[i], line.indent));
} else {
buf.write(chunks[i]);
}
@@ -75,9 +86,8 @@
return buf.toString();
}
- String indent(Chunk chunk) {
- return '\n' + chunk.toString();
- }
+ String indent(Chunk chunk, int level) =>
+ '\n' + indenter(level + 2) + chunk.toString();
List<Chunk> breakLine(Line line) {
@@ -245,8 +255,10 @@
LineToken _lastToken;
SourceWriter({this.indentCount: 0, this.lineSeparator: NEW_LINE,
- int maxLineLength: 80}) {
- linePrinter = new SimpleLineBreaker(maxLineLength);
+ bool useTabs: false, int spacesPerIndent: 2, int maxLineLength: 80}) {
+// linePrinter = new SimpleLineBreaker(maxLineLength, (n) =>
+// getIndentString(n, useTabs: useTabs, spacesPerIndent: spacesPerIndent));
+ linePrinter = new SimpleLinePrinter();
currentLine = new Line(indent: indentCount, printer: linePrinter);
}
@@ -347,8 +359,9 @@
];
-String getIndentString(int indentWidth, {bool useTabs: false}) =>
- useTabs ? getTabs(indentWidth) : getSpaces(indentWidth);
+String getIndentString(int indentWidth, {bool useTabs: false,
+ int spacesPerIndent: 2}) => useTabs ? getTabs(indentWidth) :
+ getSpaces(indentWidth * spacesPerIndent);
String getSpaces(int n) => n < SPACES.length ? SPACES[n] : repeat(' ', n);
« no previous file with comments | « pkg/analyzer/lib/src/services/formatter_impl.dart ('k') | pkg/analyzer/test/services/formatter_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698