private Type GetParameterGenericType(ParameterAst parameter) { if (parameter.Attributes is null) { throw new ArgumentException($"Parameter '{parameter}' must have a type constraint"); } TypeConstraintAst typeConstraint = null; foreach (AttributeBaseAst attribute in parameter.Attributes) { if (attribute is TypeConstraintAst foundTypeConstraint) { typeConstraint = foundTypeConstraint; break; } } if (typeConstraint is null) { throw new ArgumentException($"Parameter '{parameter}' must have a type constraint"); } if (typeConstraint.TypeName is not GenericTypeName genericTypeName) { throw new ArgumentException($"Parameter '{parameter}' must declare a type of the form '[ArmParameter[TYPE]]'"); } return(genericTypeName.GenericArguments[0].GetReflectionType()); }
public override AstVisitAction VisitTypeConstraint(TypeConstraintAst typeConstraintAst) { if (typeConstraintAst.Parent is CatchClauseAst) { return(base.VisitTypeConstraint(typeConstraintAst)); } var typeName = typeConstraintAst.TypeName.Name; var accelerator = "."; var cmdName = "Type constraint"; HelpEntity help = null; var(acceleratorName, acceleratorFullTypeName) = Helpers.ResolveAccelerator(typeName); if (acceleratorName != null) { typeName = acceleratorName; accelerator = $", which is a type accelerator for '{acceleratorFullTypeName}'"; help = HelpTableQuery("about_type_accelerators"); cmdName = "Type accelerator"; } else if (typeConstraintAst.Parent is ConvertExpressionAst) { return(base.VisitTypeConstraint(typeConstraintAst)); } explanations.Add( new Explanation() { Description = $"Constrains the type to '{typeName}'{accelerator}", CommandName = cmdName, HelpResult = help }.AddDefaults(typeConstraintAst, explanations)); return(base.VisitTypeConstraint(typeConstraintAst)); }
public static TypeConstraintAst Update( this TypeConstraintAst ast, string typeName) { return(new TypeConstraintAst( ast.Extent, new TypeName(ast.TypeName.Extent, typeName))); }
public System.Object VisitTrap(System.Management.Automation.Language.TrapStatementAst trapStatementAst) { IScriptExtent mappedExtent = MapExtent(trapStatementAst.Extent); TypeConstraintAst mappedTrapType = (TypeConstraintAst)VisitTypeConstraint(trapStatementAst.TrapType); StatementBlockAst mappedBody = (StatementBlockAst)VisitStatementBlock(trapStatementAst.Body); return(new TrapStatementAst(mappedExtent, mappedTrapType, mappedBody)); }
public static ConvertExpressionAst Update( this ConvertExpressionAst ast, TypeConstraintAst typeConstraint = null, ExpressionAst child = null) { return(new ConvertExpressionAst( ast.Extent, typeConstraint?.Clone() ?? ast.Type.Clone(), child?.Clone() ?? ast.Child.Clone())); }
public static TrapStatementAst Update( this TrapStatementAst ast, TypeConstraintAst trapType = null, IEnumerable <StatementAst> statements = null) { return(new TrapStatementAst( ast.Extent, trapType?.Clone() ?? ast.TrapType?.Clone(), ast.Body?.Update(statements))); }
public System.Object VisitConvertExpression(System.Management.Automation.Language.ConvertExpressionAst convertExpressionAst) { IScriptExtent mappedExtent = MapExtent(convertExpressionAst.Extent); TypeConstraintAst mappedTypeConstraint = (TypeConstraintAst)VisitTypeConstraint(convertExpressionAst.Attribute as TypeConstraintAst); ExpressionAst mappedChild = _VisitExpression(convertExpressionAst.Child); return(new ConvertExpressionAst(mappedExtent, mappedTypeConstraint, mappedChild)); }
public static TypeConstraintAst Update( this TypeConstraintAst ast, string typeName, IEnumerable <ITypeName> genericTypeArguments) { return(new TypeConstraintAst( ast.Extent, new GenericTypeName( ast.TypeName.Extent, new TypeName(ast.TypeName.Extent, typeName), genericTypeArguments))); }
public static TypeConstraintAst Update( this TypeConstraintAst ast, string typeName, int arrayRank) { return(new TypeConstraintAst( ast.Extent, new ArrayTypeName( ast.TypeName.Extent, new TypeName(ast.TypeName.Extent, typeName), arrayRank))); }
private static bool TryGetTypeConstraint(ParameterAst parameter, out TypeConstraintAst typeConstraint) { if (parameter.Attributes is not null) { foreach (AttributeBaseAst attributeAst in parameter.Attributes) { if (attributeAst is TypeConstraintAst foundTypeConstraint) { typeConstraint = foundTypeConstraint; return(true); } } } typeConstraint = null; return(false); }
public override AttributeBaseAst VisitTypeConstraint(TypeConstraintAst typeConstraintAst) => VisitOther(base.VisitTypeConstraint(typeConstraintAst));
internal List <CompletionResult> GetResultHelper(CompletionContext completionContext, out int replacementIndex, out int replacementLength, bool isQuotedString) { replacementIndex = -1; replacementLength = -1; Token tokenAtCursor = completionContext.TokenAtCursor; Ast lastAst = completionContext.RelatedAsts.Last <Ast>(); List <CompletionResult> list = null; if (tokenAtCursor == null) { if (!isQuotedString && (((((lastAst is CommandParameterAst) || (lastAst is CommandAst)) || ((lastAst is ExpressionAst) && (lastAst.Parent is CommandAst))) || ((lastAst is ExpressionAst) && (lastAst.Parent is CommandParameterAst))) || (((lastAst is ExpressionAst) && (lastAst.Parent is ArrayLiteralAst)) && ((lastAst.Parent.Parent is CommandAst) || (lastAst.Parent.Parent is CommandParameterAst))))) { completionContext.WordToComplete = string.Empty; HashtableAst hashtableAst = lastAst as HashtableAst; if (hashtableAst != null) { completionContext.ReplacementIndex = replacementIndex = completionContext.CursorPosition.Offset; completionContext.ReplacementLength = replacementLength = 0; list = CompletionCompleters.CompleteHashtableKey(completionContext, hashtableAst); } else { list = CompletionCompleters.CompleteCommandArgument(completionContext); replacementIndex = completionContext.ReplacementIndex; replacementLength = completionContext.ReplacementLength; } } else if (!isQuotedString) { bool flag = false; if ((lastAst is ErrorExpressionAst) && (lastAst.Parent is FileRedirectionAst)) { flag = true; } else if ((lastAst is ErrorStatementAst) && CompleteAgainstSwitchFile(lastAst, completionContext.TokenBeforeCursor)) { flag = true; } if (flag) { completionContext.WordToComplete = string.Empty; list = new List <CompletionResult>(CompletionCompleters.CompleteFilename(completionContext)); replacementIndex = completionContext.ReplacementIndex; replacementLength = completionContext.ReplacementLength; } } } else { TokenKind kind; replacementIndex = tokenAtCursor.Extent.StartScriptPosition.Offset; replacementLength = tokenAtCursor.Extent.EndScriptPosition.Offset - replacementIndex; completionContext.ReplacementIndex = replacementIndex; completionContext.ReplacementLength = replacementLength; switch (tokenAtCursor.Kind) { case TokenKind.ColonColon: case TokenKind.Dot: replacementIndex += tokenAtCursor.Text.Length; replacementLength = 0; list = CompletionCompleters.CompleteMember(completionContext, tokenAtCursor.Kind == TokenKind.ColonColon); goto Label_05DC; case TokenKind.Multiply: case TokenKind.Identifier: case TokenKind.Generic: list = this.GetResultForIdentifier(completionContext, ref replacementIndex, ref replacementLength, isQuotedString); goto Label_05DC; case TokenKind.Minus: if (CompleteOperator(tokenAtCursor, lastAst)) { list = CompletionCompleters.CompleteOperator(""); } else if (CompleteAgainstStatementFlags(completionContext.RelatedAsts[0], null, tokenAtCursor, out kind)) { completionContext.WordToComplete = tokenAtCursor.Text; list = CompletionCompleters.CompleteStatementFlags(kind, completionContext.WordToComplete); } goto Label_05DC; case TokenKind.Redirection: if ((lastAst is ErrorExpressionAst) && (lastAst.Parent is FileRedirectionAst)) { completionContext.WordToComplete = string.Empty; completionContext.ReplacementIndex = replacementIndex += tokenAtCursor.Text.Length; completionContext.ReplacementLength = replacementLength = 0; list = new List <CompletionResult>(CompletionCompleters.CompleteFilename(completionContext)); } goto Label_05DC; case TokenKind.Variable: case TokenKind.SplattedVariable: completionContext.WordToComplete = ((VariableToken)tokenAtCursor).VariablePath.UserPath; list = CompletionCompleters.CompleteVariable(completionContext); goto Label_05DC; case TokenKind.Parameter: if (!isQuotedString) { completionContext.WordToComplete = tokenAtCursor.Text; CommandAst parent = lastAst.Parent as CommandAst; if ((!(lastAst is StringConstantExpressionAst) || (parent == null)) || (parent.CommandElements.Count != 1)) { if (CompleteAgainstStatementFlags(null, lastAst, null, out kind)) { list = CompletionCompleters.CompleteStatementFlags(kind, completionContext.WordToComplete); } else if (CompleteOperator(tokenAtCursor, lastAst)) { list = CompletionCompleters.CompleteOperator(completionContext.WordToComplete); } else if (completionContext.WordToComplete.EndsWith(":", StringComparison.Ordinal)) { replacementIndex = tokenAtCursor.Extent.EndScriptPosition.Offset; replacementLength = 0; completionContext.WordToComplete = string.Empty; list = CompletionCompleters.CompleteCommandArgument(completionContext); } else { list = CompletionCompleters.CompleteCommandParameter(completionContext); } } else { list = CompleteFileNameAsCommand(completionContext); } } goto Label_05DC; case TokenKind.Number: if ((lastAst is ConstantExpressionAst) && (((lastAst.Parent is CommandAst) || (lastAst.Parent is CommandParameterAst)) || ((lastAst.Parent is ArrayLiteralAst) && ((lastAst.Parent.Parent is CommandAst) || (lastAst.Parent.Parent is CommandParameterAst))))) { completionContext.WordToComplete = tokenAtCursor.Text; list = CompletionCompleters.CompleteCommandArgument(completionContext); replacementIndex = completionContext.ReplacementIndex; replacementLength = completionContext.ReplacementLength; } goto Label_05DC; case TokenKind.Comment: if (!isQuotedString) { completionContext.WordToComplete = tokenAtCursor.Text; list = CompletionCompleters.CompleteComment(completionContext); } goto Label_05DC; case TokenKind.StringLiteral: case TokenKind.StringExpandable: list = this.GetResultForString(completionContext, ref replacementIndex, ref replacementLength, isQuotedString); goto Label_05DC; case TokenKind.RBracket: if (lastAst is TypeExpressionAst) { TypeExpressionAst targetExpr = (TypeExpressionAst)lastAst; List <CompletionResult> results = new List <CompletionResult>(); CompletionCompleters.CompleteMemberHelper(true, "*", targetExpr, completionContext, results); if (results.Count > 0) { replacementIndex++; replacementLength = 0; list = (from entry in results let completionText = TokenKind.ColonColon.Text() + entry.CompletionText select new CompletionResult(completionText, entry.ListItemText, entry.ResultType, entry.ToolTip)).ToList <CompletionResult>(); } } goto Label_05DC; case TokenKind.Comma: if ((lastAst is ErrorExpressionAst) && ((lastAst.Parent is CommandAst) || (lastAst.Parent is CommandParameterAst))) { replacementIndex += replacementLength; replacementLength = 0; list = CompletionCompleters.CompleteCommandArgument(completionContext); } goto Label_05DC; } if ((tokenAtCursor.TokenFlags & TokenFlags.Keyword) != TokenFlags.None) { completionContext.WordToComplete = tokenAtCursor.Text; list = CompleteFileNameAsCommand(completionContext); List <CompletionResult> collection = CompletionCompleters.CompleteCommand(completionContext); if ((collection != null) && (collection.Count > 0)) { list.AddRange(collection); } } else { replacementIndex = -1; replacementLength = -1; } } Label_05DC: if ((list == null) || (list.Count == 0)) { TypeExpressionAst ast5 = completionContext.RelatedAsts.OfType <TypeExpressionAst>().FirstOrDefault <TypeExpressionAst>(); TypeName name = null; if (ast5 != null) { name = FindTypeNameToComplete(ast5.TypeName, this._cursorPosition); } else { TypeConstraintAst ast6 = completionContext.RelatedAsts.OfType <TypeConstraintAst>().FirstOrDefault <TypeConstraintAst>(); if (ast6 != null) { name = FindTypeNameToComplete(ast6.TypeName, this._cursorPosition); } } if (name != null) { replacementIndex = name.Extent.StartOffset; replacementLength = name.Extent.EndOffset - replacementIndex; completionContext.WordToComplete = name.FullName; list = CompletionCompleters.CompleteType(completionContext, "", ""); } } if ((list == null) || (list.Count == 0)) { HashtableAst ast7 = lastAst as HashtableAst; if (ast7 != null) { completionContext.ReplacementIndex = replacementIndex = completionContext.CursorPosition.Offset; completionContext.ReplacementLength = replacementLength = 0; list = CompletionCompleters.CompleteHashtableKey(completionContext, ast7); } } if ((list == null) || (list.Count == 0)) { string text = completionContext.RelatedAsts[0].Extent.Text; if ((Regex.IsMatch(text, @"^[\S]+$") && (completionContext.RelatedAsts.Count > 0)) && (completionContext.RelatedAsts[0] is ScriptBlockAst)) { replacementIndex = completionContext.RelatedAsts[0].Extent.StartScriptPosition.Offset; replacementLength = completionContext.RelatedAsts[0].Extent.EndScriptPosition.Offset - replacementIndex; completionContext.WordToComplete = text; list = CompleteFileNameAsCommand(completionContext); } } return(list); }
public override object VisitTypeConstraint(TypeConstraintAst typeConstraintAst) { script_.Write("[" + typeConstraintAst.TypeName + "]"); return(typeConstraintAst); }
public object VisitTypeConstraint(TypeConstraintAst typeConstraintAst) { Console.WriteLine("Visited an TypeConstraintAst."); return(typeConstraintAst); }
public override AstVisitAction VisitTypeConstraint(TypeConstraintAst typeConstraintAst) { Console.WriteLine("Visited an TypeConstraintAst."); Console.WriteLine(" " + typeConstraintAst.ToString().Replace(Environment.NewLine, Environment.NewLine + " ")); return(AstVisitAction.Continue); }
public object VisitTypeConstraint(TypeConstraintAst typeConstraintAst) => null;
public object VisitTypeConstraint(TypeConstraintAst typeConstraintAst) { return(typeConstraintAst.Copy()); }
public object VisitTypeConstraint(TypeConstraintAst typeConstraintAst) { throw PSTraceSource.NewArgumentException("ast"); }
/// <summary/> public virtual AstVisitAction VisitTypeConstraint(TypeConstraintAst typeConstraintAst) => DefaultVisit(typeConstraintAst);
public object VisitTypeConstraint(TypeConstraintAst typeConstraintAst) { throw new NotImplementedException(); }
public static TypeConstraintAst Update(this TypeConstraintAst ast, ITypeName typeName = null) { return(new TypeConstraintAst(ast.Extent, typeName ?? ast.TypeName)); }
public object VisitTypeConstraint(TypeConstraintAst typeConstraintAst) { return(new TypeConstraintAst(typeConstraintAst.Extent, typeConstraintAst.TypeName)); }
public override AstVisitAction VisitTypeConstraint(TypeConstraintAst ast) { return(AstVisitAction.Continue); }
public override AstVisitAction VisitTypeConstraint(TypeConstraintAst ast) { return(DoNextAction(ast)); }
public virtual object VisitTypeConstraint(TypeConstraintAst typeConstraintAst) { return(typeConstraintAst); }
public override AstVisitAction VisitTypeConstraint(TypeConstraintAst ast) { return(Check(ast)); }
public override AstVisitAction VisitTypeConstraint(TypeConstraintAst typeConstraintAst) { TryFindTypeIncompatibilities(typeConstraintAst.TypeName); return(AstVisitAction.SkipChildren); }
public override AstVisitAction VisitTypeConstraint(TypeConstraintAst typeConstraintAst) { throw new NotImplementedException(); //VisitTypeConstraint(typeConstraintAst); }
public object VisitTypeConstraint(TypeConstraintAst typeConstraintAst) { return(false); }
public object VisitTypeConstraint(TypeConstraintAst typeConstraintAst) { throw new UnexpectedElementException(); }