Skip to content

Commit

Permalink
Version 3.7.0-133.0.dev
Browse files Browse the repository at this point in the history
Merge 0b41ef1 into dev
  • Loading branch information
Dart CI committed Nov 12, 2024
2 parents 69170fa + 0b41ef1 commit 35b329e
Show file tree
Hide file tree
Showing 101 changed files with 3,429 additions and 2,025 deletions.
4 changes: 2 additions & 2 deletions DEPS
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ vars = {
# EOL comment after a dependency to disable this and pin it at its current
# revision.

"core_rev": "1156cfe4abc000f173bbf826783c215ca02b2ebf",
"core_rev": "6af0821dd8c0ecc5c30d5e67b3c8e16e8d79cda6",
# Note: Updates to dart_style have to be coordinated with the infrastructure
# team so that the internal formatter `tools/sdks/dart-sdk/bin/dart format`
# matches the version here. Please follow this process to make updates:
Expand Down Expand Up @@ -164,7 +164,7 @@ vars = {
"test_descriptor_rev": "71195671e00f2d330a9ebda0bd48f99364bb30f2",
"test_process_rev": "7c76f470173366ec90525e49961f2ce1fcf516d3",
"test_reflective_loader_rev": "30a552df6421e1f68cdc33c98c2512984b6f42b9",
"tools_rev": "b028012c0da60d903055d124f4a6f1ba0c63c6d9",
"tools_rev": "66afa68006679dcfd9cca0410f01a057ff884fa2",
"vector_math_rev": "ec5080d5e6731bef4deffae78eb778ae787ba92f",
"watcher_rev": "7a15a903f7ce0737cce7d08ff30402d41b9f7b62",
"web_rev": "8d243766b45c163a9d18a89de059eba24398d163",
Expand Down
1 change: 0 additions & 1 deletion pkg/analysis_server/analyzer_use_new_elements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -114,5 +114,4 @@ test/services/refactoring/legacy/rename_library_test.dart
test/services/search/element_visitors_test.dart
test/services/search/hierarchy_test.dart
test/services/search/search_engine_test.dart
test/src/cider/rename_test.dart
tool/code_completion/try_hypothesis.dart
11 changes: 9 additions & 2 deletions pkg/analysis_server/lib/src/analysis_server.dart
Original file line number Diff line number Diff line change
Expand Up @@ -531,15 +531,22 @@ abstract class AnalysisServer {
///
/// If there is already an active connection to DTD or there is an error
/// connecting, returns an error, otherwise returns `null`.
Future<lsp.ErrorOr<Null>> connectToDtd(Uri dtdUri) async {
Future<lsp.ErrorOr<Null>> connectToDtd(
Uri dtdUri, {
bool registerExperimentalHandlers = false,
}) async {
switch (dtd?.state) {
case DtdConnectionState.Connecting || DtdConnectionState.Connected:
return lsp.error(
lsp.ServerErrorCodes.StateError,
'Server is already connected to DTD',
);
case DtdConnectionState.Disconnected || DtdConnectionState.Error || null:
var connectResult = await DtdServices.connect(this, dtdUri);
var connectResult = await DtdServices.connect(
this,
dtdUri,
registerExperimentalHandlers: registerExperimentalHandlers,
);
return connectResult.mapResultSync((dtd) {
this.dtd = dtd;
return lsp.success(null);
Expand Down
4 changes: 4 additions & 0 deletions pkg/analysis_server/lib/src/lsp/constants.dart
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,10 @@ abstract final class CustomMethods {
static const semanticTokenDynamicRegistration = Method(
'textDocument/semanticTokens',
);

/// An experimental 'echo' handler that can used by tests to verify
/// experimental handlers only show up when requested.
static const experimentalEcho = Method('experimental/echo');
}

abstract final class CustomSemanticTokenModifiers {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,11 @@ class ConnectToDtdHandler
MessageInfo message,
CancellationToken token,
) async {
return await server.connectToDtd(params.uri);
var registerExperimentalHandlers =
params.registerExperimentalHandlers ?? false;
return await server.connectToDtd(
params.uri,
registerExperimentalHandlers: registerExperimentalHandlers,
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// 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.

import 'package:analysis_server/lsp_protocol/protocol.dart';
import 'package:analysis_server/src/lsp/constants.dart';
import 'package:analysis_server/src/lsp/error_or.dart';
import 'package:analysis_server/src/lsp/handlers/handlers.dart';

/// A trivial handler for the [CustomMethods.experimentalEcho] custom request.
/// This handler is used by the servers automated tests but can also be used for
/// client testing (if they opt-in to experimental handlers).
class ExperimentalEchoHandler extends SharedMessageHandler<Object?, Object?> {
ExperimentalEchoHandler(super.server);

@override
Method get handlesMessage => CustomMethods.experimentalEcho;

@override
LspJsonHandler<Object?> get jsonHandler =>
LspJsonHandler<void>((_, _) => true, (obj) => obj);

@override
bool get requiresTrustedCaller => false;

@override
Future<ErrorOr<Object?>> handle(
Object? params,
MessageInfo message,
CancellationToken token,
) async {
return success(params);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ class _SuperComputer {
return _lastFragment(member);
}

Fragment? _lastFragment(FragmentedElement? element) {
Fragment? _lastFragment(Element2? element) {
Fragment? fragment = element?.firstFragment;
while (fragment?.nextFragment != null) {
fragment = fragment?.nextFragment;
Expand Down
2 changes: 2 additions & 0 deletions pkg/analysis_server/lib/src/lsp/handlers/handler_states.dart
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import 'package:analysis_server/src/lsp/handlers/custom/handler_connect_to_dtd.d
import 'package:analysis_server/src/lsp/handlers/custom/handler_dart_text_document_content_provider.dart';
import 'package:analysis_server/src/lsp/handlers/custom/handler_diagnostic_server.dart';
import 'package:analysis_server/src/lsp/handlers/custom/handler_editable_arguments.dart';
import 'package:analysis_server/src/lsp/handlers/custom/handler_experimental_echo.dart';
import 'package:analysis_server/src/lsp/handlers/custom/handler_imports.dart';
import 'package:analysis_server/src/lsp/handlers/custom/handler_reanalyze.dart';
import 'package:analysis_server/src/lsp/handlers/custom/handler_super.dart';
Expand Down Expand Up @@ -128,6 +129,7 @@ class InitializedStateMessageHandler extends ServerStateMessageHandler {
DocumentHighlightsHandler.new,
DocumentSymbolHandler.new,
EditableArgumentsHandler.new,
ExperimentalEchoHandler.new,
FormatOnTypeHandler.new,
FormatRangeHandler.new,
FormattingHandler.new,
Expand Down
7 changes: 7 additions & 0 deletions pkg/analysis_server/lib/src/lsp/handlers/handlers.dart
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import 'package:analyzer_plugin/protocol/protocol.dart';
import 'package:analyzer_plugin/src/protocol/protocol_internal.dart';
import 'package:analyzer_plugin/src/utilities/client_uri_converter.dart';
import 'package:language_server_protocol/json_parsing.dart';
import 'package:meta/meta.dart';
import 'package:path/path.dart' as path;

export 'package:analyzer/src/utilities/cancellation.dart';
Expand Down Expand Up @@ -367,6 +368,12 @@ abstract class MessageHandler<P, R, S extends AnalysisServer>
/// The method that this handler can handle.
Method get handlesMessage;

/// Whether this handler is experimental (that is, the method is currently
/// prefixed with 'experimental/').
@nonVirtual
bool get isExperimental =>
handlesMessage.toString().startsWith('experimental/');

/// A handler that can parse and validate JSON params.
LspJsonHandler<P> get jsonHandler;

Expand Down
15 changes: 5 additions & 10 deletions pkg/analysis_server/lib/src/protocol_server.dart
Original file line number Diff line number Diff line change
Expand Up @@ -302,16 +302,11 @@ Location? newLocation_fromElement2(engine.Element2? element) {
if (element == null) {
return null;
}
if (element is engine.FragmentedElement) {
var fragment = (element as engine.FragmentedElement).firstFragment;
var offset = fragment.nameOffset2 ?? 0;
var length = fragment.name2?.length ?? 0;
var range = engine.SourceRange(offset, length);
return _locationForArgs2(fragment, range);
} else {
assert(false, 'Could not convert ${element.runtimeType} to Location.');
return null;
}
var fragment = element.firstFragment;
var offset = fragment.nameOffset2 ?? 0;
var length = fragment.name2?.length ?? 0;
var range = engine.SourceRange(offset, length);
return _locationForArgs2(fragment, range);
}

/// Create a Location based on an [engine.SearchMatch].
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
// 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.

import 'package:analysis_server/src/utilities/extensions/object.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/element/element2.dart';
import 'package:analyzer/src/dart/analysis/session_helper.dart';
Expand Down Expand Up @@ -87,8 +86,7 @@ class ExecutableParameters {
} else if (invocation is ConstructorReferenceNode) {
element = invocation.element;
}
var firstFragment =
element.ifTypeOrNull<FragmentedElement>()?.firstFragment;
var firstFragment = element?.firstFragment;
if (element is ExecutableElement2 &&
!element.isSynthetic &&
firstFragment is ExecutableFragment) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import 'dart:async';
import 'package:analysis_server/lsp_protocol/protocol.dart';
import 'package:analysis_server/src/analysis_server.dart';
import 'package:analysis_server/src/lsp/client_capabilities.dart';
import 'package:analysis_server/src/lsp/constants.dart';
import 'package:analysis_server/src/lsp/error_or.dart';
import 'package:analysis_server/src/lsp/handlers/handler_states.dart';
import 'package:analysis_server/src/lsp/handlers/handlers.dart';
Expand Down Expand Up @@ -40,12 +41,13 @@ class DtdServices {
/// development and testing this will be restricted to selected methods (in
/// particular, those with well defined results that are not affected by
/// differences in client capabilities).
static const allowedLspMethods = <Method>{
static final allowedLspMethods = <Method>{
// When removing this allowlist or adding simple methods like
// textDocument/hover, skipped tests in `SharedDtdTests` can be unskipped.
// TODO(dantup): Enable this but add a flag so we can opt-in to experimental
// handlers being exposed over DTD while in dev.
// CustomMethods.dartTextDocumentEditableArguments,
CustomMethods.experimentalEcho,
CustomMethods.dartTextDocumentEditableArguments,
};

/// The name of the DTD service that methods will be registered under.
Expand All @@ -63,7 +65,14 @@ class DtdServices {

DtdConnectionState _state = DtdConnectionState.Connecting;

DtdServices._(this._server, this.dtdUri);
/// Whether to register experimental LSP handlers over DTD.
final bool registerExperimentalHandlers;

DtdServices._(
this._server,
this.dtdUri, {
this.registerExperimentalHandlers = false,
});

DtdConnectionState get state => _state;

Expand Down Expand Up @@ -215,7 +224,8 @@ class DtdServices {
) async {
await Future.wait([
for (var lspHandler in handler.messageHandlers.values)
if (allowedLspMethods.contains(lspHandler.handlesMessage))
if (allowedLspMethods.contains(lspHandler.handlesMessage) &&
(registerExperimentalHandlers || !lspHandler.isExperimental))
_registerLspService(lspHandler, dtd),
]);

Expand Down Expand Up @@ -257,10 +267,15 @@ class DtdServices {
/// made or fails to initialize.
static Future<ErrorOr<DtdServices>> connect(
AnalysisServer server,
Uri uri,
) async {
Uri uri, {
bool registerExperimentalHandlers = false,
}) async {
try {
var dtd = DtdServices._(server, uri);
var dtd = DtdServices._(
server,
uri,
registerExperimentalHandlers: registerExperimentalHandlers,
);
await dtd._connect();
return success(dtd);
} catch (e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,13 @@ import 'package:analyzer/dart/analysis/session.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/syntactic_entity.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/element2.dart';
import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/src/dart/analysis/driver.dart';
import 'package:analyzer/src/dart/analysis/index.dart';
import 'package:analyzer/src/dart/analysis/session_helper.dart';
import 'package:analyzer/src/utilities/cancellation.dart';
import 'package:analyzer/src/utilities/extensions/element.dart';
import 'package:analyzer_plugin/protocol/protocol_common.dart'
show RefactoringMethodParameter, SourceChange;

Expand Down Expand Up @@ -610,4 +612,8 @@ class RenameRefactoringElement {
final int length;

RenameRefactoringElement(this.element, this.offset, this.length);

Element2 get element2 {
return element.asElement2!;
}
}
21 changes: 10 additions & 11 deletions pkg/analysis_server/test/lsp/request_helpers_mixin.dart
Original file line number Diff line number Diff line change
Expand Up @@ -195,10 +195,13 @@ mixin LspRequestHelpersMixin {
);
}

Future<Null> connectToDtd(Uri uri) {
Future<Null> connectToDtd(Uri uri, {bool? registerExperimentalHandlers}) {
var request = makeRequest(
CustomMethods.connectToDtd,
ConnectToDtdParams(uri: uri),
ConnectToDtdParams(
uri: uri,
registerExperimentalHandlers: registerExperimentalHandlers,
),
);
return expectSuccessfulResponseTo<Null, Null>(request, (Null n) => n);
}
Expand Down Expand Up @@ -509,10 +512,7 @@ mixin LspRequestHelpersMixin {
);
}

Future<EditableArguments?> getEditableArguments(
Uri uri,
Position pos,
) {
Future<EditableArguments?> getEditableArguments(Uri uri, Position pos) {
var request = makeRequest(
CustomMethods.dartTextDocumentEditableArguments,
TextDocumentPositionParams(
Expand Down Expand Up @@ -563,10 +563,7 @@ mixin LspRequestHelpersMixin {
);
}

Future<List<Location>?> getImports(
Uri uri,
Position pos,
) {
Future<List<Location>?> getImports(Uri uri, Position pos) {
var request = makeRequest(
CustomMethods.imports,
TextDocumentPositionParams(
Expand All @@ -575,7 +572,9 @@ mixin LspRequestHelpersMixin {
),
);
return expectSuccessfulResponseTo(
request, _fromJsonList(Location.fromJson));
request,
_fromJsonList(Location.fromJson),
);
}

Future<List<InlayHint>> getInlayHints(Uri uri, Range range) {
Expand Down
Loading

0 comments on commit 35b329e

Please sign in to comment.