Skip to content

Commit 331c700

Browse files
srawlinsCommit Queue
authored andcommitted
DAS plugins: Move Assist code to analysis_server_plugin package
The PluginServer class needs access to AssistProcessor in order to compute assists. That class needs access to a few other classes, which then must also be moved: * assist_core.dart - the Assist class * assist_dart.dart - the DartAssistContext class * assist_generators.dart - the registeredAssistGenerators variable * assist_performance.dart - the AssistPerformance and GetAssistsPerformance classes * assist_processor.dart - the AssistProcessor class with it's singular API, `compute()` * performance.dart - the ProducerRequestPerformance class * the `addCaretAtOffset` helper function, refactored into a `withCaretAt` extension method This change is functionally a no-op. Change-Id: Ic883d21e9cc8c3db1f6093f830f01ec6eb9a0976 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/416680 Commit-Queue: Samuel Rawlins <[email protected]> Reviewed-by: Brian Wilkerson <[email protected]> Reviewed-by: Phil Quitslund <[email protected]>
1 parent 0f2c6d7 commit 331c700

File tree

24 files changed

+248
-254
lines changed

24 files changed

+248
-254
lines changed

pkg/analysis_server/lib/src/analysis_server.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,7 @@ import 'package:analysis_server/src/protocol_server.dart' as server;
2929
import 'package:analysis_server/src/server/crash_reporting_attachments.dart';
3030
import 'package:analysis_server/src/server/diagnostic_server.dart';
3131
import 'package:analysis_server/src/server/message_scheduler.dart';
32-
import 'package:analysis_server/src/server/performance.dart';
3332
import 'package:analysis_server/src/services/completion/completion_performance.dart';
34-
import 'package:analysis_server/src/services/correction/assist_performance.dart';
3533
import 'package:analysis_server/src/services/correction/fix_performance.dart';
3634
import 'package:analysis_server/src/services/correction/namespace.dart';
3735
import 'package:analysis_server/src/services/dart_tooling_daemon/dtd_services.dart';
@@ -50,6 +48,8 @@ import 'package:analysis_server/src/utilities/process.dart';
5048
import 'package:analysis_server/src/utilities/request_statistics.dart';
5149
import 'package:analysis_server/src/utilities/tee_string_sink.dart';
5250
import 'package:analysis_server/src/utilities/timing_byte_store.dart';
51+
import 'package:analysis_server_plugin/src/correction/assist_performance.dart';
52+
import 'package:analysis_server_plugin/src/correction/performance.dart';
5353
import 'package:analyzer/dart/analysis/results.dart';
5454
import 'package:analyzer/dart/analysis/session.dart';
5555
import 'package:analyzer/dart/ast/ast.dart';

pkg/analysis_server/lib/src/cider/assists.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5-
import 'package:analysis_server/plugin/edit/assist/assist_core.dart';
65
import 'package:analysis_server/src/services/correction/assist.dart';
7-
import 'package:analysis_server/src/services/correction/assist_internal.dart';
6+
import 'package:analysis_server_plugin/src/correction/assist_core.dart';
7+
import 'package:analysis_server_plugin/src/correction/assist_processor.dart';
88
import 'package:analysis_server_plugin/src/correction/dart_change_workspace.dart';
99
import 'package:analyzer/dart/analysis/session.dart';
1010
import 'package:analyzer/instrumentation/service.dart';

pkg/analysis_server/lib/src/handler/legacy/edit_get_assists.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,16 @@
44

55
import 'dart:async';
66

7-
import 'package:analysis_server/plugin/edit/assist/assist_core.dart';
87
import 'package:analysis_server/protocol/protocol.dart';
98
import 'package:analysis_server/protocol/protocol_generated.dart';
109
import 'package:analysis_server/src/handler/legacy/legacy_handler.dart';
1110
import 'package:analysis_server/src/legacy_analysis_server.dart';
1211
import 'package:analysis_server/src/plugin/result_converter.dart';
1312
import 'package:analysis_server/src/request_handler_mixin.dart';
1413
import 'package:analysis_server/src/services/correction/assist.dart';
15-
import 'package:analysis_server/src/services/correction/assist_internal.dart';
16-
import 'package:analysis_server/src/services/correction/assist_performance.dart';
14+
import 'package:analysis_server_plugin/src/correction/assist_core.dart';
15+
import 'package:analysis_server_plugin/src/correction/assist_performance.dart';
16+
import 'package:analysis_server_plugin/src/correction/assist_processor.dart';
1717
import 'package:analysis_server_plugin/src/correction/dart_change_workspace.dart';
1818
import 'package:analyzer/dart/analysis/session.dart';
1919
import 'package:analyzer/src/exception/exception.dart';

pkg/analysis_server/lib/src/legacy_analysis_server.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,14 +91,14 @@ import 'package:analysis_server/src/server/diagnostic_server.dart';
9191
import 'package:analysis_server/src/server/error_notifier.dart';
9292
import 'package:analysis_server/src/server/features.dart';
9393
import 'package:analysis_server/src/server/message_scheduler.dart';
94-
import 'package:analysis_server/src/server/performance.dart';
9594
import 'package:analysis_server/src/server/sdk_configuration.dart';
9695
import 'package:analysis_server/src/services/completion/completion_state.dart';
9796
import 'package:analysis_server/src/services/execution/execution_context.dart';
9897
import 'package:analysis_server/src/services/flutter/widget_descriptions.dart';
9998
import 'package:analysis_server/src/services/refactoring/legacy/refactoring_manager.dart';
10099
import 'package:analysis_server/src/utilities/extensions/resource_provider.dart';
101100
import 'package:analysis_server/src/utilities/process.dart';
101+
import 'package:analysis_server_plugin/src/correction/performance.dart';
102102
import 'package:analyzer/dart/analysis/results.dart';
103103
import 'package:analyzer/dart/analysis/session.dart';
104104
import 'package:analyzer/dart/ast/ast.dart';

pkg/analysis_server/lib/src/lsp/handlers/code_actions/dart.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,20 @@
55
import 'dart:async';
66

77
import 'package:analysis_server/lsp_protocol/protocol.dart';
8-
import 'package:analysis_server/plugin/edit/assist/assist_core.dart';
98
import 'package:analysis_server/src/lsp/constants.dart';
109
import 'package:analysis_server/src/lsp/handlers/code_actions/abstract_code_actions_producer.dart';
1110
import 'package:analysis_server/src/lsp/mapping.dart';
1211
import 'package:analysis_server/src/protocol_server.dart'
1312
hide AnalysisOptions, Position;
1413
import 'package:analysis_server/src/services/correction/assist.dart';
15-
import 'package:analysis_server/src/services/correction/assist_internal.dart';
16-
import 'package:analysis_server/src/services/correction/assist_performance.dart';
1714
import 'package:analysis_server/src/services/correction/fix_performance.dart';
1815
import 'package:analysis_server/src/services/refactoring/framework/refactoring_context.dart';
1916
import 'package:analysis_server/src/services/refactoring/framework/refactoring_processor.dart';
2017
import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
2118
import 'package:analysis_server_plugin/edit/fix/dart_fix_context.dart';
19+
import 'package:analysis_server_plugin/src/correction/assist_core.dart';
20+
import 'package:analysis_server_plugin/src/correction/assist_performance.dart';
21+
import 'package:analysis_server_plugin/src/correction/assist_processor.dart';
2222
import 'package:analysis_server_plugin/src/correction/dart_change_workspace.dart';
2323
import 'package:analysis_server_plugin/src/correction/fix_processor.dart';
2424
import 'package:analyzer/dart/analysis/results.dart';

pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ import 'package:analysis_server/src/server/detachable_filesystem_manager.dart';
2828
import 'package:analysis_server/src/server/diagnostic_server.dart';
2929
import 'package:analysis_server/src/server/error_notifier.dart';
3030
import 'package:analysis_server/src/server/message_scheduler.dart';
31-
import 'package:analysis_server/src/server/performance.dart';
3231
import 'package:analysis_server/src/utilities/process.dart';
32+
import 'package:analysis_server_plugin/src/correction/performance.dart';
3333
import 'package:analyzer/dart/analysis/results.dart';
3434
import 'package:analyzer/dart/analysis/session.dart';
3535
import 'package:analyzer/error/error.dart';
@@ -1205,7 +1205,12 @@ class LspAnalysisServer extends AnalysisServer {
12051205
// TODO(dantup): Consider supporting per-workspace config by
12061206
// calling workspace/configuration whenever workspace folders change
12071207
// and caching the config for each one.
1208-
: _workspaceFolders.map((root) => resourceProvider.pathContext.join(root, excludePath)),
1208+
: _workspaceFolders.map(
1209+
(root) => resourceProvider.pathContext.join(
1210+
root,
1211+
excludePath,
1212+
),
1213+
),
12091214
)
12101215
.map(pathContext.normalize)
12111216
.toSet();

pkg/analysis_server/lib/src/server/performance.dart

Lines changed: 0 additions & 43 deletions
This file was deleted.

pkg/analysis_server/lib/src/services/completion/completion_performance.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5-
import 'package:analysis_server/src/server/performance.dart';
6-
import 'package:analysis_server/src/utilities/strings.dart';
5+
import 'package:analysis_server_plugin/src/correction/performance.dart';
6+
import 'package:analysis_server_plugin/src/utilities/string_extensions.dart';
77

88
/// Overall performance of a code completion operation.
99
class CompletionPerformance extends RequestPerformance {
@@ -18,7 +18,7 @@ class CompletionPerformance extends RequestPerformance {
1818
super.requestLatency,
1919
required String content,
2020
required int offset,
21-
}) : snippet = addCaretAtOffset(content, offset),
21+
}) : snippet = content.withCaretAt(offset),
2222
super(operation: 'Completion');
2323

2424
String get computedSuggestionCountStr {

pkg/analysis_server/lib/src/services/correction/assist.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5-
import 'package:analysis_server/plugin/edit/assist/assist_dart.dart';
5+
import 'package:analysis_server_plugin/src/correction/assist_dart.dart';
66
import 'package:analysis_server_plugin/src/correction/change_workspace.dart';
77
import 'package:analyzer/dart/analysis/results.dart';
88
import 'package:analyzer/instrumentation/service.dart';

pkg/analysis_server/lib/src/services/correction/assist_internal.dart

Lines changed: 1 addition & 140 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,6 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5-
import 'package:analysis_server/plugin/edit/assist/assist_core.dart';
6-
import 'package:analysis_server/plugin/edit/assist/assist_dart.dart';
7-
import 'package:analysis_server/src/services/correction/assist_generators.dart';
8-
import 'package:analysis_server/src/services/correction/assist_performance.dart';
95
import 'package:analysis_server/src/services/correction/dart/add_diagnostic_property_reference.dart';
106
import 'package:analysis_server/src/services/correction/dart/add_digit_separators.dart';
117
import 'package:analysis_server/src/services/correction/dart/add_return_type.dart';
@@ -76,15 +72,8 @@ import 'package:analysis_server/src/services/correction/dart/split_and_condition
7672
import 'package:analysis_server/src/services/correction/dart/split_variable_declaration.dart';
7773
import 'package:analysis_server/src/services/correction/dart/surround_with.dart';
7874
import 'package:analysis_server/src/services/correction/dart/use_curly_braces.dart';
79-
import 'package:analysis_server_plugin/edit/dart/correction_producer.dart';
75+
import 'package:analysis_server_plugin/src/correction/assist_generators.dart';
8076
import 'package:analysis_server_plugin/src/correction/fix_generators.dart';
81-
import 'package:analyzer/error/error.dart';
82-
import 'package:analyzer/src/dart/ast/utilities.dart';
83-
import 'package:analyzer/src/generated/java_core.dart';
84-
import 'package:analyzer_plugin/utilities/assist/assist.dart'
85-
hide AssistContributor;
86-
import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
87-
import 'package:analyzer_plugin/utilities/change_builder/conflicting_edit_exception.dart';
8877

8978
/// The set of built-in generators used to produce assists.
9079
const Set<ProducerGenerator> _builtInGenerators = {
@@ -178,131 +167,3 @@ void registerBuiltInAssistGenerators() {
178167
registeredAssistGenerators.registerMultiGenerator,
179168
);
180169
}
181-
182-
/// The computer for Dart assists.
183-
class AssistProcessor {
184-
final AssistPerformance? _performance;
185-
final DartAssistContext _assistContext;
186-
final Stopwatch _timer = Stopwatch();
187-
188-
final List<Assist> _assists = [];
189-
190-
AssistProcessor(this._assistContext, {AssistPerformance? performance})
191-
: _performance = performance;
192-
193-
Future<List<Assist>> compute() async {
194-
_timer.start();
195-
await _addFromProducers();
196-
_timer.stop();
197-
_performance?.computeTime = _timer.elapsed;
198-
return _assists;
199-
}
200-
201-
void _addAssistFromBuilder(
202-
ChangeBuilder builder,
203-
AssistKind kind, {
204-
List<Object>? args,
205-
}) {
206-
var change = builder.sourceChange;
207-
if (change.edits.isEmpty) {
208-
return;
209-
}
210-
change.id = kind.id;
211-
change.message = formatList(kind.message, args);
212-
_assists.add(Assist(kind, change));
213-
}
214-
215-
Future<void> _addFromProducers() async {
216-
var context = CorrectionProducerContext.createResolved(
217-
libraryResult: _assistContext.libraryResult,
218-
unitResult: _assistContext.unitResult,
219-
selectionOffset: _assistContext.selectionOffset,
220-
selectionLength: _assistContext.selectionLength,
221-
);
222-
223-
Future<void> compute(CorrectionProducer producer) async {
224-
var builder = ChangeBuilder(
225-
workspace: _assistContext.workspace,
226-
eol: producer.eol,
227-
);
228-
try {
229-
if (_performance != null) {
230-
var startTime = _timer.elapsedMilliseconds;
231-
await producer.compute(builder);
232-
_performance.producerTimings.add((
233-
className: producer.runtimeType.toString(),
234-
elapsedTime: _timer.elapsedMilliseconds - startTime,
235-
));
236-
} else {
237-
await producer.compute(builder);
238-
}
239-
240-
var assistKind = producer.assistKind;
241-
if (assistKind != null) {
242-
_addAssistFromBuilder(
243-
builder,
244-
assistKind,
245-
args: producer.assistArguments,
246-
);
247-
}
248-
} on ConflictingEditException catch (exception, stackTrace) {
249-
// Handle the exception by (a) not adding an assist based on the
250-
// producer and (b) logging the exception.
251-
_assistContext.instrumentationService.logException(
252-
exception,
253-
stackTrace,
254-
);
255-
}
256-
}
257-
258-
for (var generator in registeredAssistGenerators.producerGenerators) {
259-
if (!_generatorAppliesToAnyLintRule(
260-
generator,
261-
registeredAssistGenerators.lintRuleMap[generator] ?? {},
262-
)) {
263-
var producer = generator(context: context);
264-
await compute(producer);
265-
}
266-
}
267-
for (var multiGenerator
268-
in registeredAssistGenerators.multiProducerGenerators) {
269-
var multiProducer = multiGenerator(context: context);
270-
for (var producer in await multiProducer.producers) {
271-
await compute(producer);
272-
}
273-
}
274-
}
275-
276-
/// Returns whether [generator] applies to any enabled lint rule, among
277-
/// [errorCodes].
278-
bool _generatorAppliesToAnyLintRule(
279-
ProducerGenerator generator,
280-
Set<LintCode> errorCodes,
281-
) {
282-
if (errorCodes.isEmpty) {
283-
return false;
284-
}
285-
286-
var selectionEnd =
287-
_assistContext.selectionOffset + _assistContext.selectionLength;
288-
var locator = NodeLocator(_assistContext.selectionOffset, selectionEnd);
289-
var node = locator.searchWithin(_assistContext.unitResult.unit);
290-
if (node == null) {
291-
return false;
292-
}
293-
294-
var fileOffset = node.offset;
295-
for (var error in _assistContext.unitResult.errors) {
296-
var errorSource = error.source;
297-
if (_assistContext.unitResult.path == errorSource.fullName) {
298-
if (fileOffset >= error.offset &&
299-
fileOffset <= error.offset + error.length) {
300-
if (errorCodes.contains(error.errorCode)) {
301-
return true;
302-
}
303-
}
304-
}
305-
}
306-
return false;
307-
}
308-
}

0 commit comments

Comments
 (0)