[analysis_server] Rename some LSP spec classes to match upcoming JSON models

Change-Id: Icbb071762ca86fd0ba75e4653e80ae480ce3e1a9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/244406
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
Danny Tuppeny 2022-05-11 19:06:04 +00:00 committed by Commit Bot
parent 3c231e4f57
commit a93a648e7f
9 changed files with 967 additions and 888 deletions

File diff suppressed because it is too large Load diff

View file

@ -137,12 +137,12 @@ class ServerCapabilitiesComputer {
Set<Registration> currentRegistrations = {};
var _lastRegistrationId = 0;
final dartFiles = DocumentFilter(language: 'dart', scheme: 'file');
final pubspecFile = DocumentFilter(
final dartFiles = TextDocumentFilter(language: 'dart', scheme: 'file');
final pubspecFile = TextDocumentFilter(
language: 'yaml', scheme: 'file', pattern: '**/pubspec.yaml');
final analysisOptionsFile = DocumentFilter(
final analysisOptionsFile = TextDocumentFilter(
language: 'yaml', scheme: 'file', pattern: '**/analysis_options.yaml');
final fixDataFile = DocumentFilter(
final fixDataFile = TextDocumentFilter(
language: 'yaml', scheme: 'file', pattern: '**/lib/fix_data.yaml');
ServerCapabilitiesComputer(this._server);
@ -303,7 +303,7 @@ class ServerCapabilitiesComputer {
// All published plugins use something like `*.extension` as
// interestingFiles. Prefix a `**/` so that the glob matches nested
// folders as well.
.map((glob) => DocumentFilter(scheme: 'file', pattern: '**/$glob'));
.map((glob) => TextDocumentFilter(scheme: 'file', pattern: '**/$glob'));
final pluginTypesExcludingDart =
pluginTypes.where((filter) => filter.pattern != '**/*.dart');

View file

@ -33,7 +33,7 @@ class AnalyzerCustomStatusTest extends AnalyzerStatusTest {
abstract class AnalyzerStatusTest extends AbstractLspAnalysisServerTest {
bool get progressSupport;
ClientCapabilitiesWindow get _windowCapabilities => progressSupport
WindowClientCapabilities get _windowCapabilities => progressSupport
? withWorkDoneProgressSupport(emptyWindowClientCapabilities)
: emptyWindowClientCapabilities;

View file

@ -491,8 +491,9 @@ class InitializationTest extends AbstractLspAnalysisServerTest {
.registrations;
final documentFilterSql =
DocumentFilter(scheme: 'file', pattern: '**/*.sql');
final documentFilterDart = DocumentFilter(language: 'dart', scheme: 'file');
TextDocumentFilter(scheme: 'file', pattern: '**/*.sql');
final documentFilterDart =
TextDocumentFilter(language: 'dart', scheme: 'file');
expect(
registrations,

View file

@ -719,7 +719,7 @@ class RenameTest extends AbstractLspAnalysisServerTest {
String? filePath,
String? expectedFilePath,
bool sendRenameVersion = true,
ClientCapabilitiesWorkspace? workspaceCapabilities,
WorkspaceClientCapabilities? workspaceCapabilities,
Map<String, String>? contents,
}) async {
contents ??= {};

View file

@ -227,9 +227,9 @@ abstract class AbstractLspAnalysisServerTest
mixin ClientCapabilitiesHelperMixin {
final emptyTextDocumentClientCapabilities = TextDocumentClientCapabilities();
final emptyWorkspaceClientCapabilities = ClientCapabilitiesWorkspace();
final emptyWorkspaceClientCapabilities = WorkspaceClientCapabilities();
final emptyWindowClientCapabilities = ClientCapabilitiesWindow();
final emptyWindowClientCapabilities = WindowClientCapabilities();
TextDocumentClientCapabilities extendTextDocumentCapabilities(
TextDocumentClientCapabilities source,
@ -240,22 +240,22 @@ mixin ClientCapabilitiesHelperMixin {
return TextDocumentClientCapabilities.fromJson(json);
}
ClientCapabilitiesWindow extendWindowCapabilities(
ClientCapabilitiesWindow source,
WindowClientCapabilities extendWindowCapabilities(
WindowClientCapabilities source,
Map<String, dynamic> windowCapabilities,
) {
final json = source.toJson();
mergeJson(windowCapabilities, json);
return ClientCapabilitiesWindow.fromJson(json);
return WindowClientCapabilities.fromJson(json);
}
ClientCapabilitiesWorkspace extendWorkspaceCapabilities(
ClientCapabilitiesWorkspace source,
WorkspaceClientCapabilities extendWorkspaceCapabilities(
WorkspaceClientCapabilities source,
Map<String, dynamic> workspaceCapabilities,
) {
final json = source.toJson();
mergeJson(workspaceCapabilities, json);
return ClientCapabilitiesWorkspace.fromJson(json);
return WorkspaceClientCapabilities.fromJson(json);
}
void mergeJson(Map<String, dynamic> source, Map<String, dynamic> dest) {
@ -306,8 +306,8 @@ mixin ClientCapabilitiesHelperMixin {
});
}
ClientCapabilitiesWorkspace withAllSupportedWorkspaceDynamicRegistrations(
ClientCapabilitiesWorkspace source,
WorkspaceClientCapabilities withAllSupportedWorkspaceDynamicRegistrations(
WorkspaceClientCapabilities source,
) {
// This list (when combined with the textDocument list) should match all of
// the fields listed in `ClientDynamicRegistrations.supported`.
@ -316,8 +316,8 @@ mixin ClientCapabilitiesHelperMixin {
});
}
ClientCapabilitiesWorkspace withApplyEditSupport(
ClientCapabilitiesWorkspace source,
WorkspaceClientCapabilities withApplyEditSupport(
WorkspaceClientCapabilities source,
) {
return extendWorkspaceCapabilities(source, {'applyEdit': true});
}
@ -407,8 +407,8 @@ mixin ClientCapabilitiesHelperMixin {
});
}
ClientCapabilitiesWorkspace withConfigurationSupport(
ClientCapabilitiesWorkspace source,
WorkspaceClientCapabilities withConfigurationSupport(
WorkspaceClientCapabilities source,
) {
return extendWorkspaceCapabilities(source, {'configuration': true});
}
@ -434,16 +434,16 @@ mixin ClientCapabilitiesHelperMixin {
});
}
ClientCapabilitiesWorkspace withDidChangeConfigurationDynamicRegistration(
ClientCapabilitiesWorkspace source,
WorkspaceClientCapabilities withDidChangeConfigurationDynamicRegistration(
WorkspaceClientCapabilities source,
) {
return extendWorkspaceCapabilities(source, {
'didChangeConfiguration': {'dynamicRegistration': true}
});
}
ClientCapabilitiesWorkspace withDocumentChangesSupport(
ClientCapabilitiesWorkspace source,
WorkspaceClientCapabilities withDocumentChangesSupport(
WorkspaceClientCapabilities source,
) {
return extendWorkspaceCapabilities(source, {
'workspaceEdit': {'documentChanges': true}
@ -471,8 +471,8 @@ mixin ClientCapabilitiesHelperMixin {
});
}
ClientCapabilitiesWorkspace withFileOperationDynamicRegistration(
ClientCapabilitiesWorkspace source,
WorkspaceClientCapabilities withFileOperationDynamicRegistration(
WorkspaceClientCapabilities source,
) {
return extendWorkspaceCapabilities(source, {
'fileOperations': {'dynamicRegistration': true}
@ -514,8 +514,8 @@ mixin ClientCapabilitiesHelperMixin {
});
}
ClientCapabilitiesWorkspace withResourceOperationKinds(
ClientCapabilitiesWorkspace source,
WorkspaceClientCapabilities withResourceOperationKinds(
WorkspaceClientCapabilities source,
List<ResourceOperationKind> kinds,
) {
return extendWorkspaceCapabilities(source, {
@ -548,8 +548,8 @@ mixin ClientCapabilitiesHelperMixin {
});
}
ClientCapabilitiesWindow withWorkDoneProgressSupport(
ClientCapabilitiesWindow source) {
WindowClientCapabilities withWorkDoneProgressSupport(
WindowClientCapabilities source) {
return extendWindowCapabilities(source, {'workDoneProgress': true});
}
}
@ -1410,8 +1410,8 @@ mixin LspAnalysisServerTestMixin implements ClientCapabilitiesHelperMixin {
Uri? rootUri,
List<Uri>? workspaceFolders,
TextDocumentClientCapabilities? textDocumentCapabilities,
ClientCapabilitiesWorkspace? workspaceCapabilities,
ClientCapabilitiesWindow? windowCapabilities,
WorkspaceClientCapabilities? workspaceCapabilities,
WindowClientCapabilities? windowCapabilities,
Map<String, Object?>? experimentalCapabilities,
Map<String, Object?>? initializationOptions,
bool throwOnFailure = true,

View file

@ -28,10 +28,12 @@ void main() {
});
test('with aliased list fields can be checked for equality', () {
final a = TextDocumentRegistrationOptions(
documentSelector: [DocumentFilter(language: 'dart', scheme: 'file')]);
final b = TextDocumentRegistrationOptions(
documentSelector: [DocumentFilter(language: 'dart', scheme: 'file')]);
final a = TextDocumentRegistrationOptions(documentSelector: [
TextDocumentFilter(language: 'dart', scheme: 'file')
]);
final b = TextDocumentRegistrationOptions(documentSelector: [
TextDocumentFilter(language: 'dart', scheme: 'file')
]);
expect(a, equals(b));
expect(a.hashCode, equals(b.hashCode));
@ -84,11 +86,14 @@ void main() {
});
test('consider subclasses when checking for equality', () {
final a = TextDocumentRegistrationOptions(
documentSelector: [DocumentFilter(language: 'dart', scheme: 'file')]);
final a = TextDocumentRegistrationOptions(documentSelector: [
TextDocumentFilter(language: 'dart', scheme: 'file')
]);
final b = TextDocumentSaveRegistrationOptions(
includeText: true,
documentSelector: [DocumentFilter(language: 'dart', scheme: 'file')]);
documentSelector: [
TextDocumentFilter(language: 'dart', scheme: 'file')
]);
expect(a, isNot(equals(b)));
expect(b, isNot(equals(a)));

View file

@ -65,6 +65,41 @@ void recordTypes(List<AstNode> types) {
.forEach((namespace) => _namespaces[namespace.name] = namespace);
}
/// Renames types that may have been generated with bad names.
Iterable<AstNode> renameTypes(List<AstNode> types) sync* {
const renames = {
// TODO(dantup): These entries can be removed after the
// the migration to JSON meta_model.
'ClientCapabilitiesWindow': 'WindowClientCapabilities',
'ClientCapabilitiesWorkspace': 'WorkspaceClientCapabilities',
'DocumentFilter': 'TextDocumentFilter',
};
for (final type in types) {
if (type is Interface) {
final newName = renames[type.name];
if (newName != null) {
// Replace with renamed interface.
yield Interface(
type.commentNode,
Token.identifier(newName),
type.typeArgs,
type.baseTypes,
type.members,
);
// Plus a TypeAlias for the old name.
yield TypeAlias(
type.commentNode,
Token.identifier(type.name),
Type.identifier(newName),
);
continue;
}
}
yield type;
}
}
TypeBase resolveTypeAlias(TypeBase type, {bool resolveEnumClasses = false}) {
if (type is Type) {
// The LSP spec contains type aliases for `integer` and `uinteger` that map
@ -156,6 +191,7 @@ bool _isSimpleType(TypeBase type) {
}
bool _isSpecType(TypeBase type) {
type = resolveTypeAlias(type);
return type is Type &&
(_interfaces.containsKey(type.name) ||
(_namespaces.containsKey(type.name)));

View file

@ -29,8 +29,13 @@ Future<void> main(List<String> arguments) async {
Directory(outFolder).createSync();
// Collect definitions for types in the spec and our custom extensions.
final specTypes = await getSpecClasses(args);
final customTypes = getCustomClasses();
var specTypes = await getSpecClasses(args);
var customTypes = getCustomClasses();
// Handle some renames of types where we generate names that might not be
// ideal.
specTypes = renameTypes(specTypes).toList();
customTypes = renameTypes(customTypes).toList();
// Record both sets of types in dictionaries for faster lookups, but also so
// they can reference each other and we can find the definitions during