Skip to content

Commit

Permalink
Version 3.7.0-62.0.dev
Browse files Browse the repository at this point in the history
Merge e288d38 into dev
  • Loading branch information
Dart CI committed Oct 24, 2024
2 parents 024c957 + e288d38 commit 7d218a2
Show file tree
Hide file tree
Showing 4 changed files with 87 additions and 5 deletions.
13 changes: 9 additions & 4 deletions pkg/analysis_server/lib/src/lsp/source_edits.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,12 @@ import 'package:analyzer/dart/ast/token.dart';
import 'package:analyzer/error/listener.dart';
import 'package:analyzer/source/line_info.dart';
import 'package:analyzer/source/source.dart';
import 'package:analyzer/src/dart/analysis/results.dart';
import 'package:analyzer/src/dart/scanner/reader.dart';
import 'package:analyzer/src/dart/scanner/scanner.dart';
import 'package:analyzer_plugin/protocol/protocol_common.dart' as plugin;
import 'package:dart_style/dart_style.dart';
import 'package:pub_semver/pub_semver.dart';

/// Checks whether a string contains only characters that are allowed to differ
/// between unformattedformatted code (such as whitespace, commas, semicolons).
Expand Down Expand Up @@ -97,17 +99,20 @@ ErrorOr<List<TextEdit>?> generateEditsForFormatting(
var effectivePageWidth =
result.analysisOptions.formatterOptions.pageWidth ?? defaultPageWidth;

var effectiveLanguageVersion = switch (result.unit.languageVersionToken) {
var token? => Version(token.major, token.minor, 0),
_ => (result as ParsedUnitResultImpl).fileState.packageLanguageVersion,
};

var code = SourceCode(unformattedSource);
SourceCode formattedResult;
try {
// Create a new formatter on every request because it may contain state that
// affects repeated formats.
// https://github.com/dart-lang/dart_style/issues/1337
var languageVersion =
result.unit.declaredElement?.library.languageVersion.effective ??
DartFormatter.latestLanguageVersion;
var formatter = DartFormatter(
pageWidth: effectivePageWidth, languageVersion: languageVersion);
pageWidth: effectivePageWidth,
languageVersion: effectiveLanguageVersion);
formattedResult = formatter.formatSource(code);
} on FormatterException {
// If the document fails to parse, just return no edits to avoid the
Expand Down
73 changes: 73 additions & 0 deletions pkg/analysis_server/test/lsp/source_edits_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,52 @@ void main() {

@reflectiveTest
class SourceEditsTest extends AbstractSingleUnitTest with LspEditHelpersMixin {
Future<void> test_format_version_defaultsToLatest() async {
// Latest version should parse and format records.
const startContent = '''
var a = (1, 2);
''';
const endContent = '''
var a = (1, 2);
''';
const expectedEdits = r'''
Delete 1:5-1:8
''';

await _assertFormatEdits(startContent, endContent, expectedEdits);
}

Future<void> test_format_version_languageVersionToken() async {
// 2.19 will not parse/format records.
const content = '''
// @dart = 2.19
var a = (1, 2);
''';

await _assertNoFormatEdits(content);
}

Future<void> test_format_version_packageConfig() async {
// 2.19 will not parse/format records.
writeTestPackageConfig(languageVersion: '2.19');
const content = '''
var a = (1, 2);
''';

await _assertNoFormatEdits(content);
}

Future<void> test_format_version_versionToken_overridesPackageConfig() async {
// 2.19 will not parse/format records.
writeTestPackageConfig(languageVersion: '3.0');
const content = '''
// @dart = 2.19
var a = (1, 2);
''';

await _assertNoFormatEdits(content);
}

Future<void> test_minimalEdits_comma_delete() async {
const startContent = '''
void f(int a,) {}
Expand Down Expand Up @@ -572,6 +618,26 @@ void g() {
);
}

/// Assert that generating edits to format [start] match those described
/// in [expected] and when applied, result in [end].
///
/// Edits will be automatically applied and verified. [expected] is to ensure
/// the edits are minimal and we didn't accidentally produces a single edit
/// replacing the entire file.
Future<void> _assertFormatEdits(
String start,
String end,
String expected, {
String? expectedFormatResult,
Range? range,
}) async {
await parseTestCode(start);
var edits =
generateEditsForFormatting(testParsedResult, range: range).result!;
expect(edits.toText().trim(), expected.trim());
expect(applyTextEdits(start, edits), expectedFormatResult ?? end);
}

/// Assert that computing minimal edits to convert [start] to [end] produces
/// the set of edits described in [expected].
///
Expand All @@ -595,6 +661,13 @@ void g() {
expect(edits.toText().trim(), expected);
expect(applyTextEdits(start, edits.result), expectedFormatResult ?? end);
}

/// Assert that formatting [content] produces no edits.
Future<void> _assertNoFormatEdits(String content) async {
await parseTestCode(content);
var edits = generateEditsForFormatting(testParsedResult).result;
expect(edits, isNull);
}
}

/// Helpers for building simple text representations of edits to verify that
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@

namespace dart {

#if !defined(TARGET_ARCH_IA32)

static int CountCheckBounds(FlowGraph* flow_graph) {
int checks = 0;
for (BlockIterator block_it = flow_graph->reverse_postorder_iterator();
Expand Down Expand Up @@ -105,4 +107,6 @@ ISOLATE_UNIT_TEST_CASE(BoundsCheckElimination_Pragma_learning_control) {
EXPECT_EQ(1, CountCheckBounds(flow_graph));
}

#endif // !defined(TARGET_ARCH_IA32)

} // namespace dart
2 changes: 1 addition & 1 deletion tools/VERSION
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,5 @@ CHANNEL dev
MAJOR 3
MINOR 7
PATCH 0
PRERELEASE 61
PRERELEASE 62
PRERELEASE_PATCH 0

0 comments on commit 7d218a2

Please sign in to comment.