[analysis_server] Fix LSP class name generation for nested inline types + minor renames

Change-Id: Ia8321eedeb783ffe5e91a508e258a87aa9efcf31
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/245372
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
Danny Tuppeny
2022-05-24 16:36:55 +00:00
committed by Commit Bot
parent 4f3714e595
commit c954d80f18
7 changed files with 871 additions and 699 deletions
File diff suppressed because it is too large Load Diff
@@ -137,12 +137,13 @@ class ServerCapabilitiesComputer {
Set<Registration> currentRegistrations = {};
var _lastRegistrationId = 0;
final dartFiles = TextDocumentFilter(language: 'dart', scheme: 'file');
final pubspecFile = TextDocumentFilter(
final dartFiles =
TextDocumentFilterWithScheme(language: 'dart', scheme: 'file');
final pubspecFile = TextDocumentFilterWithScheme(
language: 'yaml', scheme: 'file', pattern: '**/pubspec.yaml');
final analysisOptionsFile = TextDocumentFilter(
final analysisOptionsFile = TextDocumentFilterWithScheme(
language: 'yaml', scheme: 'file', pattern: '**/analysis_options.yaml');
final fixDataFile = TextDocumentFilter(
final fixDataFile = TextDocumentFilterWithScheme(
language: 'yaml', scheme: 'file', pattern: '**/lib/fix_data.yaml');
ServerCapabilitiesComputer(this._server);
@@ -303,7 +304,8 @@ class ServerCapabilitiesComputer {
// All published plugins use something like `*.extension` as
// interestingFiles. Prefix a `**/` so that the glob matches nested
// folders as well.
.map((glob) => TextDocumentFilter(scheme: 'file', pattern: '**/$glob'));
.map((glob) =>
TextDocumentFilterWithScheme(scheme: 'file', pattern: '**/$glob'));
final pluginTypesExcludingDart =
pluginTypes.where((filter) => filter.pattern != '**/*.dart');
@@ -491,9 +491,9 @@ class InitializationTest extends AbstractLspAnalysisServerTest {
.registrations;
final documentFilterSql =
TextDocumentFilter(scheme: 'file', pattern: '**/*.sql');
TextDocumentFilterWithScheme(scheme: 'file', pattern: '**/*.sql');
final documentFilterDart =
TextDocumentFilter(language: 'dart', scheme: 'file');
TextDocumentFilterWithScheme(language: 'dart', scheme: 'file');
expect(
registrations,
@@ -29,10 +29,10 @@ void main() {
test('with aliased list fields can be checked for equality', () {
final a = TextDocumentRegistrationOptions(documentSelector: [
TextDocumentFilter(language: 'dart', scheme: 'file')
TextDocumentFilterWithScheme(language: 'dart', scheme: 'file')
]);
final b = TextDocumentRegistrationOptions(documentSelector: [
TextDocumentFilter(language: 'dart', scheme: 'file')
TextDocumentFilterWithScheme(language: 'dart', scheme: 'file')
]);
expect(a, equals(b));
@@ -87,12 +87,12 @@ void main() {
test('consider subclasses when checking for equality', () {
final a = TextDocumentRegistrationOptions(documentSelector: [
TextDocumentFilter(language: 'dart', scheme: 'file')
TextDocumentFilterWithScheme(language: 'dart', scheme: 'file')
]);
final b = TextDocumentSaveRegistrationOptions(
includeText: true,
documentSelector: [
TextDocumentFilter(language: 'dart', scheme: 'file')
TextDocumentFilterWithScheme(language: 'dart', scheme: 'file')
]);
expect(a, isNot(equals(b)));
@@ -73,23 +73,26 @@ Iterable<AstNode> renameTypes(List<AstNode> types) sync* {
// the migration to JSON meta_model.
'ClientCapabilitiesWindow': 'WindowClientCapabilities',
'ClientCapabilitiesWorkspace': 'WorkspaceClientCapabilities',
'ClientCapabilitiesFileOperations': 'FileOperationClientCapabilities',
'ServerCapabilitiesFileOperations': 'FileOperationOptions',
'ClientCapabilitiesWorkspaceFileOperations':
'FileOperationClientCapabilities',
'ServerCapabilitiesWorkspaceFileOperations': 'FileOperationOptions',
'ClientCapabilitiesGeneral': 'GeneralClientCapabilities',
'CompletionClientCapabilitiesInsertTextModeSupport':
'CompletionClientCapabilitiesCompletionItemInsertTextModeSupport':
'CompletionItemInsertTextModeSupport',
'CompletionClientCapabilitiesResolveSupport':
'CompletionClientCapabilitiesCompletionItemResolveSupport':
'CompletionItemResolveSupport',
'CompletionClientCapabilitiesTagSupport': 'CompletionItemTagSupport',
'CodeActionClientCapabilitiesCodeActionKind':
'CompletionClientCapabilitiesCompletionItemTagSupport':
'CompletionItemTagSupport',
'CodeActionClientCapabilitiesCodeActionLiteralSupportCodeActionKind':
'CodeActionLiteralSupportCodeActionKind',
'DocumentFilter': 'TextDocumentFilter',
'ClientCapabilitiesStaleRequestSupport':
// In JSON model this becomes a union of literals which we assign improved
// names to (to avoid numeric suffixes).
'DocumentFilter': 'TextDocumentFilterWithScheme',
'ClientCapabilitiesGeneralStaleRequestSupport':
'GeneralClientCapabilitiesStaleRequestSupport',
'SignatureHelpClientCapabilitiesParameterInformation':
'SignatureHelpClientCapabilitiesSignatureInformationParameterInformation':
'SignatureInformationParameterInformation',
'NotebookDocumentChangeEventStructure':
'NotebookDocumentChangeEventCellsStructure',
'CompletionListItemDefaultsEditRange': 'CompletionItemEditRange',
};
for (final type in types) {
@@ -4735,7 +4735,7 @@ _Client Capability_:
<div class="anchorHolder"><a href="#typeHierarchyClientCapabilities" name="typeHierarchyClientCapabilities" class="linkableAnchor"></a></div>
```typescript
type TypeHierarchyClientCapabilities = {
export interface TypeHierarchyClientCapabilities {
/**
* Whether implementation supports dynamic registration. If this is set to
* `true` the client supports the new `(TextDocumentRegistrationOptions &
@@ -623,9 +623,10 @@ class Parser {
TypeBase type;
if (_match([TokenType.LEFT_BRACE])) {
// Inline interfaces.
final generatedName = _getAvailableName(containerName, fieldName);
final members = <Member>[];
while (!_check(TokenType.RIGHT_BRACE)) {
members.add(_member(containerName));
members.add(_member(generatedName));
}
_consume(TokenType.RIGHT_BRACE, 'Expected }');
@@ -638,7 +639,6 @@ class Parser {
type = MapType(indexer.indexType, indexer.valueType);
} else {
// Add a synthetic interface to the parsers list of nodes to represent this type.
final generatedName = _getAvailableName(containerName, fieldName);
_addNode(InlineInterface(generatedName, members));
// Record the type as a simple type that references this interface.
type = Type.identifier(generatedName);