Skip to content

Commit 3f6ff63

Browse files
DanTupCommit Queue
authored andcommitted
[analysis_server] Use only Parsed AST for format in legacy protocol handler
+ clean up LSP version to use new `unit.languageVersion.effective` Fixes #56960 Change-Id: Ia28f3ddb116427ecd8588f58adb7238a7204832a Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/391961 Reviewed-by: Brian Wilkerson <[email protected]> Reviewed-by: Bob Nystrom <[email protected]> Reviewed-by: Konstantin Shcheglov <[email protected]> Commit-Queue: Brian Wilkerson <[email protected]>
1 parent 6a94c61 commit 3f6ff63

File tree

2 files changed

+9
-29
lines changed

2 files changed

+9
-29
lines changed

pkg/analysis_server/lib/src/handler/legacy/edit_format.dart

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import 'package:analyzer_plugin/protocol/protocol_common.dart';
1212
import 'package:dart_style/src/dart_formatter.dart';
1313
import 'package:dart_style/src/exceptions.dart';
1414
import 'package:dart_style/src/source_code.dart';
15-
import 'package:pub_semver/pub_semver.dart';
1615

1716
/// The handler for the `edit.format` request.
1817
class EditFormatHandler extends LegacyHandler {
@@ -27,11 +26,9 @@ class EditFormatHandler extends LegacyHandler {
2726
clientUriConverter: server.uriConverter);
2827
var file = params.file;
2928

30-
String unformattedCode;
31-
try {
32-
var resource = server.resourceProvider.getFile(file);
33-
unformattedCode = resource.readAsStringSync();
34-
} catch (e) {
29+
var driver = server.getAnalysisDriver(file);
30+
var unit = driver?.parseFileSync(file);
31+
if (unit is! ParsedUnitResult) {
3532
sendResponse(Response.formatInvalidFile(request));
3633
return;
3734
}
@@ -45,29 +42,18 @@ class EditFormatHandler extends LegacyHandler {
4542
length = null;
4643
}
4744

45+
var unformattedCode = unit.content;
4846
var code = SourceCode(
4947
unformattedCode,
5048
selectionStart: start,
5149
selectionLength: length,
5250
);
5351

54-
var driver = server.getAnalysisDriver(file);
55-
var unit = await driver?.getResolvedUnit(file);
56-
57-
int? pageWidth;
58-
Version effectiveLanguageVersion;
59-
if (unit is ResolvedUnitResult) {
60-
pageWidth = unit.analysisOptions.formatterOptions.pageWidth;
61-
effectiveLanguageVersion = unit.libraryElement2.effectiveLanguageVersion;
62-
} else {
63-
// If the unit doesn't resolve, don't try to format it since we don't
64-
// know what language version (and thus what formatting style) to apply.
65-
sendResponse(Response.formatWithErrors(request));
66-
return;
67-
}
68-
52+
var effectivePageWidth =
53+
unit.analysisOptions.formatterOptions.pageWidth ?? params.lineLength;
54+
var effectiveLanguageVersion = unit.unit.languageVersion.effective;
6955
var formatter = DartFormatter(
70-
pageWidth: pageWidth ?? params.lineLength,
56+
pageWidth: effectivePageWidth,
7157
languageVersion: effectiveLanguageVersion);
7258
SourceCode formattedResult;
7359
try {

pkg/analysis_server/lib/src/lsp/source_edits.dart

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,10 @@ import 'package:analyzer/dart/ast/token.dart';
1313
import 'package:analyzer/error/listener.dart';
1414
import 'package:analyzer/source/line_info.dart';
1515
import 'package:analyzer/source/source.dart';
16-
import 'package:analyzer/src/dart/analysis/results.dart';
1716
import 'package:analyzer/src/dart/scanner/reader.dart';
1817
import 'package:analyzer/src/dart/scanner/scanner.dart';
1918
import 'package:analyzer_plugin/protocol/protocol_common.dart' as plugin;
2019
import 'package:dart_style/dart_style.dart';
21-
import 'package:pub_semver/pub_semver.dart';
2220

2321
/// Checks whether a string contains only characters that are allowed to differ
2422
/// between unformattedformatted code (such as whitespace, commas, semicolons).
@@ -98,11 +96,7 @@ ErrorOr<List<TextEdit>?> generateEditsForFormatting(
9896
// the LSP configuration.
9997
var effectivePageWidth =
10098
result.analysisOptions.formatterOptions.pageWidth ?? defaultPageWidth;
101-
102-
var effectiveLanguageVersion = switch (result.unit.languageVersionToken) {
103-
var token? => Version(token.major, token.minor, 0),
104-
_ => (result as ParsedUnitResultImpl).fileState.packageLanguageVersion,
105-
};
99+
var effectiveLanguageVersion = result.unit.languageVersion.effective;
106100

107101
var code = SourceCode(unformattedSource);
108102
SourceCode formattedResult;

0 commit comments

Comments
 (0)