Skip to content

Commit

Permalink
Pass a language version to DartFormatter().
Browse files Browse the repository at this point in the history
We're in [the process of](dart-lang/dart_style#1403) moving dart_style to [a new formatting style](dart-lang/dart_style#1253). That involves making the formatter [aware of the language version of what it's formatting](dart-lang/dart_style#1402).

That in turn means that the library API now lets you pass in a language version. In dart_style 2.3.7 [you can pass in a language version but the parameter is optional](https://pub.dev/documentation/dart_style/latest/dart_style/DartFormatter/DartFormatter.html). In the forthcoming 3.0.0 release, that parameter will become mandatory.

This updates the two calls to `DartFormatter()` in intl_translation/bin to pass in a language version. It attempts to look for a surrounding package_config.json file and uses the language version from that (which is what other Dart tools do). If that files, it just defaults to using the latest language version that the formatter supports.
  • Loading branch information
munificent committed Oct 25, 2024
1 parent f30ad0f commit f9f3ade
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 4 deletions.
9 changes: 7 additions & 2 deletions pkgs/intl_translation/bin/make_examples_const.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,11 @@ import 'dart:io';

import 'package:args/args.dart';
import 'package:dart_style/dart_style.dart';
import 'package:intl_translation/src/language_version.dart';
import 'package:intl_translation/src/message_rewriter.dart';
import 'package:intl_translation/src/messages/main_message.dart';

void main(List<String> args) {
Future<void> main(List<String> args) async {
var parser = ArgParser();
var rest = parser.parse(args).rest;
if (rest.isEmpty) {
Expand All @@ -24,7 +25,6 @@ void main(List<String> args) {
exit(0);
}

var formatter = DartFormatter();
for (var inputFile in rest) {
var outputFile = inputFile;
var file = File(inputFile);
Expand All @@ -35,6 +35,11 @@ void main(List<String> args) {
} else {
print('Writing new source to $outputFile');
var out = File(outputFile);

var languageVersion = (await findPackageLanguageVersion(file)) ??
DartFormatter.latestLanguageVersion;
var formatter = DartFormatter(languageVersion: languageVersion);

out.writeAsStringSync(formatter.format(newSource));
}
}
Expand Down
9 changes: 7 additions & 2 deletions pkgs/intl_translation/bin/rewrite_intl_messages.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,15 @@ import 'dart:io';

import 'package:args/args.dart';
import 'package:dart_style/dart_style.dart';
import 'package:intl_translation/src/language_version.dart';
import 'package:intl_translation/src/message_rewriter.dart';

String? outputFileOption = 'transformed_output.dart';

bool useStringSubstitution = true;
bool replace = false;

void main(List<String> args) {
Future<void> main(List<String> args) async {
var parser = ArgParser();
parser.addOption('output',
defaultsTo: 'transformed_output.dart',
Expand Down Expand Up @@ -55,7 +56,6 @@ void main(List<String> args) {
exit(0);
}

var formatter = DartFormatter();
for (var inputFile in rest) {
var outputFile = replace ? inputFile : outputFileOption;
var file = File(inputFile);
Expand All @@ -67,6 +67,11 @@ void main(List<String> args) {
} else {
print('Writing new source to $outputFile');
var out = File(outputFile!);

var languageVersion = (await findPackageLanguageVersion(file)) ??
DartFormatter.latestLanguageVersion;
var formatter = DartFormatter(languageVersion: languageVersion);

out.writeAsStringSync(formatter.format(newSource));
}
}
Expand Down
25 changes: 25 additions & 0 deletions pkgs/intl_translation/lib/src/language_version.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:async';
import 'dart:io';

import 'package:package_config/package_config.dart';
import 'package:pub_semver/pub_semver.dart';

/// Looks for a package surrounding [file] and, if found, returns the default
/// language version specified by that package.
Future<Version?> findPackageLanguageVersion(File file) async {
try {
var config = await findPackageConfig(file.parent);
if (config?.packageOf(file.absolute.uri)?.languageVersion
case var languageVersion?) {
return Version(languageVersion.major, languageVersion.minor, 0);
}
} catch (error) {
// If we fail to find or read a config, just silently do nothing and
// default to the latest language version.
}

return null;
}
2 changes: 2 additions & 0 deletions pkgs/intl_translation/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@ dependencies:
args: ^2.0.0
dart_style: ^2.0.0
intl: '>=0.18.0 <0.20.0'
package_config: ^2.1.0
path: ^1.0.0
pub_semver: '>=1.4.4 <3.0.0'

dev_dependencies:
lints: ^4.0.0
Expand Down

0 comments on commit f9f3ade

Please sign in to comment.