/// <inheritdoc/> public override async Task RegisterCodeFixesAsync( CodeFixContext context) { var localize = Localizers.Of <R>(R.ResourceManager); var title = localize(nameof(R.FixTitle)) .ToString(CultureInfo.CurrentCulture); var root = await context .Document.GetSyntaxRootAsync(context.CancellationToken) .ConfigureAwait(false); if (root is null) { return; } var diagnostic = context.Diagnostics[0]; var diagnosticSpan = diagnostic.Location.SourceSpan; var node = root.FindNodeOfType <AceSyntax>(diagnosticSpan); if (node is null) { return; } context.RegisterCodeFix( CodeAction.Create( title: title, createChangedSolution: c => Replace(context.Document, node, c), equivalenceKey: title), diagnostic); }
public void Replace_Bad() { var segment = Payload.AsMemory(); var sw = Stopwatch.StartNew(); for (var index = 0; index < Count; index++) { LoopSpan(segment); } sw.Stop(); Logger.WriteLine($"Span: {sw.Elapsed}"); void LoopSpan(ReadOnlyMemory <char> payload) { Localizers.ForEach(kv => { payload = payload.Replace($"@(((MarkupString)Localizer[\"{kv.Key}\"].Value).ToString())".AsSpan(), kv.Value); payload = payload.Replace($"@((MarkupString)Localizer[\"{kv.Key}\"].Value)".AsSpan(), kv.Value); payload = payload.Replace($"@Localizer[\"{kv.Key}\"]".AsSpan(), kv.Value); }); payload = payload.Replace("@@".AsSpan(), "@"); payload = payload.Replace("<".AsSpan(), "<"); payload = payload.Replace(">".AsSpan(), ">"); } }
/// <inheritdoc/> public override async Task RegisterCodeFixesAsync( CodeFixContext context) { var localize = Localizers.Of <R>(R.ResourceManager); var title = localize(nameof(R.FixTitle)) .ToString(CultureInfo.CurrentCulture); var root = await context .Document.GetSyntaxRootAsync(context.CancellationToken) .ConfigureAwait(false); if (root is null) { return; } var diagnostic = context.Diagnostics[0]; var span = diagnostic.Location.SourceSpan; var token = root.FindToken(span.Start, findInsideTrivia: true); context.RegisterCodeFix( CodeAction.Create( title: title, createChangedDocument: c => FixTask(context.Document, root, token), equivalenceKey: title), diagnostic); }
/// <inheritdoc/> public override async Task RegisterCodeFixesAsync( CodeFixContext context) { var localize = Localizers.Of <R>(R.ResourceManager); var insertFixTitle = localize(nameof(R.InsertFixTitle)) .ToString(CultureInfo.CurrentCulture); var replaceFixTitle = localize(nameof(R.ReplaceFixTitle)) .ToString(CultureInfo.CurrentCulture); var root = await context .Document.GetSyntaxRootAsync(context.CancellationToken) .ConfigureAwait(false); if (root is null) { return; } var diagnostic = context.Diagnostics[0]; var span = diagnostic.Location.SourceSpan; var token = root.FindToken(span.Start, findInsideTrivia: true); if (token == default) { return; }
private static DiagnosticDescriptor NewRule() { var localize = Localizers.Of <R>(R.ResourceManager); return(new DiagnosticDescriptor( DiagnosticId, localize(nameof(R.Title)), localize(nameof(R.MessageFormat)), Category, DiagnosticSeverity.Warning, isEnabledByDefault: true, description: localize(nameof(R.Description)), helpLinkUri: HelpLink.ToUri(DiagnosticId))); }
/// <inheritdoc/> public override async Task RegisterCodeFixesAsync( CodeFixContext context) { var localize = Localizers.Of <R>(R.ResourceManager); var title = localize(nameof(R.FixTitle)) .ToString(CultureInfo.CurrentCulture); var root = await context .Document.GetSyntaxRootAsync(context.CancellationToken) .ConfigureAwait(false); if (root is null) { return; } var diagnostic = context.Diagnostics[0]; var diagnosticSpan = diagnostic.Location.SourceSpan; string GetValue(string key) { var property = diagnostic.Properties[key]; if (property is null) { throw new NullReferenceException(nameof(property)); } return(property); } var node = root.FindNodeOfType <ForStatementSyntax>(diagnosticSpan); if (node is null) { return; } context.RegisterCodeFix( CodeAction.Create( title: title, createChangedDocument: c => Replace(context.Document, node, GetValue, c), equivalenceKey: title), diagnostic); }
public void Replace_Ok() { var sw = Stopwatch.StartNew(); for (var index = 0; index < Count; index++) { Loop(Payload); } sw.Stop(); Logger.WriteLine($"String: {sw.Elapsed}"); void Loop(string payload) { Localizers.ForEach(kv => { payload = payload.Replace($"@(((MarkupString)Localizer[\"{kv.Key}\"].Value).ToString())", kv.Value); payload = payload.Replace($"@((MarkupString)Localizer[\"{kv.Key}\"].Value)", kv.Value); payload = payload.Replace($"@Localizer[\"{kv.Key}\"]", kv.Value); }); payload = payload.Replace("@@", "@"); payload = payload.Replace("<", "<"); payload = payload.Replace(">", ">"); } }
static string FixTitle(string key) { var localize = Localizers.Of <R>(R.ResourceManager); return(localize(key).ToString(CultureInfo.CurrentCulture)); }