44
55use LogicException ;
66use PhpParser \Comment \Doc ;
7+ use PhpParser \Internal \TokenStream ;
78use PhpParser \Node as PhpNode ;
89use PhpParser \NodeTraverser as PhpParserNodeTraverser ;
910use PhpParser \NodeVisitor \CloningVisitor as PhpParserCloningVisitor ;
1011use PhpParser \NodeVisitorAbstract ;
1112use PhpParser \ParserFactory ;
13+ use PhpParser \PrettyPrinter \Standard ;
1214use PHPStan \PhpDocParser \Ast \AbstractNodeVisitor ;
1315use PHPStan \PhpDocParser \Ast \Node ;
1416use PHPStan \PhpDocParser \Ast \NodeTraverser ;
2830
2931class IntegrationPrinterWithPhpParserTest extends TestCase
3032{
33+ private const TAB_WIDTH = 4 ;
3134
3235 /**
3336 * @return iterable<array{string, string, NodeVisitor}>
@@ -73,7 +76,6 @@ public function testPrint(string $file, string $expectedFile, NodeVisitor $visit
7376 $ phpTraverser = new PhpParserNodeTraverser ();
7477 $ phpTraverser ->addVisitor (new PhpParserCloningVisitor ());
7578
76- $ printer = new PhpPrinter ();
7779 $ fileContents = file_get_contents ($ file );
7880 if ($ fileContents === false ) {
7981 $ this ->fail ('Could not read ' . $ file );
@@ -85,6 +87,11 @@ public function testPrint(string $file, string $expectedFile, NodeVisitor $visit
8587 }
8688 $ oldTokens = $ phpParser ->getTokens ();
8789
90+ $ phpTraverserIndent = new PhpParserNodeTraverser ();
91+ $ indentDetector = new PhpPrinterIndentationDetectorVisitor (new TokenStream ($ oldTokens , self ::TAB_WIDTH ));
92+ $ phpTraverserIndent ->addVisitor ($ indentDetector );
93+ $ phpTraverserIndent ->traverse ($ oldStmts );
94+
8895 $ phpTraverser2 = new PhpParserNodeTraverser ();
8996 $ phpTraverser2 ->addVisitor (new class ($ visitor ) extends NodeVisitorAbstract {
9097
@@ -134,6 +141,7 @@ public function enterNode(PhpNode $phpNode)
134141 $ newStmts = $ phpTraverser ->traverse ($ oldStmts );
135142 $ newStmts = $ phpTraverser2 ->traverse ($ newStmts );
136143
144+ $ printer = new Standard (['indent ' => str_repeat ($ indentDetector ->indentCharacter , $ indentDetector ->indentSize )]);
137145 $ newCode = $ printer ->printFormatPreserving ($ newStmts , $ oldStmts , $ oldTokens );
138146 $ this ->assertStringEqualsFile ($ expectedFile , $ newCode );
139147 }
0 commit comments