CodeAction
имеет отдельные ComputePreviewOperationsAsync()
и ComputeOperationsAsync()
. Когда они возвращают разные ценности, я считаю, что вы ищете. Но если вы используете общий подход при вызове CodeAction.Create()
, оба значения будут возвращать одинаковые значения.
Вместо этого вы можете создать собственный класс, наследующий от CodeAction
, и переопределяет методы так, как вы хотите. Например:
class NoPreviewCodeAction : CodeAction
{
private readonly Func<CancellationToken, Task<Solution>> createChangedSolution;
public override string Title { get; }
public override string EquivalenceKey { get; }
public NoPreviewCodeAction(
string title, Func<CancellationToken, Task<Solution>> createChangedSolution,
string equivalenceKey = null)
{
this.createChangedSolution = createChangedSolution;
Title = title;
EquivalenceKey = equivalenceKey;
}
protected override Task<IEnumerable<CodeActionOperation>> ComputePreviewOperationsAsync(
CancellationToken cancellationToken)
{
return Task.FromResult(Enumerable.Empty<CodeActionOperation>());
}
protected override Task<Solution> GetChangedSolutionAsync(
CancellationToken cancellationToken)
{
return createChangedSolution(cancellationToken);
}
}
Эта версия полностью отключает предварительный просмотр. Другой вариант - сделать предварительный просмотр другим путем, например. запрашивая базу данных для следующего значения, но не обновляя ее.
Фактически он увеличивается с шагом 3 раза, но как только я отключу предварительный просмотр, я должен быть в состоянии развернуть дальше. Любая помощь приветствуется. – Lander
Не можете ли вы реорганизовать свой код, чтобы делать только приращение DB при выполнении команды «CodeAction»? – Tamas
у меня есть это в регистре codefix асинхронной context.RegisterCodeFix ( CodeAction.Create ( название: название, createChangedDocument: с => createItemInDB (context.Document, декларация, с), equivalenceKey: название), диагностики); – Lander