// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
using System;
namespace System.Management.Automation
{
///
/// Possible types of CompletionResults.
///
public enum CompletionResultType
{
/// An unknown result type, kept as text only.
Text = 0,
/// A history result type like the items out of get-history.
History = 1,
/// A command result type like the items out of get-command.
Command = 2,
/// A provider item.
ProviderItem = 3,
/// A provider container.
ProviderContainer = 4,
/// A property result type like the property items out of get-member.
Property = 5,
/// A method result type like the method items out of get-member.
Method = 6,
/// A parameter name result type like the Parameters property out of get-command items.
ParameterName = 7,
/// A parameter value result type.
ParameterValue = 8,
/// A variable result type like the items out of get-childitem variable.
Variable = 9,
/// A namespace.
Namespace = 10,
/// A type name.
Type = 11,
/// A keyword.
Keyword = 12,
/// A dynamic keyword.
DynamicKeyword = 13,
// If a new enum is added, there is a range test that uses DynamicKeyword for parameter validation
// that needs to be updated to use the new enum.
// We can't use a "MaxValue" enum because it's value would preclude ever adding a new enum.
}
///
/// Class used to store a tab completion or Intellisense result.
///
public class CompletionResult
{
///
/// Text to be used as the auto completion result.
///
private readonly string _completionText;
///
/// Text to be displayed in a list.
///
private readonly string _listItemText;
///
/// The text for the tooltip with details to be displayed about the object.
///
private readonly string _toolTip;
///
/// Type of completion result.
///
private readonly CompletionResultType _resultType;
///
/// Private member for null instance.
///
private static readonly CompletionResult s_nullInstance = new CompletionResult();
///
/// Gets the text to be used as the auto completion result.
///
public string CompletionText
{
get
{
if (this == s_nullInstance)
{
throw PSTraceSource.NewInvalidOperationException(TabCompletionStrings.NoAccessToProperties);
}
return _completionText;
}
}
///
/// Gets the text to be displayed in a list.
///
public string ListItemText
{
get
{
if (this == s_nullInstance)
{
throw PSTraceSource.NewInvalidOperationException(TabCompletionStrings.NoAccessToProperties);
}
return _listItemText;
}
}
///
/// Gets the type of completion result.
///
public CompletionResultType ResultType
{
get
{
if (this == s_nullInstance)
{
throw PSTraceSource.NewInvalidOperationException(TabCompletionStrings.NoAccessToProperties);
}
return _resultType;
}
}
///
/// Gets the text for the tooltip with details to be displayed about the object.
///
public string ToolTip
{
get
{
if (this == s_nullInstance)
{
throw PSTraceSource.NewInvalidOperationException(TabCompletionStrings.NoAccessToProperties);
}
return _toolTip;
}
}
///
/// Gets the null instance of type CompletionResult.
///
internal static CompletionResult Null
{
get { return s_nullInstance; }
}
///
/// Initializes a new instance of the CompletionResult class.
///
/// The text to be used as the auto completion result.
/// The text to be displayed in a list.
/// The type of completion result.
/// The text for the tooltip with details to be displayed about the object.
public CompletionResult(string completionText, string listItemText, CompletionResultType resultType, string toolTip)
{
if (string.IsNullOrEmpty(completionText))
{
throw PSTraceSource.NewArgumentNullException(nameof(completionText));
}
if (string.IsNullOrEmpty(listItemText))
{
throw PSTraceSource.NewArgumentNullException(nameof(listItemText));
}
if (resultType < CompletionResultType.Text || resultType > CompletionResultType.DynamicKeyword)
{
throw PSTraceSource.NewArgumentOutOfRangeException(nameof(resultType), resultType);
}
if (string.IsNullOrEmpty(toolTip))
{
throw PSTraceSource.NewArgumentNullException(nameof(toolTip));
}
_completionText = completionText;
_listItemText = listItemText;
_toolTip = toolTip;
_resultType = resultType;
}
///
/// Initializes a new instance of this class internally if the result out of TabExpansion is a string.
///
/// Completion text.
public CompletionResult(string completionText)
: this(completionText, completionText, CompletionResultType.Text, completionText)
{
}
///
/// An null instance of CompletionResult.
///
///
/// This can be used in argument completion, to indicate that the completion attempt has gone through the
/// native command argument completion methods.
///
private CompletionResult() { }
}
}