@@ -117,22 +117,38 @@ public function minify($file)
117
117
$ dir = dirname ($ file );
118
118
$ fileName = basename ($ file );
119
119
$ content = $ this ->readFactory ->create ($ dir )->readFile ($ fileName );
120
-
121
- $ parser = (new \PhpParser \ParserFactory ())->create (\PhpParser \ParserFactory::PREFER_PHP7 );
122
120
$ heredocs = null ;
123
121
124
- try {
125
- $ ast = $ parser ->parse ($ content );
126
-
127
- $ traverser = new \PhpParser \NodeTraverser ();
128
- $ traverser ->addVisitor (new Php \NodeVisitor ());
129
- $ ast = $ traverser ->traverse ($ ast );
130
-
131
- $ prettyPrinter = new Php \PrettyPrinter ();
132
- $ content = $ prettyPrinter ->prettyPrintFile ($ ast );
133
- $ heredocs = $ prettyPrinter ->getDelayedHeredocs ();
134
- } catch (\PhpParser \Error $ error ) {
135
- // Some PHP code is seemingly invalid.
122
+ if (null !== $ content ) {
123
+ $ parser = (new \PhpParser \ParserFactory ())->create (\PhpParser \ParserFactory::PREFER_PHP7 );
124
+
125
+ /**
126
+ * Prevent problems with deeply nested ASTs if xDebug is enabled.
127
+ * @see https://github.com/nikic/PHP-Parser/blob/v4.4.0/doc/2_Usage_of_basic_components.markdown#bootstrapping
128
+ */
129
+ $ nestingLevelConfigValue = ini_get ('xdebug.max_nesting_level ' );
130
+
131
+ if (false !== $ nestingLevelConfigValue ) {
132
+ ini_set ('xdebug.max_nesting_level ' , '3000 ' );
133
+ }
134
+
135
+ try {
136
+ $ ast = $ parser ->parse ($ content );
137
+
138
+ $ traverser = new \PhpParser \NodeTraverser ();
139
+ $ traverser ->addVisitor (new Php \NodeVisitor ());
140
+ $ ast = $ traverser ->traverse ($ ast );
141
+
142
+ $ prettyPrinter = new Php \PrettyPrinter ();
143
+ $ content = $ prettyPrinter ->prettyPrintFile ($ ast );
144
+ $ heredocs = $ prettyPrinter ->getDelayedHeredocs ();
145
+ } catch (\Error $ error ) {
146
+ // Some PHP code is seemingly invalid, or too complex.
147
+ } finally {
148
+ if (false !== $ nestingLevelConfigValue ) {
149
+ ini_set ('xdebug.max_nesting_level ' , $ nestingLevelConfigValue );
150
+ }
151
+ }
136
152
}
137
153
138
154
//Storing Heredocs
0 commit comments