public static AstType CreateShortType(BaseSemanticModel SemanticModel, IType expressionType, AstNode node) { var csResolver = SemanticModel.Resolver.GetResolverStateBefore(node); var builder = new TypeSystemAstBuilder(csResolver); return(builder.ConvertType(expressionType)); }
public override IEnumerable <CodeIssue> GetIssues(BaseSemanticModel context, string subIssue) { var visitor = new GatherVisitor(context); visitor.GetMethods(); visitor.ComputeConflicts(); return(visitor.GetIssues()); }
protected override IGatherVisitor CreateVisitor(BaseSemanticModel context) { if (!context.Supports(new Version(5, 0))) { //Old C# version -- async/await are not available return(null); } return(new GatherVisitor(context)); }
protected override IGatherVisitor CreateVisitor(BaseSemanticModel context) { var unit = context.RootNode as SyntaxTree; if (unit == null) { return(null); } return(new GatherVisitor(context, unit, this)); }
protected override IEnumerable <CodeAction> GetFixes(BaseSemanticModel context, Node env, string variableName) { var containingStatement = env.ContainingStatement; // we don't give a fix for these cases since the general fix may not work // lambda in while/do-while/for condition if (containingStatement is WhileStatement || containingStatement is DoWhileStatement || containingStatement is ForStatement) { yield break; } // lambda in for initializer/iterator if (containingStatement.Parent is ForStatement && ((ForStatement)containingStatement.Parent).EmbeddedStatement != containingStatement) { yield break; } Action <Script> action = script => { var newName = LocalVariableNamePicker.PickSafeName( containingStatement.GetParent <EntityDeclaration>(), Enumerable.Range(1, 100).Select(i => variableName + i)); var variableDecl = new VariableDeclarationStatement(new SimpleType("var"), newName, new IdentifierExpression(variableName)); if (containingStatement.Parent is BlockStatement || containingStatement.Parent is SwitchSection) { script.InsertBefore(containingStatement, variableDecl); } else { var offset = script.GetCurrentOffset(containingStatement.StartLocation); script.InsertBefore(containingStatement, variableDecl); script.InsertText(offset, "{"); script.InsertText(script.GetCurrentOffset(containingStatement.EndLocation), "}"); script.FormatText(containingStatement.Parent); } var textNodes = new List <AstNode>(); textNodes.Add(variableDecl.Variables.First().NameToken); foreach (var reference in env.GetAllReferences()) { var identifier = new IdentifierExpression(newName); script.Replace(reference.AstNode, identifier); textNodes.Add(identifier); } script.Link(textNodes.ToArray()); }; yield return(new CodeAction(context.TranslateString("Copy to local variable"), action, env.AstNode)); }
protected override IEnumerable<CodeAction> GetFixes(BaseSemanticModel context, Node env, string variableName) { var containingStatement = env.ContainingStatement; // we don't give a fix for these cases since the general fix may not work // lambda in while/do-while/for condition if (containingStatement is WhileStatement || containingStatement is DoWhileStatement || containingStatement is ForStatement) yield break; // lambda in for initializer/iterator if (containingStatement.Parent is ForStatement && ((ForStatement)containingStatement.Parent).EmbeddedStatement != containingStatement) yield break; Action<Script> action = script => { var newName = LocalVariableNamePicker.PickSafeName( containingStatement.GetParent<EntityDeclaration>(), Enumerable.Range(1, 100).Select(i => variableName + i)); var variableDecl = new VariableDeclarationStatement(new SimpleType("var"), newName, new IdentifierExpression(variableName)); if (containingStatement.Parent is BlockStatement || containingStatement.Parent is SwitchSection) { script.InsertBefore(containingStatement, variableDecl); } else { var offset = script.GetCurrentOffset(containingStatement.StartLocation); script.InsertBefore(containingStatement, variableDecl); script.InsertText(offset, "{"); script.InsertText(script.GetCurrentOffset(containingStatement.EndLocation), "}"); script.FormatText(containingStatement.Parent); } var textNodes = new List<AstNode>(); textNodes.Add(variableDecl.Variables.First().NameToken); foreach (var reference in env.GetAllReferences()) { var identifier = new IdentifierExpression(newName); script.Replace(reference.AstNode, identifier); textNodes.Add(identifier); } script.Link(textNodes.ToArray()); }; yield return new CodeAction(context.TranslateString("Copy to local variable"), action, env.AstNode); }
bool IsSafeExpression(Expression expression, BaseSemanticModel context) { var components = expression.DescendantsAndSelf; foreach (var c in components) { if (c is AssignmentExpression) { return(false); } else if (c is UnaryOperatorExpression) { var ope = ((UnaryOperatorExpression)c).Operator; if (ope == UnaryOperatorType.Decrement || ope == UnaryOperatorType.Increment || ope == UnaryOperatorType.PostDecrement || ope == UnaryOperatorType.PostIncrement) { return(false); } } else if (c is IdentifierExpression) { var result = context.Resolve(c); if (result.IsError) { return(false); } if (!(result is LocalResolveResult)) { return(false); } if ((((LocalResolveResult)result).IsParameter)) { return(false); } } } return(true); }
static IType GetReturnType(BaseSemanticModel context, AstNode currentFunction) { var resolveResult = context.Resolve(currentFunction); return(resolveResult.IsError ? null : resolveResult.Type); }
public CatchClauseVisitor(BaseSemanticModel context, IVariable parameter) { ctx = context; this.parameter = parameter; OffendingThrows = new List <ThrowStatement>(); }
protected override IEnumerable<CodeAction> GetFixes(BaseSemanticModel context, Node env, string variableName) { yield break; }
public GatherVisitor(BaseSemanticModel context, SyntaxTree unit, AccessToClosureIssue qualifierDirectiveEvidentIssueProvider) : base(context, qualifierDirectiveEvidentIssueProvider) { this.title = context.TranslateString(qualifierDirectiveEvidentIssueProvider.Title); }
protected override IEnumerable <CodeAction> GetFixes(BaseSemanticModel context, Node env, string variableName) { yield break; }
public GatherVisitor(BaseSemanticModel context, VariableDeclaredInWideScopeIssue qualifierDirectiveEvidentIssueProvider) : base(context, qualifierDirectiveEvidentIssueProvider) { this.context = context; }
public GatherVisitor(BaseSemanticModel context, bool tryResolve) : base(context) { this.tryResolve = tryResolve; }
public GatherVisitor(BaseSemanticModel context) : base(context) { DeclaredMethods = new List <MethodDeclaration>(); }
protected override IGatherVisitor CreateVisitor(BaseSemanticModel context) { return(new GatherVisitor(context)); }
public GatherVisitor(BaseSemanticModel ctx) : base(ctx) { }
protected abstract IEnumerable <CodeAction> GetFixes(BaseSemanticModel context, Node env, string variableName);