|
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using Microsoft.CodeAnalysis.Editing;
using Microsoft.CodeAnalysis.Shared.Extensions;
namespace Microsoft.CodeAnalysis.CSharp.Features.EmbeddedLanguages;
internal static class EmbeddedLanguageUtilities
{
internal static void AddComment(SyntaxEditor editor, SyntaxToken stringLiteral, string commentContents)
{
var triviaList = SyntaxFactory.TriviaList(
SyntaxFactory.Comment($"/*{commentContents}*/"),
SyntaxFactory.ElasticSpace);
var newStringLiteral = stringLiteral.WithLeadingTrivia(
stringLiteral.LeadingTrivia.AddRange(triviaList));
var parent = stringLiteral.GetRequiredParent();
editor.ReplaceNode(
parent,
parent.ReplaceToken(stringLiteral, newStringLiteral));
}
public static string EscapeText(string text, SyntaxToken token)
{
// This function is called when Completion needs to escape something its going to insert into the user's
// string token. This means that we only have to escape things that completion could insert. In this case,
// the only regex character that is relevant is the \ character, and it's only relevant if we insert into a
// normal string and not a verbatim string. There are no other regex characters that completion will
// produce that need any escaping.
return token.Kind() is SyntaxKind.StringLiteralToken or SyntaxKind.Utf8StringLiteralToken && !token.IsVerbatimStringLiteral()
? text.Replace(@"\", @"\\")
: text;
}
}
|