Files
sdk/pkg/analysis_server/tool/lsp_spec/custom/editable_arguments.dart
T
Danny Tuppeny da6eab18cb [analysis_server] Extract custom protocol classes to their own files
No functional changes here, it just extracts definitions of custom protocol classes that are not trivial into their own files.

Change-Id: I0194a3074d280b6423dfae8b5e522ec536ce0dab
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/504560
Commit-Queue: Keerti Parthasarathy <keertip@google.com>
Reviewed-by: Keerti Parthasarathy <keertip@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2026-05-20 09:52:18 -07:00

135 lines
4.5 KiB
Dart

// Copyright (c) 2026, 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 '../meta_model.dart';
import '../utils.dart';
/// Classes that support the Editable Arguments / Edit Argument features used by
/// the Property Editor.
final editableArgumentsClasses = <LspEntity>[
interface('EditableArguments', [
field('textDocument', type: 'TextDocumentIdentifier'),
field('name', type: 'string', canBeUndefined: true),
field('documentation', type: 'string', canBeUndefined: true),
// TODO(dantup): field('refactors', ...),
field('arguments', type: 'EditableArgument', array: true),
field('range', type: 'Range', comment: 'The range of the invocation.'),
]),
interface('EditableArgument', [
field(
'name',
type: 'string',
comment: 'The name of the corresponding parameter.',
),
field('documentation', type: 'string', canBeUndefined: true),
field(
'type',
type: 'string',
comment:
'The kind of parameter.\n\nThis is not necessarily the Dart type, '
'it is from a defined set of values that clients may understand '
'how to edit.',
),
Field(
name: 'value',
type: TypeReference.lspAny,
allowsNull: false,
allowsUndefined: true,
comment:
'The current value for this argument (provided only if '
'hasArgument=true).\n\nThis is only included if an explicit value '
'is given in the code and is a valid literal for the kind of '
'parameter. For expressions or named constants, this will not be '
'included and displayValue can be shown as the current value '
'instead.\n\nA value of `null` when hasArgument=true means the '
'argument has an explicit null value and not that defaultValue is '
'being used.',
),
field(
'hasArgument',
type: 'boolean',
comment:
'Whether an explicit argument exists for this parameter in the '
'code.\n\nThis will be true even if the explicit argument is the '
'same value as the parameter default or null.',
),
Field(
name: 'defaultValue',
type: TypeReference.lspAny,
allowsNull: false,
allowsUndefined: true,
comment:
'The default value for this parameter if no argument is supplied.'
'\n\nSetting the argument to this value does not remove it from '
'the argument list.',
),
field(
'displayValue',
type: 'string',
canBeUndefined: true,
comment:
'A string that can be displayed to indicate the value for this '
'argument.\n\nThis will be populated in cases where the source '
'code is not literally the same as the value field, for example an '
'expression or named constant.',
),
field(
'isRequired',
type: 'boolean',
comment: 'Whether an argument is required for this parameter.',
),
field(
'isNullable',
type: 'boolean',
comment:
'Whether this argument can be `null`.\n\nIt is possible for an '
'argument to be required, but still allow an explicit `null`.',
),
field(
'isDeprecated',
type: 'boolean',
comment: 'Whether the parameter is deprecated.',
),
field(
'isEditable',
type: 'boolean',
comment:
'Whether this argument can be add/edited.\n\nIf not, '
'notEditableReason will contain an explanation for why.',
),
field(
'notEditableReason',
type: 'String',
canBeUndefined: true,
comment:
'If isEditable is false, contains a human-readable '
'description of why.',
),
field(
'options',
type: 'string',
array: true,
canBeUndefined: true,
comment:
'The set of values allowed for this argument if it is an enum.\n\n'
'Values are qualified in the form `EnumName.valueName`.',
),
// TODO(dantup): field('properties', ...),
]),
interface('EditArgumentParams', [
field('textDocument', type: 'TextDocumentIdentifier'),
field('position', type: 'Position'),
field('edit', type: 'ArgumentEdit'),
]),
interface('ArgumentEdit', [
field('name', type: 'string'),
Field(
name: 'newValue',
type: TypeReference.lspAny,
allowsNull: true,
allowsUndefined: false,
),
]),
];