| File: CliCompletion.cs | Web Access |
| Project: src\sdk\src\Cli\dotnet\dotnet.csproj (dotnet) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. #nullable disable using System.CommandLine.Completions; using Microsoft.Build.Evaluation; using Microsoft.DotNet.Cli.Utils; using static System.Array; namespace Microsoft.DotNet.Cli; internal static class CliCompletion { private static CompletionItem ToCompletionItem(string s) => new(s); public static IEnumerable<CompletionItem> TargetFrameworksFromProjectFile(CompletionContext _) { try { return GetMSBuildProject()?.GetTargetFrameworks().Select(tf => tf.GetShortFolderName()).Select(ToCompletionItem) ?? Empty<CompletionItem>(); } catch (Exception) { return Empty<CompletionItem>(); } } private static void Report(Exception e) => Reporter.Verbose.WriteLine($"Exception occurred while getting completions: {e}"); public static IEnumerable<CompletionItem> RuntimesFromProjectFile(CompletionContext _) { try { return GetMSBuildProject()?.GetRuntimeIdentifiers().Select(ToCompletionItem) ?? Empty<CompletionItem>(); } catch (Exception) { return Empty<CompletionItem>(); } } public static IEnumerable<CompletionItem> ProjectReferencesFromProjectFile(CompletionContext _) { try { return GetMSBuildProject()?.GetProjectToProjectReferences().Select(r => ToCompletionItem(r.Include)) ?? Empty<CompletionItem>(); } catch (Exception) { return Empty<CompletionItem>(); } } public static IEnumerable<CompletionItem> ConfigurationsFromProjectFileOrDefaults(CompletionContext _) { try { return (GetMSBuildProject()?.GetConfigurations() ?? ["Debug", "Release"]).Select(ToCompletionItem); } catch (Exception) { return Empty<CompletionItem>(); } } private static MsbuildProject GetMSBuildProject() { try { return MsbuildProject.FromFileOrDirectory( new ProjectCollection(), Directory.GetCurrentDirectory(), interactive: false); } catch (Exception e) { Report(e); return null; } } }