pretty printer: print Class
This commit is contained in:
		
							parent
							
								
									7c5d20a1b9
								
							
						
					
					
						commit
						cbc46cb612
					
				| @ -294,6 +294,8 @@ func getPrintFuncByNode(n node.Node) func(o io.Writer, n node.Node) { | ||||
| 		return printStmtClassConstList | ||||
| 	case *stmt.ClassMethod: | ||||
| 		return printStmtClassMethod | ||||
| 	case *stmt.Class: | ||||
| 		return printStmtClass | ||||
| 
 | ||||
| 	case *stmt.Constant: | ||||
| 		return printStmtConstant | ||||
| @ -1366,6 +1368,41 @@ func printStmtClassMethod(o io.Writer, n node.Node) { | ||||
| 	io.WriteString(o, "}\n") // TODO: handle indentation | ||||
| } | ||||
| 
 | ||||
| func printStmtClass(o io.Writer, n node.Node) { | ||||
| 	nn := n.(*stmt.Class) | ||||
| 
 | ||||
| 	if nn.Modifiers != nil { | ||||
| 		joinPrint(" ", o, nn.Modifiers) | ||||
| 		io.WriteString(o, " ") | ||||
| 	} | ||||
| 	io.WriteString(o, "class") | ||||
| 
 | ||||
| 	if nn.ClassName != nil { | ||||
| 		io.WriteString(o, " ") | ||||
| 		Print(o, nn.ClassName) | ||||
| 	} | ||||
| 
 | ||||
| 	if nn.Args != nil { | ||||
| 		io.WriteString(o, "(") | ||||
| 		joinPrint(", ", o, nn.Args) | ||||
| 		io.WriteString(o, ")") | ||||
| 	} | ||||
| 
 | ||||
| 	if nn.Extends != nil { | ||||
| 		io.WriteString(o, " extends ") | ||||
| 		Print(o, nn.Extends) | ||||
| 	} | ||||
| 
 | ||||
| 	if nn.Implements != nil { | ||||
| 		io.WriteString(o, " implements ") | ||||
| 		joinPrint(", ", o, nn.Implements) | ||||
| 	} | ||||
| 
 | ||||
| 	io.WriteString(o, "\n{\n") // TODO: handle indentation | ||||
| 	printNodes(o, nn.Stmts) | ||||
| 	io.WriteString(o, "}\n") // TODO: handle indentation | ||||
| } | ||||
| 
 | ||||
| func printStmtConstant(o io.Writer, n node.Node) { | ||||
| 	nn := n.(*stmt.Constant) | ||||
| 
 | ||||
|  | ||||
| @ -2149,6 +2149,85 @@ $a; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestPrintStmtClass(t *testing.T) { | ||||
| 	o := bytes.NewBufferString("") | ||||
| 
 | ||||
| 	printer.Print(o, &stmt.Class{ | ||||
| 		Modifiers: []node.Node{&node.Identifier{Value: "abstract"}}, | ||||
| 		ClassName: &node.Identifier{Value: "Foo"}, | ||||
| 		Extends:   &name.Name{Parts: []node.Node{&name.NamePart{Value: "Bar"}}}, | ||||
| 		Implements: []node.Node{ | ||||
| 			&name.Name{Parts: []node.Node{&name.NamePart{Value: "Baz"}}}, | ||||
| 			&name.Name{Parts: []node.Node{&name.NamePart{Value: "Quuz"}}}, | ||||
| 		}, | ||||
| 		Stmts: []node.Node{ | ||||
| 			&stmt.ClassConstList{ | ||||
| 				Modifiers: []node.Node{&node.Identifier{Value: "public"}}, | ||||
| 				Consts: []node.Node{ | ||||
| 					&stmt.Constant{ | ||||
| 						ConstantName: &node.Identifier{Value: "FOO"}, | ||||
| 						Expr:         &scalar.String{Value: "bar"}, | ||||
| 					}, | ||||
| 				}, | ||||
| 			}, | ||||
| 		}, | ||||
| 	}) | ||||
| 
 | ||||
| 	expected := `abstract class Foo extends Bar implements Baz, Quuz | ||||
| { | ||||
| public const FOO = 'bar'; | ||||
| } | ||||
| ` | ||||
| 	actual := o.String() | ||||
| 
 | ||||
| 	if expected != actual { | ||||
| 		t.Errorf("\nexpected: %s\ngot: %s\n", expected, actual) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestPrintStmtAnonymousClass(t *testing.T) { | ||||
| 	o := bytes.NewBufferString("") | ||||
| 
 | ||||
| 	printer.Print(o, &stmt.Class{ | ||||
| 		Modifiers: []node.Node{&node.Identifier{Value: "abstract"}}, | ||||
| 		Args: []node.Node{ | ||||
| 			&node.Argument{ | ||||
| 				Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, | ||||
| 			}, | ||||
| 			&node.Argument{ | ||||
| 				Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, | ||||
| 			}, | ||||
| 		}, | ||||
| 		Extends: &name.Name{Parts: []node.Node{&name.NamePart{Value: "Bar"}}}, | ||||
| 		Implements: []node.Node{ | ||||
| 			&name.Name{Parts: []node.Node{&name.NamePart{Value: "Baz"}}}, | ||||
| 			&name.Name{Parts: []node.Node{&name.NamePart{Value: "Quuz"}}}, | ||||
| 		}, | ||||
| 		Stmts: []node.Node{ | ||||
| 			&stmt.ClassConstList{ | ||||
| 				Modifiers: []node.Node{&node.Identifier{Value: "public"}}, | ||||
| 				Consts: []node.Node{ | ||||
| 					&stmt.Constant{ | ||||
| 						ConstantName: &node.Identifier{Value: "FOO"}, | ||||
| 						Expr:         &scalar.String{Value: "bar"}, | ||||
| 					}, | ||||
| 				}, | ||||
| 			}, | ||||
| 		}, | ||||
| 	}) | ||||
| 
 | ||||
| 	expected := `abstract class($a, $b) extends Bar implements Baz, Quuz | ||||
| { | ||||
| public const FOO = 'bar'; | ||||
| } | ||||
| ` | ||||
| 	actual := o.String() | ||||
| 
 | ||||
| 	if expected != actual { | ||||
| 		t.Errorf("\nexpected: %s\ngot: %s\n", expected, actual) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestPrintStmtConstant(t *testing.T) { | ||||
| 	o := bytes.NewBufferString("") | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user