diff --git a/ILSpy/Languages/CSharpILMixedLanguage.cs b/ILSpy/Languages/CSharpILMixedLanguage.cs index 1aec1b9a3..6386d63dc 100644 --- a/ILSpy/Languages/CSharpILMixedLanguage.cs +++ b/ILSpy/Languages/CSharpILMixedLanguage.cs @@ -181,13 +181,13 @@ namespace ICSharpCode.ILSpy.Languages output.Write("// "); output.BeginSpan(gray); if (isSingleLine) - output.Write(text.Substring(0, startColumn).TrimStart()); + output.Write(text.AsSpan(0, startColumn).TrimStart()); else - output.Write(text.Substring(0, startColumn)); + output.Write(text.AsSpan(0, startColumn)); output.EndSpan(); - output.Write(text.Substring(startColumn, endColumn - startColumn)); + output.Write(text.AsSpan(startColumn, endColumn - startColumn)); output.BeginSpan(gray); - output.Write(text.Substring(endColumn)); + output.Write(text.AsSpan(endColumn)); output.EndSpan(); output.WriteLine(); } diff --git a/ILSpy/TextView/AvaloniaEditTextOutput.cs b/ILSpy/TextView/AvaloniaEditTextOutput.cs index 71e076651..58132a54f 100644 --- a/ILSpy/TextView/AvaloniaEditTextOutput.cs +++ b/ILSpy/TextView/AvaloniaEditTextOutput.cs @@ -186,6 +186,13 @@ namespace ICSharpCode.ILSpy.TextView CheckLength(); } + public void Write(ReadOnlySpan text) + { + WriteIndentIfNeeded(); + builder.Append(text); + CheckLength(); + } + public void WriteLine() { if (IgnoreNewLineAndIndent) diff --git a/ILSpy/TextView/ISmartTextOutput.cs b/ILSpy/TextView/ISmartTextOutput.cs index f69acbb8c..a84ebded9 100644 --- a/ILSpy/TextView/ISmartTextOutput.cs +++ b/ILSpy/TextView/ISmartTextOutput.cs @@ -48,6 +48,13 @@ namespace ICSharpCode.ILSpy.TextView void BeginSpan(HighlightingColor highlightingColor); void EndSpan(); + /// + /// Writes a slice of text without requiring the caller to allocate an intermediate + /// string. Implementations that buffer internally should override the default, + /// which falls back to . + /// + void Write(ReadOnlySpan text) => Write(text.ToString()); + /// /// Title displayed in the document tab's header. ///