blob: 15ef5940589fe2de2d2257471edde83820fed3cf [file] [log] [blame]
// Copyright (c) 2020, 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/src/services/completion/yaml/producer.dart';
import 'package:analysis_server/src/services/completion/yaml/yaml_completion_generator.dart';
import 'package:analyzer/file_system/file_system.dart';
/// A completion generator that can produce completion suggestions for fix data
/// files.
class FixDataGenerator extends YamlCompletionGenerator {
/// The producer representing the known valid structure of a fix data file.
static const MapProducer fixDataProducer = MapProducer({
'version': EmptyProducer(),
'transforms': ListProducer(MapProducer({
'title': EmptyProducer(),
'date': EmptyProducer(),
'bulkApply': BooleanProducer(),
'element': MapProducer({
// TODO(brianwilkerson) Support suggesting uris.
'uris': EmptyProducer(),
'class': EmptyProducer(),
'constant': EmptyProducer(),
'constructor': EmptyProducer(),
'enum': EmptyProducer(),
'extension': EmptyProducer(),
'field': EmptyProducer(),
'function': EmptyProducer(),
'getter': EmptyProducer(),
'method': EmptyProducer(),
'mixin': EmptyProducer(),
'setter': EmptyProducer(),
'typedef': EmptyProducer(),
'variable': EmptyProducer(),
'inClass': EmptyProducer(),
'inEnum': EmptyProducer(),
'inExtension': EmptyProducer(),
'inMixin': EmptyProducer(),
}),
'changes': _changesProducer,
'oneOf': ListProducer(MapProducer({
'if': EmptyProducer(),
'changes': _changesProducer,
})),
'variables': EmptyProducer(),
})),
});
/// The producer representing the known valid structure of a list of changes.
static const ListProducer _changesProducer = ListProducer(MapProducer({
// TODO(brianwilkerson) Create a way to tailor the list of additional
// keys based on the kind when a kind has already been provided.
'kind': EnumProducer([
'addParameter',
'addTypeParameter',
'removeParameter',
'rename',
'renameParameter',
]),
'index': EmptyProducer(),
'name': EmptyProducer(),
'style': EmptyProducer(),
'argumentValue': MapProducer({
'expression': EmptyProducer(),
'requiredIf': EmptyProducer(),
// TODO(brianwilkerson) Figure out how to support 'variables'.
'variables': EmptyProducer(),
}),
'extends': EmptyProducer(),
'oldName': EmptyProducer(),
'newName': EmptyProducer(),
}));
/// Initialize a newly created suggestion generator for fix data files.
FixDataGenerator(ResourceProvider resourceProvider)
: super(resourceProvider, null);
@override
Producer get topLevelProducer => fixDataProducer;
}