diff --git a/.cloud_build/dart_services.yaml b/.cloud_build/dart_services.yaml index 50434c976..0c5a720f4 100644 --- a/.cloud_build/dart_services.yaml +++ b/.cloud_build/dart_services.yaml @@ -73,6 +73,8 @@ steps: - PROJECT_ID=$PROJECT_ID - --build-arg - FLUTTER_CHANNEL=${_FLUTTER_CHANNEL} + - --build-arg + - BUILD_SHA=${SHORT_SHA} - . dir: pkgs/dart_services diff --git a/.github/workflows/dart_pad.yml b/.github/workflows/dart_pad.yml index 366af5a06..b0949721f 100644 --- a/.github/workflows/dart_pad.yml +++ b/.github/workflows/dart_pad.yml @@ -35,7 +35,7 @@ jobs: - uses: dart-lang/setup-dart@b64355ae6ca0b5d484f0106a033dd1388965d06d with: sdk: ${{ matrix.sdk }} - - uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65 + - uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 - name: Install dart dependencies run: dart pub get diff --git a/.github/workflows/no-response.yml b/.github/workflows/no-response.yml index dd7bbbc00..1a6f2ecdd 100644 --- a/.github/workflows/no-response.yml +++ b/.github/workflows/no-response.yml @@ -19,7 +19,7 @@ jobs: runs-on: ubuntu-latest if: ${{ github.repository_owner == 'dart-lang' }} steps: - - uses: actions/stale@1160a2240286f5da8ec72b1c0816ce2481aabf84 + - uses: actions/stale@28ca1036281a5e5922ead5184a1bbf96e5fc984e with: days-before-stale: -1 days-before-close: 14 diff --git a/pkgs/dart_pad/lib/playground.dart b/pkgs/dart_pad/lib/playground.dart index acae0af20..053beb937 100644 --- a/pkgs/dart_pad/lib/playground.dart +++ b/pkgs/dart_pad/lib/playground.dart @@ -241,8 +241,6 @@ class Playground extends EditorUi implements GistContainer, GistController { Layout.flutter), Sample('85e77d36533b16647bf9b6eb8c03296d', 'Implicit animations', Layout.flutter), - Sample('d57c6c898dabb8c6fb41018588b8cf73', 'Firebase Nanochat', - Layout.flutter), Sample( '493c8b3ef8931cbac3fbbe5c04b9c4cf', 'Google Fonts', Layout.flutter), Sample('a133148221a8cbacbcef8bc77a6c82ec', 'Provider', Layout.flutter), diff --git a/pkgs/dart_services/Dockerfile b/pkgs/dart_services/Dockerfile index cecf30ae8..3054a9c04 100644 --- a/pkgs/dart_services/Dockerfile +++ b/pkgs/dart_services/Dockerfile @@ -1,5 +1,7 @@ ARG PROJECT_ID ARG FLUTTER_CHANNEL +ARG BUILD_SHA + FROM gcr.io/$PROJECT_ID/flutter:$FLUTTER_CHANNEL WORKDIR /app @@ -8,7 +10,9 @@ COPY . /app RUN dart pub get RUN dart compile exe bin/server.dart -o bin/server -RUN dart pub run grinder build-project-templates +RUN dart run grinder build-project-templates + +ENV BUILD_SHA=$BUILD_SHA EXPOSE 8080 CMD ["/app/bin/server"] diff --git a/pkgs/dart_services/README.md b/pkgs/dart_services/README.md index 830b470be..017f8ca74 100644 --- a/pkgs/dart_services/README.md +++ b/pkgs/dart_services/README.md @@ -35,7 +35,7 @@ To run tests: `dart test` -### Re-renerating source +### Re-generating source To rebuild the shelf router, run: diff --git a/pkgs/dart_services/lib/server.dart b/pkgs/dart_services/lib/server.dart index 027a83995..0da546c36 100644 --- a/pkgs/dart_services/lib/server.dart +++ b/pkgs/dart_services/lib/server.dart @@ -9,6 +9,7 @@ import 'package:args/args.dart'; import 'package:logging/logging.dart'; import 'package:shelf/shelf.dart'; import 'package:shelf/shelf_io.dart' as shelf; +import 'package:shelf_gzip/shelf_gzip.dart'; import 'src/caching.dart'; import 'src/common_server.dart'; @@ -103,7 +104,6 @@ class EndpointsServer { late final HttpServer server; - late final Pipeline pipeline; late final Handler handler; late final CommonServerApi commonServer; @@ -127,10 +127,11 @@ class EndpointsServer { GitHubOAuthHandler.setCache(cache); GitHubOAuthHandler.addRoutes(commonServer.router); - pipeline = const Pipeline() + final pipeline = const Pipeline() .addMiddleware(logRequestsToLogger(_logger)) .addMiddleware(createCustomCorsHeadersMiddleware()) - .addMiddleware(exceptionResponse()); + .addMiddleware(exceptionResponse()) + .addMiddleware(gzipMiddleware); handler = pipeline.addHandler(commonServer.router.call); } diff --git a/pkgs/dart_services/lib/src/analysis.dart b/pkgs/dart_services/lib/src/analysis.dart index 538c842d6..ea44ba135 100644 --- a/pkgs/dart_services/lib/src/analysis.dart +++ b/pkgs/dart_services/lib/src/analysis.dart @@ -121,10 +121,13 @@ class AnalysisServerWrapper { } Future complete(String source, int offset) async { + const maxResults = 500; + final results = await _completeImpl( {kMainDart: source}, kMainDart, offset, + maxResults: maxResults, ); final suggestions = @@ -149,14 +152,6 @@ class AnalysisServerWrapper { } return false; - }).toList(); - - suggestions.sort((CompletionSuggestion x, CompletionSuggestion y) { - if (x.relevance == y.relevance) { - return x.completion.compareTo(y.completion); - } else { - return y.relevance.compareTo(x.relevance); - } }); return api.CompleteResponse( @@ -359,13 +354,17 @@ class AnalysisServerWrapper { } Future _completeImpl( - Map sources, String sourceName, int offset) async { + Map sources, + String sourceName, + int offset, { + required int maxResults, + }) async { await _loadSources(_getOverlayMapWithPaths(sources)); return await analysisServer.completion.getSuggestions2( _getPathFromName(sourceName), offset, - 500, + maxResults, ); } diff --git a/pkgs/dart_services/lib/src/common_server.dart b/pkgs/dart_services/lib/src/common_server.dart index 5be1b3d29..5df53c229 100644 --- a/pkgs/dart_services/lib/src/common_server.dart +++ b/pkgs/dart_services/lib/src/common_server.dart @@ -4,6 +4,7 @@ import 'dart:async'; import 'dart:convert'; +import 'dart:io'; import 'package:logging/logging.dart'; import 'package:shelf/shelf.dart'; @@ -241,6 +242,7 @@ class CommonServerApi { dartVersion: sdk.dartVersion, flutterVersion: sdk.flutterVersion, engineVersion: sdk.engineVersion, + serverRevision: Platform.environment['BUILD_SHA'], experiments: sdk.experiments, packages: packages, ); diff --git a/pkgs/dart_services/lib/src/shared/model.dart b/pkgs/dart_services/lib/src/shared/model.dart index dde22cdc7..6f44fd552 100644 --- a/pkgs/dart_services/lib/src/shared/model.dart +++ b/pkgs/dart_services/lib/src/shared/model.dart @@ -363,6 +363,7 @@ class VersionResponse { final String dartVersion; final String flutterVersion; final String engineVersion; + final String? serverRevision; final List experiments; final List packages; @@ -370,6 +371,7 @@ class VersionResponse { required this.dartVersion, required this.flutterVersion, required this.engineVersion, + this.serverRevision, required this.experiments, required this.packages, }); diff --git a/pkgs/dart_services/lib/src/shared/model.g.dart b/pkgs/dart_services/lib/src/shared/model.g.dart index 9c1bf5383..1b88ddde0 100644 --- a/pkgs/dart_services/lib/src/shared/model.g.dart +++ b/pkgs/dart_services/lib/src/shared/model.g.dart @@ -281,6 +281,7 @@ VersionResponse _$VersionResponseFromJson(Map json) => dartVersion: json['dartVersion'] as String, flutterVersion: json['flutterVersion'] as String, engineVersion: json['engineVersion'] as String, + serverRevision: json['serverRevision'] as String?, experiments: (json['experiments'] as List) .map((e) => e as String) .toList(), @@ -294,6 +295,7 @@ Map _$VersionResponseToJson(VersionResponse instance) => 'dartVersion': instance.dartVersion, 'flutterVersion': instance.flutterVersion, 'engineVersion': instance.engineVersion, + 'serverRevision': instance.serverRevision, 'experiments': instance.experiments, 'packages': instance.packages, }; diff --git a/pkgs/dart_services/pubspec.lock b/pkgs/dart_services/pubspec.lock index 667713b9e..99636c701 100644 --- a/pkgs/dart_services/pubspec.lock +++ b/pkgs/dart_services/pubspec.lock @@ -141,10 +141,10 @@ packages: dependency: transitive description: name: cli_util - sha256: b8db3080e59b2503ca9e7922c3df2072cf13992354d5e944074ffa836fba43b7 + sha256: c05b7406fdabc7a49a3929d4af76bcaccbbffcbcdcf185b082e1ae07da323d19 url: "https://pub.dev" source: hosted - version: "0.4.0" + version: "0.4.1" clock: dependency: transitive description: @@ -157,10 +157,10 @@ packages: dependency: transitive description: name: code_builder - sha256: b2151ce26a06171005b379ecff6e08d34c470180ffe16b8e14b6d52be292b55f + sha256: feee43a5c05e7b3199bb375a86430b8ada1b04104f2923d0e03cc01ca87b6d84 url: "https://pub.dev" source: hosted - version: "4.8.0" + version: "4.9.0" collection: dependency: "direct dev" description: @@ -449,6 +449,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.4.1" + shelf_gzip: + dependency: "direct main" + description: + name: shelf_gzip + sha256: "4f4b793c0f969f348aece1ab4cc05fceba9fea431c1ce76b1bc0fa369cecfc15" + url: "https://pub.dev" + source: hosted + version: "4.1.0" shelf_packages_handler: dependency: transitive description: @@ -565,10 +573,10 @@ packages: dependency: "direct dev" description: name: synchronized - sha256: "5fcbd27688af6082f5abd611af56ee575342c30e87541d0245f7ff99faa02c60" + sha256: "539ef412b170d65ecdafd780f924e5be3f60032a1128df156adad6c5b373d558" url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "3.1.0+1" term_glyph: dependency: transitive description: @@ -653,10 +661,10 @@ packages: dependency: transitive description: name: web_socket_channel - sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b + sha256: "045ec2137c27bf1a32e6ffa0e734d532a6677bf9016a0d1a406c54e499ff945b" url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.1" webkit_inspection_protocol: dependency: transitive description: diff --git a/pkgs/dart_services/pubspec.yaml b/pkgs/dart_services/pubspec.yaml index 92aa711a1..9519afacd 100644 --- a/pkgs/dart_services/pubspec.yaml +++ b/pkgs/dart_services/pubspec.yaml @@ -18,6 +18,7 @@ dependencies: path: ^1.8.3 resp_client: ^1.2.0 shelf: ^1.4.1 + shelf_gzip: ^4.1.0 shelf_router: ^1.1.4 yaml: ^3.1.2 diff --git a/pkgs/dart_services/test/src/sample_code.dart b/pkgs/dart_services/test/src/sample_code.dart index b2299c8ea..329196999 100644 --- a/pkgs/dart_services/test/src/sample_code.dart +++ b/pkgs/dart_services/test/src/sample_code.dart @@ -4,7 +4,7 @@ const sampleCode = ''' void main() { - print("hello"); + print('hello'); } '''; @@ -12,7 +12,7 @@ const sampleCodeWeb = """ import 'dart:html'; void main() { - print("hello"); + print('hello'); querySelector('#foo')?.text = 'bar'; } """; @@ -114,6 +114,7 @@ class _MyHomePageState extends State { // From https://gist.github.com/RedBrogdon/e0a2e942e85fde2cd39b2741ff0c49e5 const sampleCodeFlutterSunflower = r''' import 'dart:math' as math; + import 'package:flutter/material.dart'; const Color primaryColor = Colors.orange; @@ -254,7 +255,7 @@ const sampleCodeFlutterDraggableCard = ''' import 'package:flutter/material.dart'; import 'package:flutter/physics.dart'; -main() { +void main() { runApp( MaterialApp( debugShowCheckedModeBanner: false, diff --git a/pkgs/dartpad_shared/lib/model.dart b/pkgs/dartpad_shared/lib/model.dart index dde22cdc7..6f44fd552 100644 --- a/pkgs/dartpad_shared/lib/model.dart +++ b/pkgs/dartpad_shared/lib/model.dart @@ -363,6 +363,7 @@ class VersionResponse { final String dartVersion; final String flutterVersion; final String engineVersion; + final String? serverRevision; final List experiments; final List packages; @@ -370,6 +371,7 @@ class VersionResponse { required this.dartVersion, required this.flutterVersion, required this.engineVersion, + this.serverRevision, required this.experiments, required this.packages, }); diff --git a/pkgs/dartpad_shared/lib/model.g.dart b/pkgs/dartpad_shared/lib/model.g.dart index 9c1bf5383..1b88ddde0 100644 --- a/pkgs/dartpad_shared/lib/model.g.dart +++ b/pkgs/dartpad_shared/lib/model.g.dart @@ -281,6 +281,7 @@ VersionResponse _$VersionResponseFromJson(Map json) => dartVersion: json['dartVersion'] as String, flutterVersion: json['flutterVersion'] as String, engineVersion: json['engineVersion'] as String, + serverRevision: json['serverRevision'] as String?, experiments: (json['experiments'] as List) .map((e) => e as String) .toList(), @@ -294,6 +295,7 @@ Map _$VersionResponseToJson(VersionResponse instance) => 'dartVersion': instance.dartVersion, 'flutterVersion': instance.flutterVersion, 'engineVersion': instance.engineVersion, + 'serverRevision': instance.serverRevision, 'experiments': instance.experiments, 'packages': instance.packages, };