Skip to content

Commit 784fdb4

Browse files
DanTupCommit Queue
authored andcommitted
[analysis_server] Move EOL from ChangeBuilder to FileEditBuilder
Because ChangeBuilder can be used to modify multiple files, the EOL should come from an individual files edit builder and not from the overall ChangeBuilder. This change renames `eol` on ChangeBuilder to `defaultEol` (since it's still useful to supply a custom default, for example when moving a class from an existing file to a new file, we want to default to the same EOL as the source file), and adds an EOL to file edit builders which is computed from the file content (and falls back to the default from ChangeBuilder if there are none). My intention here is to not introduce any breaking changes (yet) so the ChangeBuilder constructor interface still has the "eol" named parameter (marked as deprecated) as well as the new `defaultEol` parameter. I added a new `StringExtension` for `endOfLine` to both analyzer_plugin and analysis_server_plugin as we need this in both places (but I expect one of those projects will ultimately be dropped). This slightly differs from `CorrectionUtils.endOfLine` because it can return `null` which is a signal to fall back to the ChangeBuilder default instead of forcing its own default. (CorrectionUtils.endOfLine now uses that extension, although because of the null/default, it's likely that some - if not all - uses of this should migrate to the new extension and fall back to a default from a ChangeBuilder). Change-Id: Ie2e6eaba78c96a1cbd79eba881e12bbeef724aa8 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/443122 Reviewed-by: Brian Wilkerson <[email protected]> Commit-Queue: Brian Wilkerson <[email protected]> Reviewed-by: Samuel Rawlins <[email protected]>
1 parent 1692e68 commit 784fdb4

File tree

74 files changed

+345
-210
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

74 files changed

+345
-210
lines changed

pkg/analysis_server/lib/src/cider/rename.dart

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import 'package:analysis_server/src/services/refactoring/legacy/naming_conventio
99
import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
1010
import 'package:analysis_server/src/services/search/hierarchy.dart';
1111
import 'package:analysis_server/src/utilities/change_builder.dart';
12-
import 'package:analysis_server_plugin/edit/correction_utils.dart';
1312
import 'package:analyzer/dart/ast/ast.dart';
1413
import 'package:analyzer/dart/element/element.dart';
1514
import 'package:analyzer/source/line_info.dart';
@@ -377,7 +376,6 @@ class CheckNameResponse {
377376
return null;
378377
}
379378

380-
var utils = CorrectionUtils(resolvedUnit);
381379
var node = result.node;
382380
if (node is! NamedCompilationUnitMember) {
383381
return null;
@@ -391,7 +389,6 @@ class CheckNameResponse {
391389
constructorName: newName,
392390
isConst: node is EnumDeclaration,
393391
),
394-
eol: utils.endOfLine,
395392
);
396393
if (edit == null) {
397394
return null;

pkg/analysis_server/lib/src/lsp/handlers/commands/refactor_command_handler.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ class RefactorCommandHandler extends SimpleEditCommandHandler<AnalysisServer> {
115115
var producer = generator(context);
116116
var builder = ChangeBuilder(
117117
workspace: context.workspace,
118-
eol: context.utils.endOfLine,
118+
defaultEol: context.utils.endOfLine,
119119
);
120120
var status = await producer.compute(arguments, builder);
121121

pkg/analysis_server/lib/src/services/correction/dart/add_call_super.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,9 +94,11 @@ class AddCallSuper extends ResolvedCorrectionProducer {
9494
var expression = body.expression;
9595
var semicolon = body.semicolon;
9696
var prefix = utils.getLinePrefix(expression.offset);
97-
var prefixWithLine = eol + prefix + utils.oneIndent;
9897

9998
await builder.addDartFileEdit(file, (builder) {
99+
var eol = builder.eol;
100+
var prefixWithLine = eol + prefix + utils.oneIndent;
101+
100102
builder.addSimpleReplacement(
101103
range.startStart(body.functionDefinition, expression),
102104
'{${prefixWithLine}super.$_addition;${prefixWithLine}return ',

pkg/analysis_server/lib/src/services/correction/dart/add_eol_at_end_of_file.dart

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import 'package:analysis_server/src/services/correction/fix.dart';
66
import 'package:analysis_server_plugin/edit/dart/correction_producer.dart';
7+
import 'package:analysis_server_plugin/src/utilities/extensions/string_extension.dart';
78
import 'package:analyzer/source/source_range.dart';
89
import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
910
import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
@@ -22,9 +23,13 @@ class AddEolAtEndOfFile extends ResolvedCorrectionProducer {
2223
@override
2324
Future<void> compute(ChangeBuilder builder) async {
2425
var content = unitResult.content;
25-
if (!content.endsWith(eol)) {
26+
var eol = content.endOfLine;
27+
if (eol == null || !content.endsWith(eol)) {
2628
await builder.addDartFileEdit(file, (builder) {
27-
builder.addSimpleInsertion(content.length, eol);
29+
// Read the EOL off builder, because it is non-null and always has the
30+
// correct default, whereas the original variable could be null if the
31+
// file has no EOLs.
32+
builder.addSimpleInsertion(content.length, builder.eol);
2833
});
2934
} else {
3035
var index = content.length;

pkg/analysis_server/lib/src/services/correction/dart/add_leading_newline_to_string.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class AddLeadingNewlineToString extends ResolvedCorrectionProducer {
2929
}
3030

3131
await builder.addDartFileEdit(file, (builder) {
32+
var eol = builder.eol;
3233
builder.addSimpleInsertion(stringLiteral.contentsOffset, eol);
3334
});
3435
}

pkg/analysis_server/lib/src/services/correction/dart/add_override.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ class AddOverride extends ResolvedCorrectionProducer {
4242
var exitPosition = Position(file, token.offset - 1);
4343
var indent = utils.oneIndent;
4444
await builder.addDartFileEdit(file, (builder) {
45+
var eol = builder.eol;
4546
builder.addSimpleReplacement(
4647
range.startLength(token, 0),
4748
'@override$eol$indent',

pkg/analysis_server/lib/src/services/correction/dart/add_redeclare.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class AddRedeclare extends ResolvedCorrectionProducer {
2929
var token = member.firstTokenAfterCommentAndMetadata;
3030
var indent = utils.oneIndent;
3131
await builder.addDartFileEdit(file, (builder) {
32+
var eol = builder.eol;
3233
builder.addInsertion(token.offset, (builder) {
3334
builder.write('@');
3435
builder.writeImportedName([

pkg/analysis_server/lib/src/services/correction/dart/add_return_null.dart

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -45,20 +45,22 @@ class AddReturnNull extends ResolvedCorrectionProducer {
4545
} else {
4646
return;
4747
}
48-
int position;
49-
String returnStatement;
50-
if (block.statements.isEmpty) {
51-
position = block.offset + 1;
52-
var prefix = utils.getLinePrefix(block.offset);
53-
returnStatement = '$eol$prefix${utils.oneIndent}return null;$eol$prefix';
54-
} else {
55-
var lastStatement = block.statements.last;
56-
position = lastStatement.offset + lastStatement.length;
57-
var prefix = utils.getNodePrefix(lastStatement);
58-
returnStatement = '$eol${prefix}return null;';
59-
}
60-
6148
await builder.addDartFileEdit(file, (builder) {
49+
var eol = builder.eol;
50+
int position;
51+
String returnStatement;
52+
if (block.statements.isEmpty) {
53+
position = block.offset + 1;
54+
var prefix = utils.getLinePrefix(block.offset);
55+
returnStatement =
56+
'$eol$prefix${utils.oneIndent}return null;$eol$prefix';
57+
} else {
58+
var lastStatement = block.statements.last;
59+
position = lastStatement.offset + lastStatement.length;
60+
var prefix = utils.getNodePrefix(lastStatement);
61+
returnStatement = '$eol${prefix}return null;';
62+
}
63+
6264
builder.addInsertion(position, (builder) {
6365
builder.write(returnStatement);
6466
});

pkg/analysis_server/lib/src/services/correction/dart/add_switch_case_break.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class AddSwitchCaseBreak extends ResolvedCorrectionProducer {
4444

4545
await builder.addDartFileEdit(file, (builder) {
4646
builder.addInsertion(lastStatement.end, (builder) {
47-
builder.write(eol);
47+
builder.writeln();
4848
builder.write(utils.getNodePrefix(lastStatement));
4949
builder.write('break;');
5050
});

pkg/analysis_server/lib/src/services/correction/dart/convert_documentation_into_line.dart

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import 'package:_fe_analyzer_shared/src/scanner/token.dart';
66
import 'package:analysis_server/src/services/correction/assist.dart';
77
import 'package:analysis_server/src/services/correction/fix.dart';
88
import 'package:analysis_server_plugin/edit/dart/correction_producer.dart';
9+
import 'package:analysis_server_plugin/src/utilities/extensions/string_extension.dart';
910
import 'package:analyzer/dart/ast/ast.dart';
1011
import 'package:analyzer_plugin/utilities/assist/assist.dart';
1112
import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
@@ -39,7 +40,12 @@ class ConvertDocumentationIntoLine extends ParsedCorrectionProducer {
3940
return;
4041
}
4142
var text = token.lexeme;
42-
var lines = text.split(eol);
43+
var eol = text.endOfLine;
44+
var lines = eol != null ? text.split(eol) : [text];
45+
// To simplify the code below which builds prefixes with eols in the loop,
46+
// ensure we have a value. In the case of a single line (eol=null) these
47+
// eols are only assigned to variables and not used.
48+
eol ??= builder.defaultEol;
4349
var prefix = utils.getNodePrefix(comment);
4450
var newLines = <String>[];
4551
var firstLine = true;

0 commit comments

Comments
 (0)