From b471224aadefc6afe1e99ebaa366bf7b0b51b3d1 Mon Sep 17 00:00:00 2001 From: Yegor Jbanov Date: Thu, 12 Dec 2024 14:58:53 -0800 Subject: [PATCH 1/3] [web] allows imports to line-break --- lib/web_ui/lib/src/engine/renderer.dart | 34 ++++++++++++++++--------- web_sdk/sdk_rewriter.dart | 1 + web_sdk/test/sdk_rewriter_test.dart | 28 ++++++++++++++++++++ 3 files changed, 51 insertions(+), 12 deletions(-) diff --git a/lib/web_ui/lib/src/engine/renderer.dart b/lib/web_ui/lib/src/engine/renderer.dart index aa3e8bfc9be66..9bd017994c303 100644 --- a/lib/web_ui/lib/src/engine/renderer.dart +++ b/lib/web_ui/lib/src/engine/renderer.dart @@ -8,7 +8,8 @@ import 'dart:math' as math; import 'dart:typed_data'; import 'package:ui/src/engine.dart'; -import 'package:ui/src/engine/skwasm/skwasm_impl.dart' if (dart.library.html) 'package:ui/src/engine/skwasm/skwasm_stub.dart'; +import 'package:ui/src/engine/skwasm/skwasm_impl.dart' + if (dart.library.html) 'package:ui/src/engine/skwasm/skwasm_stub.dart'; import 'package:ui/ui.dart' as ui; import 'package:ui/ui_web/src/ui_web.dart' as ui_web; @@ -43,11 +44,12 @@ abstract class Renderer { if (!useCanvasKit) { // The user requested 'html' or 'auto' either in the command-line or JS. final String requested = - configuration.requestedRendererType ?? - (FlutterConfiguration.flutterWebAutoDetect ? 'auto' : 'html'); + configuration.requestedRendererType ?? + (FlutterConfiguration.flutterWebAutoDetect ? 'auto' : 'html'); printWarning( 'The HTML Renderer is being deprecated. Stop using the "$requested" renderer mode.' - '\nSee: https://docs.flutter.dev/to/web-html-renderer-deprecation'); + '\nSee: https://docs.flutter.dev/to/web-html-renderer-deprecation', + ); } return true; }()); @@ -120,14 +122,18 @@ abstract class Renderer { ui.ImageFilter createBlurImageFilter({ double sigmaX = 0.0, double sigmaY = 0.0, - ui.TileMode? tileMode}); - ui.ImageFilter createDilateImageFilter({ double radiusX = 0.0, double radiusY = 0.0}); - ui.ImageFilter createErodeImageFilter({ double radiusX = 0.0, double radiusY = 0.0}); + ui.TileMode? tileMode, + }); + ui.ImageFilter createDilateImageFilter({double radiusX = 0.0, double radiusY = 0.0}); + ui.ImageFilter createErodeImageFilter({double radiusX = 0.0, double radiusY = 0.0}); ui.ImageFilter createMatrixImageFilter( Float64List matrix4, { - ui.FilterQuality filterQuality = ui.FilterQuality.low + ui.FilterQuality filterQuality = ui.FilterQuality.low, + }); + ui.ImageFilter composeImageFilters({ + required ui.ImageFilter outer, + required ui.ImageFilter inner, }); - ui.ImageFilter composeImageFilters({required ui.ImageFilter outer, required ui.ImageFilter inner}); Future instantiateImageCodec( Uint8List list, { @@ -143,8 +149,12 @@ abstract class Renderer { FutureOr createImageFromImageBitmap(DomImageBitmap imageSource); - FutureOr createImageFromTextureSource(JSAny object, - {required int width, required int height, required bool transferOwnership}); + FutureOr createImageFromTextureSource( + JSAny object, { + required int width, + required int height, + required bool transferOwnership, + }); void decodeImageFromPixels( Uint8List pixels, @@ -155,7 +165,7 @@ abstract class Renderer { int? rowBytes, int? targetWidth, int? targetHeight, - bool allowUpscaling = true + bool allowUpscaling = true, }); ui.ImageShader createImageShader( diff --git a/web_sdk/sdk_rewriter.dart b/web_sdk/sdk_rewriter.dart index bb69a4cdaf471..5a0e36c9a8766 100644 --- a/web_sdk/sdk_rewriter.dart +++ b/web_sdk/sdk_rewriter.dart @@ -79,6 +79,7 @@ List generatePartsPatterns(String libraryName, bool isPublic) { // Remove library directives. AllReplacer(RegExp(r'\nlibrary .+;'), ''), // Remove imports/exports from all part files. + AllReplacer(RegExp(r"\nimport '.+'\n\s*if \(dart.library.html\) '.*';"), ''), AllReplacer(RegExp(r'\nimport\s*.*'), ''), AllReplacer(RegExp(r'\nexport\s*.*'), ''), AllReplacer(RegExp(r'\n@DefaultAsset(.*)'), ''), diff --git a/web_sdk/test/sdk_rewriter_test.dart b/web_sdk/test/sdk_rewriter_test.dart index cc1eae42607c8..94d002fb4100a 100644 --- a/web_sdk/test/sdk_rewriter_test.dart +++ b/web_sdk/test/sdk_rewriter_test.dart @@ -192,4 +192,32 @@ void printSomething() { expect(getExtraImportsForLibrary('web_test_fonts'), isEmpty); expect(getExtraImportsForLibrary('web_locale_keymap'), isEmpty); }); + + test('allows imports to line-break', () { + const String source = ''' +import 'package:some_package/some_package.dart'; +import 'package:ui/src/engine/skwasm/skwasm_impl.dart' + if (dart.library.html) 'package:ui/src/engine/skwasm/skwasm_stub.dart'; +import 'package:some_package/some_package' as some_package; + +void printSomething() { + print('something'); +} +'''; + + const String expected = ''' +part of dart._engine; + +void printSomething() { + print('something'); +} +'''; + + final String result = processSource( + source, + (String source) => preprocessPartFile(source, 'engine'), + generatePartsPatterns('engine', false), + ); + expect(result, expected); + }); } From 81816cc81435bc1bc3b7e86112620a93cfa23fd3 Mon Sep 17 00:00:00 2001 From: Yegor Jbanov Date: Thu, 12 Dec 2024 16:19:54 -0800 Subject: [PATCH 2/3] allow other conditional imports --- web_sdk/sdk_rewriter.dart | 2 +- web_sdk/test/sdk_rewriter_test.dart | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/web_sdk/sdk_rewriter.dart b/web_sdk/sdk_rewriter.dart index 5a0e36c9a8766..d2a454a430787 100644 --- a/web_sdk/sdk_rewriter.dart +++ b/web_sdk/sdk_rewriter.dart @@ -79,7 +79,7 @@ List generatePartsPatterns(String libraryName, bool isPublic) { // Remove library directives. AllReplacer(RegExp(r'\nlibrary .+;'), ''), // Remove imports/exports from all part files. - AllReplacer(RegExp(r"\nimport '.+'\n\s*if \(dart.library.html\) '.*';"), ''), + AllReplacer(RegExp(r"\nimport '.+'\n\s*if \(dart\.library\..*\) '.*';"), ''), AllReplacer(RegExp(r'\nimport\s*.*'), ''), AllReplacer(RegExp(r'\nexport\s*.*'), ''), AllReplacer(RegExp(r'\n@DefaultAsset(.*)'), ''), diff --git a/web_sdk/test/sdk_rewriter_test.dart b/web_sdk/test/sdk_rewriter_test.dart index 94d002fb4100a..ec98c84a57bff 100644 --- a/web_sdk/test/sdk_rewriter_test.dart +++ b/web_sdk/test/sdk_rewriter_test.dart @@ -198,6 +198,8 @@ void printSomething() { import 'package:some_package/some_package.dart'; import 'package:ui/src/engine/skwasm/skwasm_impl.dart' if (dart.library.html) 'package:ui/src/engine/skwasm/skwasm_stub.dart'; +import 'package:ui/src/engine/skwasm/skwasm_impl.dart' + if (dart.library.js_interop) 'package:ui/src/engine/skwasm/skwasm_stub.dart'; import 'package:some_package/some_package' as some_package; void printSomething() { From 18534c8adbaadaafc2aedcbf5d008369e444bd03 Mon Sep 17 00:00:00 2001 From: Yegor Jbanov Date: Fri, 13 Dec 2024 09:59:31 -0800 Subject: [PATCH 3/3] allow multi-line imports in js_access_test.dart --- web_sdk/test/js_access_test.dart | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/web_sdk/test/js_access_test.dart b/web_sdk/test/js_access_test.dart index 0500284dcca77..18c7b23b23f28 100644 --- a/web_sdk/test/js_access_test.dart +++ b/web_sdk/test/js_access_test.dart @@ -60,22 +60,6 @@ export 'foo.dart'; expect(result.violations, isEmpty); } - // Multi-line imports should fail. - { - final _CheckResult result = _checkFile( - File('lib/web_ui/lib/src/engine/alarm_clock.dart'), -''' -import 'dart:async'; -import 'package:ui/ui.dart' - as ui; -''', - ); - expect(result.failed, isTrue); - expect(result.violations, [ - "on line 2: import is broken up into multiple lines: import 'package:ui/ui.dart'", - ]); - } - // A library that doesn't directly access JavaScript API should pass. expect( _checkFile( @@ -180,12 +164,6 @@ _CheckResult _checkFile(File dartFile, String code) { continue; } - final bool isProperlyFormattedImport = line.endsWith(';'); - if (!isProperlyFormattedImport) { - violations.add('on line $lineNumber: import is broken up into multiple lines: $line'); - continue; - } - if (line.contains('"')) { violations.add('on line $lineNumber: import is using double quotes instead of single quotes: $line'); continue;