From 6601b8056994b61ff52e49246f44964356b7fae0 Mon Sep 17 00:00:00 2001 From: magic-akari Date: Tue, 10 Dec 2024 15:46:44 +0800 Subject: [PATCH] feat: add language version support to formatting options --- extra/dart_fmt.d.ts | 1 + extra/dart_fmt.js | 3 +++ lib/binding.dart | 6 ++++-- lib/dart_fmt.dart | 11 +++++++++-- pubspec.yaml | 1 + 5 files changed, 18 insertions(+), 4 deletions(-) diff --git a/extra/dart_fmt.d.ts b/extra/dart_fmt.d.ts index 67556e4..5850092 100644 --- a/extra/dart_fmt.d.ts +++ b/extra/dart_fmt.d.ts @@ -3,6 +3,7 @@ export function format(input: string, filename: string, config?: LayoutConfig): interface LayoutConfig { line_width?: number; line_ending?: "lf" | "crlf"; + language_version?: string; } export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module; diff --git a/extra/dart_fmt.js b/extra/dart_fmt.js index be85bc5..57bf65b 100644 --- a/extra/dart_fmt.js +++ b/extra/dart_fmt.js @@ -70,6 +70,9 @@ export function format(source, filename = "stdin.dart", config = {}) { if (options.line_ending === "crlf") { options.lineEnding = "\r\n"; } + if(options.language_version) { + options.languageVersion = options.language_version; + } const result = dart_fmt(source, filename, JSON.stringify(options)); const err = result[0] === "x"; diff --git a/lib/binding.dart b/lib/binding.dart index d3adf0f..840464f 100644 --- a/lib/binding.dart +++ b/lib/binding.dart @@ -5,17 +5,19 @@ import 'package:dart_fmt/dart_fmt.dart'; class Options { final int? pageWidth; final String? lineEnding; + final String? languageVersion; Options.fromJson(Map json) : pageWidth = json['pageWidth'] as int?, - lineEnding = json['lineEnding'] as String?; + lineEnding = json['lineEnding'] as String?, + languageVersion = json['languageVersion'] as String?; } String formatWrapper(String source, String filename, String options) { final config = Options.fromJson(jsonDecode(options)); try { - return "o${format(source, filename, pageWidth: config.pageWidth, lineEnding: config.lineEnding)}"; + return "o${format(source, filename, pageWidth: config.pageWidth, lineEnding: config.lineEnding, version: config.languageVersion)}"; } catch (e) { return "x$e"; } diff --git a/lib/dart_fmt.dart b/lib/dart_fmt.dart index b7c844a..a338df8 100644 --- a/lib/dart_fmt.dart +++ b/lib/dart_fmt.dart @@ -1,7 +1,14 @@ import 'package:dart_style/dart_style.dart'; +import 'package:pub_semver/pub_semver.dart'; String format(String source, String filename, - {int? pageWidth, String? lineEnding}) { - final formatter = DartFormatter(pageWidth: pageWidth, lineEnding: lineEnding); + {int? pageWidth, String? lineEnding, String? version}) { + final languageVersion = version != null + ? Version.parse(version) + : DartFormatter.latestLanguageVersion; + final formatter = DartFormatter( + pageWidth: pageWidth, + lineEnding: lineEnding, + languageVersion: languageVersion); return formatter.format(source, uri: filename); } diff --git a/pubspec.yaml b/pubspec.yaml index 4126821..9edd974 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -9,6 +9,7 @@ environment: # Add regular dependencies here. dependencies: dart_style: ^2.3.7 + pub_semver: ^2.1.4 dev_dependencies: lints: ^5.0.0