DAS: Move CorrectionUtils.indentLeft and indentRight near their call sites
Cq-Include-Trybots: luci.dart.try:flutter-analyze-try,analyzer-win-release-try,pkg-win-release-try
Bug: https://github.com/dart-lang/sdk/issues/53402
Change-Id: Id62b06f3419820d4a74b34b51a6022792bcef7ab
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/363404
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Samuel Rawlins <srawlins@google.com>
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_switch_expression.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_switch_expression.dart
index 9d080ad..430be45 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_switch_expression.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_switch_expression.dart
@@ -270,6 +270,21 @@
return deletion;
}
+ /// Adds [level] indents to each line.
+ String indentRight(String text, {int level = 1}) {
+ var buffer = StringBuffer();
+ var indent = utils.oneIndent * level;
+ var eol = utils.endOfLine;
+ var lines = text.split(eol);
+ for (var line in lines) {
+ if (buffer.isNotEmpty) {
+ buffer.write(eol);
+ }
+ buffer.write('$indent$line');
+ }
+ return buffer.toString();
+ }
+
bool isEffectivelyExhaustive(SwitchStatement node, DartType? expressionType) {
if (expressionType == null) return false;
if ((typeSystem as TypeSystemImpl).isAlwaysExhaustive(expressionType)) {
@@ -420,7 +435,7 @@
switch (indentation) {
case _IndentationFullFirstRightAll():
- var indentedText = utils.indentRight(
+ var indentedText = indentRight(
nextLinePrefix + text,
level: indentation.level,
);
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_comparison.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_comparison.dart
index a9f0b03..b08b2a5 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_comparison.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_comparison.dart
@@ -86,10 +86,33 @@
}
}
+ /// Splits [text] into lines, and removes one level of indent from each line.
+ ///
+ /// Lines that don't start with indentation are left as is.
+ String indentLeft(String text) {
+ var buffer = StringBuffer();
+ var indent = utils.oneIndent;
+ var eol = utils.endOfLine;
+ var lines = text.split(eol);
+ for (var line in lines) {
+ if (buffer.isNotEmpty) {
+ buffer.write(eol);
+ }
+ String updatedLine;
+ if (line.startsWith(indent)) {
+ updatedLine = line.substring(indent.length);
+ } else {
+ updatedLine = line;
+ }
+ buffer.write(updatedLine);
+ }
+ return buffer.toString();
+ }
+
Future<void> _ifElement(IfElement node, ChangeBuilder builder) async {
Future<void> replaceWithElement(CollectionElement element) async {
var text = _textWithLeadingComments(element);
- var unIndented = utils.indentLeft(text);
+ var unIndented = indentLeft(text);
await builder.addDartFileEdit(file, (builder) {
builder.addSimpleReplacement(range.node(node), unIndented);
});
@@ -123,7 +146,7 @@
),
),
);
- var unIndented = utils.indentLeft(text);
+ var unIndented = indentLeft(text);
await builder.addDartFileEdit(file, (builder) {
builder.addSimpleReplacement(
utils.getLinesRangeStatements([node]),
@@ -134,7 +157,7 @@
Future<void> replaceWithStatement(Statement replacement) async {
var text = _textWithLeadingComments(replacement);
- var unIndented = utils.indentLeft(text);
+ var unIndented = indentLeft(text);
await builder.addDartFileEdit(file, (builder) {
builder.addSimpleReplacement(range.node(node), unIndented);
});
diff --git a/pkg/analysis_server/lib/src/services/correction/util.dart b/pkg/analysis_server/lib/src/services/correction/util.dart
index 6278715..e71c93a 100644
--- a/pkg/analysis_server/lib/src/services/correction/util.dart
+++ b/pkg/analysis_server/lib/src/services/correction/util.dart
@@ -393,14 +393,14 @@
static const String _twoIndents = _oneIndent + _oneIndent;
- final CompilationUnit unit;
+ final CompilationUnit _unit;
final String _buffer;
String? _endOfLine;
CorrectionUtils(ParsedUnitResult result)
- : unit = result.unit,
+ : _unit = result.unit,
_buffer = result.content;
/// The EOL sequence to use for this [CompilationUnit].
@@ -426,7 +426,7 @@
String get twoIndents => _twoIndents;
/// Returns the [AstNode] that encloses the given offset.
- AstNode? findNode(int offset) => NodeLocator(offset).searchWithin(unit);
+ AstNode? findNode(int offset) => NodeLocator(offset).searchWithin(_unit);
/// Skips whitespace characters and single EOL on the right from [index].
///
@@ -524,7 +524,7 @@
// end
var endOffset = sourceRange.end;
var afterEndLineOffset = endOffset;
- var lineInfo = unit.lineInfo;
+ var lineInfo = _unit.lineInfo;
var lineStart = lineInfo
.getOffsetOfLine(lineInfo.getLocation(startLineOffset).lineNumber - 1);
if (lineStart == startLineOffset) {
@@ -597,43 +597,6 @@
return _buffer.substring(offset, offset + length);
}
- /// Splits [text] into lines, and removes one level of indent from each line.
- /// Lines that don't start with indentation are left as is.
- String indentLeft(String text) {
- var buffer = StringBuffer();
- var indent = oneIndent;
- var eol = endOfLine;
- var lines = text.split(eol);
- for (var line in lines) {
- if (buffer.isNotEmpty) {
- buffer.write(eol);
- }
- String updatedLine;
- if (line.startsWith(indent)) {
- updatedLine = line.substring(indent.length);
- } else {
- updatedLine = line;
- }
- buffer.write(updatedLine);
- }
- return buffer.toString();
- }
-
- /// Adds [level] indents to each line.
- String indentRight(String text, {int level = 1}) {
- var buffer = StringBuffer();
- var indent = _oneIndent * level;
- var eol = endOfLine;
- var lines = text.split(eol);
- for (var line in lines) {
- if (buffer.isNotEmpty) {
- buffer.write(eol);
- }
- buffer.write('$indent$line');
- }
- return buffer.toString();
- }
-
/// Indents given source left or right.
String indentSourceLeftRight(String source, {bool indentLeft = true}) {
var sb = StringBuffer();
@@ -682,7 +645,7 @@
// prepare STRING token ranges
var lineRanges = <SourceRange>[];
{
- var tokens = TokenUtils.getTokens(source, unit.featureSet);
+ var tokens = TokenUtils.getTokens(source, _unit.featureSet);
for (var token in tokens) {
if (token.type == TokenType.STRING) {
lineRanges.add(range.token(token));
@@ -838,7 +801,7 @@
return true;
}
// may be comment
- return TokenUtils.getTokens(trimmedText, unit.featureSet).isEmpty;
+ return TokenUtils.getTokens(trimmedText, _unit.featureSet).isEmpty;
}
/// Return `true` if [selection] covers [range] and there are any