File: EmbeddedLanguages\EmbeddedLanguageInfo.cs
Web Access
Project: ..\..\..\src\Features\Core\Portable\Microsoft.CodeAnalysis.Features.csproj (Microsoft.CodeAnalysis.Features)
// 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 System.Collections.Immutable;
using Microsoft.CodeAnalysis.EmbeddedLanguages.VirtualChars;
using Microsoft.CodeAnalysis.Host;
using Microsoft.CodeAnalysis.LanguageService;
using Microsoft.CodeAnalysis.Shared.Collections;
 
namespace Microsoft.CodeAnalysis.EmbeddedLanguages
{
    internal readonly struct EmbeddedLanguageInfo
    {
        public readonly ISyntaxFacts SyntaxFacts;
        public readonly ISemanticFactsService SemanticFacts;
        public readonly IVirtualCharService VirtualCharService;
 
        public readonly ISyntaxKinds SyntaxKinds => SyntaxFacts.SyntaxKinds;
 
        public EmbeddedLanguageInfo(
            ISyntaxFacts syntaxFacts,
            ISemanticFactsService semanticFacts,
            IVirtualCharService virtualCharService)
        {
            SyntaxFacts = syntaxFacts;
            SemanticFacts = semanticFacts;
            VirtualCharService = virtualCharService;
 
            using var array = TemporaryArray<int>.Empty;
            array.Add(syntaxFacts.SyntaxKinds.StringLiteralToken);
            array.AsRef().AddIfNotNull(syntaxFacts.SyntaxKinds.SingleLineRawStringLiteralToken);
            array.AsRef().AddIfNotNull(syntaxFacts.SyntaxKinds.MultiLineRawStringLiteralToken);
            AllStringLiteralKinds = array.ToImmutableAndClear();
        }
 
        public readonly ImmutableArray<int> AllStringLiteralKinds { get; }
 
        public readonly bool IsAnyStringLiteral(int rawKind)
        {
            return rawKind == SyntaxKinds.StringLiteralToken ||
                   rawKind == SyntaxKinds.SingleLineRawStringLiteralToken ||
                   rawKind == SyntaxKinds.MultiLineRawStringLiteralToken ||
                   rawKind == SyntaxKinds.Utf8StringLiteralToken ||
                   rawKind == SyntaxKinds.Utf8SingleLineRawStringLiteralToken ||
                   rawKind == SyntaxKinds.Utf8MultiLineRawStringLiteralToken;
        }
    }
}