public override void VisitSimpleType(SimpleType simpleType) { var identifierToken = simpleType.IdentifierToken; VisitChildrenUntil(simpleType, identifierToken); Colorize(identifierToken, resolver.Resolve(simpleType, cancellationToken)); VisitChildrenAfter(simpleType, identifierToken); }
void VisitVisibleNodes(AstNode node, IResolveVisitorNavigator currentNavigator, AlAstResolver resolver, int start, int end) { if (!AlAstResolver.IsUnresolvableNode(node)) { currentNavigator.Resolved(node, resolver.Resolve(node)); } for (var child = node.FirstChild; child != null; child = child.NextSibling) { if (child.StartLocation.Line <= end && child.EndLocation.Line >= start) { VisitVisibleNodes(child, currentNavigator, resolver, start, end); } } }
public ResolveResult ResolveSnippet(ParseInformation parseInfo, TextLocation location, string codeSnippet, ICompilation compilation, CancellationToken cancellationToken) { var csParseInfo = parseInfo as AlFullParseInformation; if (csParseInfo == null) throw new ArgumentException("Parse info does not have SyntaxTree"); AlAstResolver contextResolver = new AlAstResolver(compilation, csParseInfo.SyntaxTree, csParseInfo.UnresolvedFile); var node = csParseInfo.SyntaxTree.GetNodeAt(location); AlResolver context; if (node != null) context = contextResolver.GetResolverStateAfter(node, cancellationToken); else context = new AlResolver(compilation); AlParser parser = new AlParser(); var expr = parser.ParseExpression(codeSnippet); if (parser.HasErrors) return new ErrorResolveResult(SpecialType.UnknownType, PrintErrorsAsString(parser.Errors), TextLocation.Empty); AlAstResolver snippetResolver = new AlAstResolver(context, expr); return snippetResolver.Resolve(expr, cancellationToken); }