private SyntacticalExtension<SyntaxNode> typeExtension(IncompleteMemberSyntax node) { throw new NotImplementedException(); }
public override SyntaxNode VisitIncompleteMember(IncompleteMemberSyntax node) { SyntacticalExtension<SyntaxNode> extension = typeExtension(node); if (extension != null) { if (extension.Kind == ExtensionKind.Type) { _lookahead = MatchTypeExtension(node, extension); return null; //remove the incomplete member } else { //td: error, incorrect extension (i.e. a code extension being used inside a type) return null; } } return node; //error, stop processing }
private Func<SyntaxNode, Scope, LookAheadResult> MatchTypeExtension(IncompleteMemberSyntax incomplete, SyntacticalExtension<SyntaxNode> extension) { return (node, scope) => { var resulSyntaxNode = node; if (node is ClassDeclarationSyntax) { ClassDeclarationSyntax clazz = (ClassDeclarationSyntax)node; clazz = clazz .WithAttributeLists(incomplete.AttributeLists) .WithModifiers(incomplete.Modifiers); resulSyntaxNode = extension.Handler(node, scope, extension); } //td: error?, expecting class return new LookAheadResult { Matched = resulSyntaxNode != null, Result = resulSyntaxNode }; }; }
public override void VisitIncompleteMember(IncompleteMemberSyntax node) { this.Incompletes.Add(node); base.VisitIncompleteMember(node); }
public override SyntaxNode VisitIncompleteMember(IncompleteMemberSyntax node) { string typename = node.Type.ToString(); IDSLHandler dsl = ctx_.CreateDSL(typename); if (dsl != null) { pending_ = new ResolveDSLClass(dsl, ctx_, members_); return null; } return node; }
/// <summary> /// /// </summary> /// <param name="node"></param> public override sealed void VisitIncompleteMember(IncompleteMemberSyntax node) { this.OnNodeVisited(node, this.type.IsInstanceOfType(node)); base.VisitIncompleteMember(node); }
/// <summary> /// /// </summary> /// <param name="node"></param> public override sealed void VisitIncompleteMember(IncompleteMemberSyntax node) { this.OnNodeVisited(node); if (!this.traverseRootOnly) base.VisitIncompleteMember(node); }