Пример #1
0
func (v conditionVisitor) Visit(node ast.Node) ast.Visitor {
	if node == nil || v.store.err != nil {
		return ast.Visitor(nil)
	}
	if v.store.ignoreNextX > 0 {
		v.store.ignoreNextX--
		return ast.Visitor(nil)
	}
	if v.debug {
		fmt.Println("-------------------------")
		fmt.Print(">")
		printNode(node, " - ")
		fmt.Println(reflect.TypeOf(node))
		v.printNodes(v.store.stack)
		fmt.Println(v.store.result)
		fmt.Println(v.store.ignoreNextX)
	}
	if len(v.store.stack) == 0 {
		v.store.appendToStack(node)
	} else {
		v.handleNode(node)
	}

	return ast.Visitor(v)
}
Пример #2
0
func (v *prevFinder) Visit(node ast.Node) ast.Visitor {
	if _, ok := node.(*ast.File); ok {
		return ast.Visitor(v)
	}
	if node != nil && node.Pos() != token.NoPos {
		fmt.Println(node.Pos(), v.Off)
		fmt.Println(node)
		if int(node.Pos()) < v.Off && int(node.End()) < v.Off {
			ok := false
			if v.Ptr == nil {
				ok = true
			} else {
				if v.Off-int(node.End()) < v.Off-int(v.Ptr.End()) {
					ok = true
				}
			}
			if ok {
				v.Ptr = node
				return nil
			}
		}
	}
	return ast.Visitor(v)
}