diff --git a/pkg/analysis_server_plugin/CONTRIBUTING.md b/pkg/analysis_server_plugin/CONTRIBUTING.md new file mode 100644 index 00000000000..1dfcb4a9daa --- /dev/null +++ b/pkg/analysis_server_plugin/CONTRIBUTING.md @@ -0,0 +1,24 @@ +## Contributing + +Contributions welcome! Please follow the guide in [Contributing][contributing]. + +## Building + +If you want to build Dart yourself, here is a guide to [getting the source, +preparing your machine to build the SDK, and building][building]. + +There are more documents on our [wiki][]. Once set up to build the SDK, run: + +```none +./tools/build.py -mrelease create_sdk +``` + +## Coding style + +The analyzer packages are coded with a styled specified in our [coding style +document][coding style]. + +[building]: https://github.com/dart-lang/sdk/wiki/Building +[coding style]: https://github.com/dart-lang/sdk/blob/main/pkg/analyzer/doc/implementation/coding_style.md +[contributing]: https://github.com/dart-lang/sdk/wiki/Contributing +[wiki]: https://github.com/dart-lang/sdk/wiki \ No newline at end of file diff --git a/pkg/analysis_server_plugin/LICENSE b/pkg/analysis_server_plugin/LICENSE new file mode 100644 index 00000000000..a69ac38d053 --- /dev/null +++ b/pkg/analysis_server_plugin/LICENSE @@ -0,0 +1,26 @@ +Copyright 2024, the Dart project authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google LLC nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/pkg/analysis_server_plugin/OWNERS b/pkg/analysis_server_plugin/OWNERS new file mode 100644 index 00000000000..1592b3e5a62 --- /dev/null +++ b/pkg/analysis_server_plugin/OWNERS @@ -0,0 +1 @@ +file:/tools/OWNERS_ANALYZER diff --git a/pkg/analysis_server_plugin/README.md b/pkg/analysis_server_plugin/README.md new file mode 100644 index 00000000000..f09e707a7d2 --- /dev/null +++ b/pkg/analysis_server_plugin/README.md @@ -0,0 +1,55 @@ +# analysis\_server\_plugin package + +This package is being developed for the second incarnation of Dart Analyzer +plugins. It is in an intermediate state, and a few things must be kept in mind +during this phase of development: + +1. **This package is not to be published on pub yet.** We will flesh out a + stable API befoure the first publish. +2. **In order to support the above point, no pub-publishable code can depend on + this package.** At no point can we introduce a dependency from a package + like `analyzer` or `analyzer_plugin` to this package. If we did so, then at + the next time we published _that_ package to pub, we would need to publish + _this_ package to pub. No. In short, I think what this means is that only + the `analysis_server` package can depend on this package. + +## Migration of code between packages + +As part of the design of the new Dart Analyzer plugins, much code will shift +around, in a few directions. + +* **`analysis_server` package to `analysis_server_plugin` package:** The API of + the new Dart Analyzer plugins focuses around two primary concepts: lint rules + and quick fixes. Quick assists may be chosen as a third important concept. + Lint rule code has typically lived in the `analyzer` package, and does not + need to move. (It's presence in the `analyzer` package could be deprecated in + favor of this package, but it is not important for the implementation.) + + Quick fixes, however, have only existed in concept, and interface, and API, + in the `analysis_server` package. That code needs to move to this package in + order to be used in a Dart Analyzer plugin. + + **A move from the `analysis_server` package to this package is not a breaking + change.** + +* **`analyzer_plugin` package to `analysis_server_plugin` package:** Care is + being taken to decide where Dart Analyzer plugin code will live and how it + will be published. It is not decided yet what the ultimate package API will + be. Some code from **analyzer_plugin** may move to this package. + + **A move from the `analyzer_plugin` package is a breaking change. Extreme + care must be taken.** + +* **`analyzer_plugin` package to `analysis_server` package:** There will be + many components of the analysis server that currently live in + `analyzer_plugin`, because they were necessary for the first version of Dart + Analyzer plugins), but are not part of the new Dart Analyzer plugins. These + components can be moved safely back into the `analysis_server` package. + + In terms of priority, it is not crucial for such code to be moved out of the + `analyzer_plugin` package. It can live there indefinitely, and the + `analysis_server` package can continue to depend on code from the + `analyzer_plugin` package, as shipped in the SDK. + + **A move from the `analyzer_plugin` package is a breaking change. Extreme + care must be taken.** diff --git a/pkg/analysis_server_plugin/analysis_options.yaml b/pkg/analysis_server_plugin/analysis_options.yaml new file mode 100644 index 00000000000..2fabe4af2aa --- /dev/null +++ b/pkg/analysis_server_plugin/analysis_options.yaml @@ -0,0 +1,28 @@ +include: package:lints/recommended.yaml + +analyzer: + language: + strict-casts: true + strict-inference: true + strict-raw-types: true + errors: + # This package imports much of the implementation libraries of the + # 'analyzer' package, because it is tightly integrated. This will not + # likely change any time soon. + implementation_imports: ignore + +linter: + rules: + - always_use_package_imports + - avoid_dynamic_calls + - avoid_redundant_argument_values + - avoid_unused_constructor_parameters + - flutter_style_todos + - library_annotations + - prefer_single_quotes + - unawaited_futures + - unnecessary_breaks + - unnecessary_library_directive + - unnecessary_parenthesis + - unreachable_from_main + diff --git a/pkg/analysis_server_plugin/lib/edit/fix/dart_fix_context.dart b/pkg/analysis_server_plugin/lib/edit/fix/dart_fix_context.dart new file mode 100644 index 00000000000..7b87a8749c0 --- /dev/null +++ b/pkg/analysis_server_plugin/lib/edit/fix/dart_fix_context.dart @@ -0,0 +1,6 @@ +// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// TODO(srawlins): Move the contents of this imported library, here. +export 'package:server_plugin/edit/fix/dart_fix_context.dart'; diff --git a/pkg/analysis_server_plugin/lib/edit/fix/fix.dart b/pkg/analysis_server_plugin/lib/edit/fix/fix.dart new file mode 100644 index 00000000000..5988df4f34a --- /dev/null +++ b/pkg/analysis_server_plugin/lib/edit/fix/fix.dart @@ -0,0 +1,6 @@ +// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// TODO(srawlins): Move the contents of this imported library, here. +export 'package:server_plugin/edit/fix/fix.dart'; diff --git a/pkg/analysis_server_plugin/lib/edit/fix/fix_context.dart b/pkg/analysis_server_plugin/lib/edit/fix/fix_context.dart new file mode 100644 index 00000000000..1e3f1af128c --- /dev/null +++ b/pkg/analysis_server_plugin/lib/edit/fix/fix_context.dart @@ -0,0 +1,6 @@ +// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// TODO(srawlins): Move the contents of this imported library, here. +export 'package:server_plugin/edit/fix/fix_context.dart'; diff --git a/pkg/analysis_server_plugin/pubspec.yaml b/pkg/analysis_server_plugin/pubspec.yaml new file mode 100644 index 00000000000..89e39150e32 --- /dev/null +++ b/pkg/analysis_server_plugin/pubspec.yaml @@ -0,0 +1,137 @@ +name: analysis_server_plugin +# This package is not yet intended for consumption on pub.dev. DO NOT publish. +publish_to: none + +environment: + sdk: '>=3.3.0 <4.0.0' + +# Use 'any' constraints here; we get our versions from the DEPS file. +dependencies: + # TODO(srawlins): Move all code from `server_plugin` here, and remove dep. + server_plugin: any + +# Use 'any' constraints here; we get our versions from the DEPS file. +dev_dependencies: + lints: any + +dependency_overrides: + _fe_analyzer_shared: + path: ../_fe_analyzer_shared + analyzer: + path: ../analyzer + analyzer_plugin: + path: ../analyzer_plugin + analyzer_utilities: + path: ../analyzer_utilities + args: + path: ../../third_party/pkg/args + async: + path: ../../third_party/pkg/async + boolean_selector: + path: ../../third_party/pkg/boolean_selector + cli_util: + path: ../../third_party/pkg/cli_util + clock: + path: ../../third_party/pkg/clock + collection: + path: ../../third_party/pkg/collection + convert: + path: ../../third_party/pkg/convert + crypto: + path: ../../third_party/pkg/crypto + dart_style: + path: ../../third_party/pkg/dart_style + file: + path: ../../third_party/pkg/file/packages/file + frontend_server_client: + path: ../../third_party/pkg/webdev/frontend_server_client + glob: + path: ../../third_party/pkg/glob + http: + path: ../../third_party/pkg/http/pkgs/http + http_multi_server: + path: ../../third_party/pkg/http_multi_server + http_parser: + path: ../../third_party/pkg/http_parser + intl: + path: ../../third_party/pkg/intl + js: + path: ../js + language_server_protocol: + path: ../../third_party/pkg/language_server_protocol + linter: + path: ../linter + lints: + path: ../../third_party/pkg/lints + logging: + path: ../../third_party/pkg/logging + matcher: + path: ../../third_party/pkg/matcher + memory_usage: + path: ../../third_party/pkg/leak_tracker/pkgs/memory_usage + meta: + path: ../meta + mime: + path: ../../third_party/pkg/mime + package_config: + path: ../../third_party/pkg/package_config + path: + path: ../../third_party/pkg/path + pool: + path: ../../third_party/pkg/pool + pub_semver: + path: ../../third_party/pkg/pub_semver + server_plugin: + path: ../server_plugin + shelf: + path: ../../third_party/pkg/shelf/pkgs/shelf + shelf_packages_handler: + path: ../../third_party/pkg/shelf/pkgs/shelf_packages_handler + shelf_static: + path: ../../third_party/pkg/shelf/pkgs/shelf_static + shelf_web_socket: + path: ../../third_party/pkg/shelf/pkgs/shelf_web_socket + source_map_stack_trace: + path: ../../third_party/pkg/source_map_stack_trace + source_maps: + path: ../../third_party/pkg/source_maps + source_span: + path: ../../third_party/pkg/source_span + stack_trace: + path: ../../third_party/pkg/stack_trace + stream_channel: + path: ../../third_party/pkg/stream_channel + string_scanner: + path: ../../third_party/pkg/string_scanner + telemetry: + path: ../telemetry + term_glyph: + path: ../../third_party/pkg/term_glyph + test: + path: ../../third_party/pkg/test/pkgs/test + test_api: + path: ../../third_party/pkg/test/pkgs/test_api + test_core: + path: ../../third_party/pkg/test/pkgs/test_core + test_descriptor: + path: ../../third_party/pkg/test_descriptor + test_reflective_loader: + path: ../../third_party/pkg/test_reflective_loader + typed_data: + path: ../../third_party/pkg/typed_data + unified_analytics: + path: ../../third_party/pkg/tools/pkgs/unified_analytics + usage: + path: ../../third_party/pkg/usage + vm_service: + path: ../vm_service + watcher: + path: ../../third_party/pkg/watcher + web_socket_channel: + path: ../../third_party/pkg/web_socket_channel + webkit_inspection_protocol: + path: ../../third_party/pkg/webkit_inspection_protocol + yaml: + path: ../../third_party/pkg/yaml + yaml_edit: + path: ../../third_party/pkg/yaml_edit diff --git a/pkg/server_plugin/README.md b/pkg/server_plugin/README.md index 374cb4d1f68..09125bbab4a 100644 --- a/pkg/server_plugin/README.md +++ b/pkg/server_plugin/README.md @@ -1,58 +1,5 @@ # server\_plugin package -This package is being developed for the second incarnation of Dart Analyzer -plugins. It is in an intermediate state, and a few things must be kept in mind -during this phase of development: - -1. **This package is not to be published on pub.** Yet. We may decide to go - forward with this package as a full replacement of the `analyzer_plugin` - package, in which case we _would_ ultimately publish it. But we may choose a - different plan. Until we finalize, this package is not to be published. -2. **In order to support the above point, no pub-publishable code can depend on - this package.** At no point can we introduce a dependency from a package - like `analyzer` or `analyzer_plugin` to this package. If we did so, then at - the next time we published _that_ package to pub, we would need to publish - _this_ package to pub. No. In short, I think what this means is that only - the `analsis_server` package can depend on this package (until we decide the - final path to publishing the next Dart Analyzer plugins story. - -## Migration of code between packages - -As part of the design of the new Dart Analyzer plugins, much code will shift -around, in a few directions. - -* **`analysis_server` package to `server_plugin` package:** The API of the new - Dart Analyzer plugins focuses around two primary concepts: lint rules and - quick fixes. Quick assists may be chosen as a third important concept. Lint - rule code has typically lived in the `analyzer` package, and does not need to - move. (It's presense in the `analyzer` package could be deprecated in favor - of this package, but it is not important for the implementation.) - - Quick fixes, however, have only existed in concept, and interface, and API, - in the `analysis_server` package. That code needs to move to this package in - order to be used in a Dart Analyzer plugin. - - **A move from the `analysis_server` package to this package is not a breaking - change.** - -* **`analyzer_plugin` package to `server_plugin` package:** Care is being taken - to decide where Dart Analyzer plugin code will live and how it will be - published. It is not decided yet what the ultimate package API will be. Some - code from **analyzer_plugin** may move to this package. - - **A move from the `analyzer_plugin` package is a breaking change. Extreme - care must be taken.** - -* **`analyzer_plugin` package to `analysis_server` package:** There will be - many components of the analysis server that currently live in - `analyzer_plugin`, because they were necessary for the first version of Dart - Analyzer plugins), but are not part of the new Dart Analyzer plugins. These - components can be moved safely back into the `analysis_server` package. - - In terms of priority, it is not crucial for such code to be moved out of the - `analyzer_plugin` package. It can live there indefinitely, and the - `analysis_server` package can continue to depend on code from the - `analyzer_plugin` package, as shipped in the SDK. - - **A move from the `analyzer_plugin` package is a breaking change. Extreme - care must be taken.** +This package is being renamed as `analysis_server_plugin`. All code should move +to that package soon, and then this directory will be deleted. This package was +never published under the name `server_plugin`. diff --git a/pkg/server_plugin/analysis_options.yaml b/pkg/server_plugin/analysis_options.yaml index 82d99c162e3..2fabe4af2aa 100644 --- a/pkg/server_plugin/analysis_options.yaml +++ b/pkg/server_plugin/analysis_options.yaml @@ -7,8 +7,8 @@ analyzer: strict-raw-types: true errors: # This package imports much of the implementation libraries of the - # 'analyzer' (and sometimes the '_fe_analyzer_shared' package), because it - # is tightly integrated. This will not likely change any time soon. + # 'analyzer' package, because it is tightly integrated. This will not + # likely change any time soon. implementation_imports: ignore linter: diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json index 53768186060..49378703458 100644 --- a/tools/bots/test_matrix.json +++ b/tools/bots/test_matrix.json @@ -2711,7 +2711,7 @@ "name": "unit tests", "arguments": [ "-nanalyzer-unittest-asserts-${mode}-${system}", - "pkg/(analyzer|analysis_server|analyzer_cli|analyzer_plugin|server_plugin)" + "pkg/(analyzer|analysis_server|analysis_server_plugin|analyzer_cli|analyzer_plugin)" ], "shards": 9, "fileset": "analyzer_unit_tests" @@ -2983,7 +2983,7 @@ "name": "package unit tests and macro build tests", "arguments": [ "-nunittest-asserts-${mode}-${system}-${arch}", - "pkg/pkg/(?!(analyzer*|analysis_server|compiler|dev_compiler|js_runtime|front_end|kernel|frontend_server|nnbd_migration|dartdev/test/native_assets|server_plugin|vm_service)/)", + "pkg/pkg/(?!(analyzer*|analysis_server|analysis_server_plugin|compiler|dev_compiler|js_runtime|front_end|kernel|frontend_server|nnbd_migration|dartdev/test/native_assets|vm_service)/)", "macro_build" ], "shards": 3, @@ -3104,7 +3104,7 @@ "name": "package unit tests", "arguments": [ "-nunittest-asserts-${mode}-${system}-${arch}", - "pkg/pkg/(?!(analyzer*|analysis_server|compiler|dev_compiler|js_runtime|front_end|kernel|frontend_server|nnbd_migration|dartdev/test/native_assets|server_plugin|vm_service)/)" + "pkg/pkg/(?!(analyzer*|analysis_server|analysis_server_plugin|compiler|dev_compiler|js_runtime|front_end|kernel|frontend_server|nnbd_migration|dartdev/test/native_assets|vm_service)/)" ] } ]