pretty printer: print file
This commit is contained in:
		
							parent
							
								
									79277ea3cc
								
							
						
					
					
						commit
						0abe99274b
					
				| @ -30,6 +30,27 @@ func NewPrinter(w io.Writer, indentStr string) *Printer { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (p *Printer) PrintFile(n *stmt.StmtList) { | ||||||
|  | 	if len(n.Stmts) > 0 { | ||||||
|  | 		firstStmt := n.Stmts[0] | ||||||
|  | 		n.Stmts = n.Stmts[1:] | ||||||
|  | 
 | ||||||
|  | 		switch fs := firstStmt.(type) { | ||||||
|  | 		case *stmt.InlineHtml: | ||||||
|  | 			io.WriteString(p.w, fs.Value) | ||||||
|  | 			io.WriteString(p.w, "<?php\n") | ||||||
|  | 		default: | ||||||
|  | 			io.WriteString(p.w, "<?php\n") | ||||||
|  | 			p.printIndent() | ||||||
|  | 			p.Print(fs) | ||||||
|  | 			io.WriteString(p.w, "\n") | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	p.indentDepth-- | ||||||
|  | 	p.printNodes(n.Stmts) | ||||||
|  | 	io.WriteString(p.w, "\n") | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (p *Printer) Print(n node.Node) { | func (p *Printer) Print(n node.Node) { | ||||||
| 	p.printNode(n) | 	p.printNode(n) | ||||||
| } | } | ||||||
|  | |||||||
| @ -15,6 +15,58 @@ import ( | |||||||
| 	"github.com/z7zmey/php-parser/printer" | 	"github.com/z7zmey/php-parser/printer" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | func TestPrintFile(t *testing.T) { | ||||||
|  | 	o := bytes.NewBufferString("") | ||||||
|  | 
 | ||||||
|  | 	p := printer.NewPrinter(o, "    ") | ||||||
|  | 	p.PrintFile(&stmt.StmtList{ | ||||||
|  | 		Stmts: []node.Node{ | ||||||
|  | 			&stmt.Expression{Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}}, | ||||||
|  | 			&stmt.Expression{Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}}, | ||||||
|  | 		}, | ||||||
|  | 	}) | ||||||
|  | 
 | ||||||
|  | 	expected := `<?php | ||||||
|  | $a; | ||||||
|  | $b; | ||||||
|  | ` | ||||||
|  | 	actual := o.String() | ||||||
|  | 
 | ||||||
|  | 	if expected != actual { | ||||||
|  | 		t.Errorf("\nexpected: %s\ngot: %s\n", expected, actual) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func TestPrintFileInlineHtml(t *testing.T) { | ||||||
|  | 	o := bytes.NewBufferString("") | ||||||
|  | 
 | ||||||
|  | 	p := printer.NewPrinter(o, "    ") | ||||||
|  | 	p.PrintFile(&stmt.StmtList{ | ||||||
|  | 		Stmts: []node.Node{ | ||||||
|  | 			&stmt.InlineHtml{Value: "<div>HTML</div>"}, | ||||||
|  | 			&stmt.Expression{ | ||||||
|  | 				Expr: &scalar.Heredoc{ | ||||||
|  | 					Label: "\"LBL\"", | ||||||
|  | 					Parts: []node.Node{ | ||||||
|  | 						&scalar.EncapsedStringPart{Value: "hello world\n"}, | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 		}, | ||||||
|  | 	}) | ||||||
|  | 
 | ||||||
|  | 	expected := `<div>HTML</div><?php | ||||||
|  | <<<"LBL" | ||||||
|  | hello world | ||||||
|  | LBL; | ||||||
|  | ` | ||||||
|  | 	actual := o.String() | ||||||
|  | 
 | ||||||
|  | 	if expected != actual { | ||||||
|  | 		t.Errorf("\nexpected: %s\ngot: %s\n", expected, actual) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // node | // node | ||||||
| 
 | 
 | ||||||
| func TestPrintIdentifier(t *testing.T) { | func TestPrintIdentifier(t *testing.T) { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user