Improve logs (#87)
* Added fallback to flutter format if dartfmt is not found
* added red color for severe, green for success in log printing
* Only catch ProcessException when calling dartfmt
* used package:cli_utils for finding dart_sdk and ansi colors
* use path.join
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5db8023..5fc842d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,6 @@
+# 0.2.3+2
+- Handle code formatting using dartfmt by finding dart-sdk.
+
# 0.2.3+1
- Fixed missing typedefs of nested function pointers.
diff --git a/bin/ffigen.dart b/bin/ffigen.dart
index d0b2ee1..74021be 100644
--- a/bin/ffigen.dart
+++ b/bin/ffigen.dart
@@ -6,6 +6,7 @@
import 'dart:io';
import 'package:args/args.dart';
+import 'package:cli_util/cli_logging.dart' show Ansi;
import 'package:ffigen/ffigen.dart';
import 'package:logging/logging.dart';
import 'package:yaml/yaml.dart' as yaml;
@@ -13,6 +14,15 @@
import 'setup.dart';
var _logger = Logger('ffigen.ffigen');
+final _ansi = Ansi(Ansi.terminalSupportsAnsi);
+
+String successPen(String str) {
+ return '${_ansi.green}$str${_ansi.none}';
+}
+
+String errorPen(String str) {
+ return '${_ansi.red}$str${_ansi.none}';
+}
void main(List<String> args) {
// Parses the cmd args. This will print usage and exit if --help was passed.
@@ -45,7 +55,8 @@
// Generate file for the parsed bindings.
final gen = File(config.output);
library.generateFile(gen);
- _logger.info('Finished, Bindings generated in ${gen?.absolute?.path}');
+ _logger.info(
+ successPen('Finished, Bindings generated in ${gen?.absolute?.path}'));
}
Config getConfig(ArgResults result) {
@@ -173,16 +184,27 @@
}
// Setup logger for printing (if verbosity was set by user).
Logger.root.onRecord.listen((record) {
- print('${record.level.name.padRight(8)}: ${record.message}');
+ final level = '[${record.level.name}]'.padRight(9);
+ printLog('${level}: ${record.message}', record.level);
});
} else {
// Setup logger for printing (if verbosity was not set by user).
Logger.root.onRecord.listen((record) {
if (record.level.value > Level.INFO.value) {
- print(' ${record.level.name.padRight(8)}: ${record.message}');
+ final level = '[${record.level.name}]'.padRight(9);
+ printLog('${level}: ${record.message}', record.level);
} else {
- print(record.message);
+ printLog(record.message, record.level);
}
});
}
}
+
+void printLog(String log, Level level) {
+ // Prints text in red for Severe logs only.
+ if (level < Level.SEVERE) {
+ print(log);
+ } else {
+ print(errorPen(log));
+ }
+}
diff --git a/lib/src/code_generator/library.dart b/lib/src/code_generator/library.dart
index 10b73a9..9503ee6 100644
--- a/lib/src/code_generator/library.dart
+++ b/lib/src/code_generator/library.dart
@@ -4,9 +4,10 @@
import 'dart:io';
+import 'package:cli_util/cli_util.dart';
import 'package:logging/logging.dart';
import 'package:meta/meta.dart';
-
+import 'package:path/path.dart' as p;
import 'binding.dart';
import 'utils.dart';
import 'writer.dart';
@@ -93,10 +94,15 @@
/// Formats a file using `dartfmt`.
void _dartFmt(String path) {
- final result = Process.runSync('dartfmt', ['-w', path],
- runInShell: Platform.isWindows);
- if (result.stderr.toString().isNotEmpty) {
- _logger.severe(result.stderr);
+ 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.");
}
}
diff --git a/pubspec.yaml b/pubspec.yaml
index f87d8eb..1db827c 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: 0.2.3+1
+version: 0.2.3+2
homepage: https://github.com/dart-lang/ffigen
description: Experimental generator for FFI bindings, using LibClang to parse C/C++ header files.
@@ -16,6 +16,7 @@
meta: ^1.1.8
args: ^1.6.0
logging: ^0.11.4
+ cli_util: ^0.2.0
glob: ^1.2.0
path: ^1.7.0
quiver: ^2.1.3