File: Language\FileKinds.cs
Web Access
Project: src\src\Razor\src\Compiler\Microsoft.CodeAnalysis.Razor.Compiler\src\Microsoft.CodeAnalysis.Razor.Compiler.csproj (Microsoft.CodeAnalysis.Razor.Compiler)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System;
using System.IO;
using Microsoft.AspNetCore.Razor.Language.Components;
 
namespace Microsoft.AspNetCore.Razor.Language;
 
public static class FileKinds
{
    public const string ComponentFileExtension = ".razor";
    public const string LegacyFileExtension = ".cshtml";
 
    /// <summary>
    ///  Returns <see langword="true"/> if the specified value represents a component or component import.
    /// </summary>
    public static bool IsComponent(this RazorFileKind fileKind)
        => fileKind is RazorFileKind.Component or RazorFileKind.ComponentImport;
 
    /// <summary>
    ///  Returns <see langword="true"/> if the specified value represents a component import.
    /// </summary>
    public static bool IsComponentImport(this RazorFileKind fileKind)
        => fileKind is RazorFileKind.ComponentImport;
 
    /// <summary>
    ///  Returns <see langword="true"/> if the specified value represents a legacy file kind.
    /// </summary>
    public static bool IsLegacy(this RazorFileKind fileKind)
        => fileKind is RazorFileKind.Legacy;
 
    /// <summary>
    ///  Compares the given file path to known Razor file extensions and names to determine the <see cref="RazorFileKind"/>.
    ///  Returns <see langword="true"/> if a file kind can be determined; otherwise, <see langword="false"/>.
    /// </summary>
    public static bool TryGetFileKindFromPath(string filePath, out RazorFileKind fileKind)
    {
        ArgHelper.ThrowIfNull(filePath);
 
        var fileName = Path.GetFileName(filePath);
 
        if (string.Equals(ComponentHelpers.ImportsFileName, fileName, StringComparison.Ordinal))
        {
            fileKind = RazorFileKind.ComponentImport;
            return true;
        }
 
        var extension = Path.GetExtension(filePath);
 
        if (string.Equals(ComponentFileExtension, extension, StringComparison.OrdinalIgnoreCase))
        {
            fileKind = RazorFileKind.Component;
            return true;
        }
 
        if (string.Equals(LegacyFileExtension, extension, StringComparison.OrdinalIgnoreCase))
        {
            fileKind = RazorFileKind.Legacy;
            return true;
        }
 
        fileKind = default;
        return false;
    }
 
    /// <summary>
    ///  Compares the given file path to known Razor file extensions and names to determine the <see cref="RazorFileKind"/>.
    ///  If a file kind can't be determined, the result is <see cref="RazorFileKind.Legacy"/>.
    /// </summary>
    public static RazorFileKind GetFileKindFromPath(string filePath)
        => TryGetFileKindFromPath(filePath, out var fileKind)
            ? fileKind
            : RazorFileKind.Legacy;
}