Updated tool to use dart format when sdk >=2.10.0 (#110)
diff --git a/.travis.yml b/.travis.yml
index cd06229..e535a1a 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -21,7 +21,7 @@
- export PATH="/usr/lib/llvm-10/bin:$PATH"
before_script:
- - 'pub run ffigen:setup'
+ - 'dart pub run ffigen:setup'
- cd test/native_test && dart build_test_dylib.dart && cd ../..
matrix:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a59311b..7b452c5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,6 @@
+# 1.0.4
+- Updated code to use `dart format` instead of `dartfmt` for sdk version `>= 2.10.0`.
+
# 1.0.3
- Fixed errors due to extended ASCII and control characters in macro strings.
diff --git a/lib/src/code_generator/library.dart b/lib/src/code_generator/library.dart
index 978105e..e1d2390 100644
--- a/lib/src/code_generator/library.dart
+++ b/lib/src/code_generator/library.dart
@@ -8,6 +8,7 @@
import 'package:logging/logging.dart';
import 'package:meta/meta.dart';
import 'package:path/path.dart' as p;
+import 'package:pub_semver/pub_semver.dart';
import 'binding.dart';
import 'utils.dart';
import 'writer.dart';
@@ -96,15 +97,20 @@
/// Formats a file using `dartfmt`.
void _dartFmt(String path) {
- final dartFmt = p.join(getSdkPath(), 'bin', 'dartfmt');
- try {
- final result = Process.runSync(dartFmt, ['-w', path],
- runInShell: Platform.isWindows);
- if (result.stderr.toString().isNotEmpty) {
- _logger.severe(result.stderr);
- }
- } on ProcessException {
- _logger.severe("Couldn't format bindings, unable to call $dartFmt.");
+ final sdkPath = getSdkPath();
+ final versionAtleast2dot10 = Version.parse(
+ File(p.join(sdkPath, 'version')).readAsStringSync().trim()) >=
+ Version(2, 10, 0);
+
+ /// Starting from version `>=2.10.0` the dart sdk has a unified `dart` tool
+ /// So we call `dart format` instead of `dartfmt`.
+ final result = versionAtleast2dot10
+ ? Process.runSync(p.join(sdkPath, 'bin', 'dart'), ['format', path],
+ runInShell: Platform.isWindows)
+ : Process.runSync(p.join(sdkPath, 'bin', 'dartfmt'), ['-w', path],
+ runInShell: Platform.isWindows);
+ if (result.stderr.toString().isNotEmpty) {
+ _logger.severe(result.stderr);
}
}
diff --git a/pubspec.yaml b/pubspec.yaml
index 578efe9..a03c62e 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -3,7 +3,7 @@
# BSD-style license that can be found in the LICENSE file.
name: ffigen
-version: 1.0.3
+version: 1.0.4
homepage: https://github.com/dart-lang/ffigen
description: Experimental generator for FFI bindings, using LibClang to parse C header files.
@@ -20,6 +20,7 @@
glob: ^1.2.0
path: ^1.7.0
quiver: ^2.1.3
+ pub_semver: ^1.4.4
dev_dependencies:
pedantic: ^1.9.2