@@ -82,62 +82,48 @@ protected function applyFix(\SplFileInfo $file, Tokens $tokens)
82
82
return ;
83
83
}
84
84
85
- $ sequence = $ this ->getDeclareStrictTypeSequence ();
86
- $ sequenceLocation = $ tokens ->findSequence ($ sequence , $ searchIndex , null , false );
85
+ $ sequenceLocation = $ tokens ->findSequence ([[T_DECLARE , 'declare ' ], '( ' , [T_STRING , 'strict_types ' ], '= ' , [T_LNUMBER ], ') ' ], $ searchIndex , null , false );
87
86
if (null === $ sequenceLocation ) {
88
87
$ this ->insertSequence ($ tokens ); // declaration not found, insert one
89
88
90
89
return ;
91
90
}
92
91
93
- $ this ->fixStrictTypesCasing ($ tokens , $ sequenceLocation );
94
- }
95
-
96
- /**
97
- * @return Token[]
98
- */
99
- private function getDeclareStrictTypeSequence ()
100
- {
101
- static $ sequence = null ;
102
-
103
- // do not look for open tag, closing semicolon or empty lines;
104
- // - open tag is tested by isCandidate
105
- // - semicolon or end tag must be there to be valid PHP
106
- // - empty tokens and comments are dealt with later
107
- if (null === $ sequence ) {
108
- $ sequence = [
109
- new Token ([T_DECLARE , 'declare ' ]),
110
- new Token ('( ' ),
111
- new Token ([T_STRING , 'strict_types ' ]),
112
- new Token ('= ' ),
113
- new Token ([T_LNUMBER , '1 ' ]),
114
- new Token (') ' ),
115
- ];
116
- }
117
-
118
- return $ sequence ;
92
+ $ this ->fixStrictTypesCasingAndValue ($ tokens , $ sequenceLocation );
119
93
}
120
94
121
95
/**
122
96
* @param array<int, Token> $sequence
123
97
*/
124
- private function fixStrictTypesCasing (Tokens $ tokens , array $ sequence )
98
+ private function fixStrictTypesCasingAndValue (Tokens $ tokens , array $ sequence )
125
99
{
126
100
/** @var int $index */
127
101
/** @var Token $token */
128
102
foreach ($ sequence as $ index => $ token ) {
129
103
if ($ token ->isGivenKind (T_STRING )) {
130
104
$ tokens [$ index ] = new Token ([T_STRING , strtolower ($ token ->getContent ())]);
131
105
106
+ continue ;
107
+ }
108
+ if ($ token ->isGivenKind (T_LNUMBER )) {
109
+ $ tokens [$ index ] = new Token ([T_LNUMBER , '1 ' ]);
110
+
132
111
break ;
133
112
}
134
113
}
135
114
}
136
115
137
116
private function insertSequence (Tokens $ tokens )
138
117
{
139
- $ sequence = $ this ->getDeclareStrictTypeSequence ();
140
- $ sequence [] = new Token ('; ' );
118
+ $ sequence = [
119
+ new Token ([T_DECLARE , 'declare ' ]),
120
+ new Token ('( ' ),
121
+ new Token ([T_STRING , 'strict_types ' ]),
122
+ new Token ('= ' ),
123
+ new Token ([T_LNUMBER , '1 ' ]),
124
+ new Token (') ' ),
125
+ new Token ('; ' ),
126
+ ];
141
127
$ endIndex = \count ($ sequence );
142
128
143
129
$ tokens ->insertAt (1 , $ sequence );
0 commit comments