Completed
Pull Request — master (#41)
by Björn
02:45
created

AbstractFileDecorator::process()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace BestIt\CodeSniffer;
6
7
use PHP_CodeSniffer\Files\File;
0 ignored issues
show
Bug introduced by
This use statement conflicts with another class in this namespace, BestIt\CodeSniffer\File.

Let’s assume that you have a directory layout like this:

.
|-- OtherDir
|   |-- Bar.php
|   `-- Foo.php
`-- SomeDir
    `-- Foo.php

and let’s assume the following content of Bar.php:

// Bar.php
namespace OtherDir;

use SomeDir\Foo; // This now conflicts the class OtherDir\Foo

If both files OtherDir/Foo.php and SomeDir/Foo.php are loaded in the same runtime, you will see a PHP error such as the following:

PHP Fatal error:  Cannot use SomeDir\Foo as Foo because the name is already in use in OtherDir/Foo.php

However, as OtherDir/Foo.php does not necessarily have to be loaded and the error is only triggered if it is loaded before OtherDir/Bar.php, this problem might go unnoticed for a while. In order to prevent this error from surfacing, you must import the namespace with a different alias:

// Bar.php
namespace OtherDir;

use SomeDir\Foo as SomeDirFoo; // There is no conflict anymore.
Loading history...
8
use function func_get_args;
9
10
/**
11
 * Copy of the file api to provide an file decorator.
12
 *
13
 * @author blange <[email protected]>
14
 * @package BestIt\CodeSniffer
15
 */
16
abstract class AbstractFileDecorator extends File
17
{
18
    /**
19
     * The CodeSniffer file
20
     *
21
     * @var File
22
     */
23
    private $baseFile;
24
25
    /**
26
     * File constructor.
27
     *
28
     * @param File $baseFile CodeSniffer file
29
     */
30
    public function __construct(File $baseFile)
31
    {
32
        $this->baseFile = $baseFile;
33
    }
34
35
    /**
36
     * Returns the wrapped classes method result.
37
     *
38
     * @param string $method
39
     * @param array $args
40
     *
41
     * @return mixed
42
     */
43
    public function __call(string $method, array $args = [])
44
    {
45
        return $this->getBaseFile()->{$method}(...$args);
46
    }
47
48
    /**
49
     * Returns the property of the base file.
50
     *
51
     * @param string $property
52
     *
53
     * @return mixed
54
     */
55
    public function __get(string $property)
56
    {
57
        return $this->getBaseFile()->$property;
58
    }
59
60
    /**
61
     * Records an error against a specific token in the file.
62
     *
63
     * @param string $error The error message.
64
     * @param int $stackPtr The stack position where the error occurred.
65
     * @param string $code A violation code unique to the sniff message.
66
     * @param array $data Replacements for the error message.
67
     * @param int $severity The severity level for this error. A value of 0
68
     *                          will be converted into the default severity level.
69
     * @param boolean $fixable Can the error be fixed by the sniff?
70
     *
71
     * @return boolean
72
     */
73
    public function addError(
74
        $error,
75
        $stackPtr,
76
        $code,
77
        $data = [],
78
        $severity = 0,
79
        $fixable = false
80
    )
81
    {
82
        return $this->__call(__FUNCTION__, func_get_args());
83
    }
84
85
    /**
86
     * Records an error against a specific line in the file.
87
     *
88
     * @param string $error The error message.
89
     * @param int $line The line on which the error occurred.
90
     * @param string $code A violation code unique to the sniff message.
91
     * @param array $data Replacements for the error message.
92
     * @param int $severity The severity level for this error. A value of 0
93
     *                         will be converted into the default severity level.
94
     *
95
     * @return boolean
96
     */
97
    public function addErrorOnLine(
98
        $error,
99
        $line,
100
        $code,
101
        $data = [],
102
        $severity = 0
103
    )
104
    {
105
        return $this->__call(__FUNCTION__, func_get_args());
106
    }
107
108
    /**
109
     * Records a fixable error against a specific token in the file.
110
     *
111
     * Returns true if the error was recorded and should be fixed.
112
     *
113
     * @param string $error The error message.
114
     * @param int $stackPtr The stack position where the error occurred.
115
     * @param string $code A violation code unique to the sniff message.
116
     * @param array $data Replacements for the error message.
117
     * @param int $severity The severity level for this error. A value of 0
118
     *                         will be converted into the default severity level.
119
     *
120
     * @return boolean
121
     */
122
    public function addFixableError(
123
        $error,
124
        $stackPtr,
125
        $code,
126
        $data = [],
127
        $severity = 0
128
    )
129
    {
130
        return $this->__call(__FUNCTION__, func_get_args());
131
    }
132
133
    /**
134
     * Records a fixable warning against a specific token in the file.
135
     *
136
     * Returns true if the warning was recorded and should be fixed.
137
     *
138
     * @param string $warning The error message.
139
     * @param int $stackPtr The stack position where the error occurred.
140
     * @param string $code A violation code unique to the sniff message.
141
     * @param array $data Replacements for the warning message.
142
     * @param int $severity The severity level for this warning. A value of 0
143
     *                         will be converted into the default severity level.
144
     *
145
     * @return boolean
146
     */
147
    public function addFixableWarning(
148
        $warning,
149
        $stackPtr,
150
        $code,
151
        $data = [],
152
        $severity = 0
153
    )
154
    {
155
        return $this->__call(__FUNCTION__, func_get_args());
156
    }
157
158
    /**
159
     * Adds an error to the error stack.
160
     *
161
     * @param boolean $error Is this an error message?
162
     * @param string $message The text of the message.
163
     * @param int $line The line on which the message occurred.
164
     * @param int $column The column at which the message occurred.
165
     * @param string $code A violation code unique to the sniff message.
166
     * @param array $data Replacements for the message.
167
     * @param int $severity The severity level for this message. A value of 0
168
     *                          will be converted into the default severity level.
169
     * @param boolean $fixable Can the problem be fixed by the sniff?
170
     *
171
     * @return boolean
172
     */
173
    protected function addMessage($error, $message, $line, $column, $code, $data, $severity, $fixable)
174
    {
175
        return $this->__call(__FUNCTION__, func_get_args());
176
    }
177
178
    /**
179
     * Records a warning against a specific token in the file.
180
     *
181
     * @param string $warning The error message.
182
     * @param int $stackPtr The stack position where the error occurred.
183
     * @param string $code A violation code unique to the sniff message.
184
     * @param array $data Replacements for the warning message.
185
     * @param int $severity The severity level for this warning. A value of 0
186
     *                          will be converted into the default severity level.
187
     * @param boolean $fixable Can the warning be fixed by the sniff?
188
     *
189
     * @return boolean
190
     */
191
    public function addWarning(
192
        $warning,
193
        $stackPtr,
194
        $code,
195
        $data = [],
196
        $severity = 0,
197
        $fixable = false
198
    ): bool
199
    {
200
        return $this->__call(__FUNCTION__, func_get_args());
201
    }
202
203
    /**
204
     * Records a warning against a specific token in the file.
205
     *
206
     * @param string $warning The error message.
207
     * @param int $line The line on which the warning occurred.
208
     * @param string $code A violation code unique to the sniff message.
209
     * @param array $data Replacements for the warning message.
210
     * @param int $severity The severity level for this warning. A value of 0 will
211
     *                         will be converted into the default severity level.
212
     *
213
     * @return boolean
214
     */
215
    public function addWarningOnLine(
216
        $warning,
217
        $line,
218
        $code,
219
        $data = [],
220
        $severity = 0
221
    ): bool
222
    {
223
        return $this->__call(__FUNCTION__, func_get_args());
224
    }
225
226
    /**
227
     * Remove vars stored in this file that are no longer required.
228
     *
229
     * @return void
230
     */
231
    public function cleanUp()
232
    {
233
        $this->__call(__FUNCTION__, func_get_args());
234
    }
235
236
    /**
237
     * Disables caching of this file.
238
     *
239
     * @return void
240
     */
241
    public function disableCaching()
242
    {
243
        $this->__call(__FUNCTION__, func_get_args());
244
    }
245
246
    /**
247
     * Returns the position of the last non-whitespace token in a statement.
248
     *
249
     * @param int $start The position to start searching from in the token stack.
250
     * @param int|array $ignore Token types that should not be considered stop points.
251
     *
252
     * @return int
253
     */
254
    public function findEndOfStatement($start, $ignore = null)
255
    {
256
        return $this->__call(__FUNCTION__, func_get_args());
257
    }
258
259
    /**
260
     * Returns the name of the class that the specified class extends.
261
     * (works for classes, anonymous classes and interfaces)
262
     *
263
     * Returns FALSE on error or if there is no extended class name.
264
     *
265
     * @param int $stackPtr The stack position of the class.
266
     *
267
     * @return string|false
268
     */
269
    public function findExtendedClassName($stackPtr)
270
    {
271
        return $this->__call(__FUNCTION__, func_get_args());
272
    }
273
274
    /**
275
     * Returns the position of the first token on a line, matching given type.
276
     *
277
     * Returns false if no token can be found.
278
     *
279
     * @param int|array $types The type(s) of tokens to search for.
280
     * @param int $start The position to start searching from in the
281
     *                           token stack. The first token matching on
282
     *                           this line before this token will be returned.
283
     * @param bool $exclude If true, find the token that is NOT of
284
     *                           the types specified in $types.
285
     * @param string $value The value that the token must be equal to.
286
     *                           If value is omitted, tokens with any value will
287
     *                           be returned.
288
     *
289
     * @return int | bool
290
     */
291
    public function findFirstOnLine($types, $start, $exclude = false, $value = null)
292
    {
293
        return $this->__call(__FUNCTION__, func_get_args());
294
    }
295
296
    /**
297
     * Returns the names of the interfaces that the specified class implements.
298
     *
299
     * Returns FALSE on error or if there are no implemented interface names.
300
     *
301
     * @param int $stackPtr The stack position of the class.
302
     *
303
     * @return array|false
304
     */
305
    public function findImplementedInterfaceNames($stackPtr)
306
    {
307
        return $this->__call(__FUNCTION__, func_get_args());
308
    }
309
310
    /**
311
     * Returns the position of the next specified token(s).
312
     *
313
     * If a value is specified, the next token of the specified type(s)
314
     * containing the specified value will be returned.
315
     *
316
     * Returns false if no token can be found.
317
     *
318
     * @param int|array $types The type(s) of tokens to search for.
319
     * @param int $start The position to start searching from in the
320
     *                           token stack.
321
     * @param int $end The end position to fail if no token is found.
322
     *                           if not specified or null, end will default to
323
     *                           the end of the token stack.
324
     * @param bool $exclude If true, find the next token that is NOT of
325
     *                           a type specified in $types.
326
     * @param string $value The value that the token(s) must be equal to.
327
     *                           If value is omitted, tokens with any value will
328
     *                           be returned.
329
     * @param bool $local If true, tokens outside the current statement
330
     *                           will not be checked. i.e., checking will stop
331
     *                           at the next semi-colon found.
332
     *
333
     * @return int|bool
334
     * @see    findPrevious()
335
     */
336
    public function findNext(
337
        $types,
338
        $start,
339
        $end = null,
340
        $exclude = false,
341
        $value = null,
342
        $local = false
343
    )
344
    {
345
        return $this->__call(__FUNCTION__, func_get_args());
346
    }
347
348
    /**
349
     * Returns the position of the previous specified token(s).
350
     *
351
     * If a value is specified, the previous token of the specified type(s)
352
     * containing the specified value will be returned.
353
     *
354
     * Returns false if no token can be found.
355
     *
356
     * @param int|array $types The type(s) of tokens to search for.
357
     * @param int $start The position to start searching from in the
358
     *                           token stack.
359
     * @param int $end The end position to fail if no token is found.
360
     *                           if not specified or null, end will default to
361
     *                           the start of the token stack.
362
     * @param bool $exclude If true, find the previous token that is NOT of
363
     *                           the types specified in $types.
364
     * @param string $value The value that the token(s) must be equal to.
365
     *                           If value is omitted, tokens with any value will
366
     *                           be returned.
367
     * @param bool $local If true, tokens outside the current statement
368
     *                           will not be checked. IE. checking will stop
369
     *                           at the previous semi-colon found.
370
     *
371
     * @return int|bool
372
     * @see    findNext()
373
     */
374
    public function findPrevious(
375
        $types,
376
        $start,
377
        $end = null,
378
        $exclude = false,
379
        $value = null,
380
        $local = false
381
    )
382
    {
383
        return $this->__call(__FUNCTION__, func_get_args());
384
    }
385
386
    /**
387
     * Returns the position of the first non-whitespace token in a statement.
388
     *
389
     * @param int $start The position to start searching from in the token stack.
390
     * @param int|array $ignore Token types that should not be considered stop points.
391
     *
392
     * @return int
393
     */
394
    public function findStartOfStatement($start, $ignore = null)
395
    {
396
        return $this->__call(__FUNCTION__, func_get_args());
397
    }
398
399
    /**
400
     * Returns the original file for this decorator
401
     *
402
     * @return File The original file wrapper.
403
     */
404
    public function getBaseFile(): File
405
    {
406
        return $this->baseFile;
407
    }
408
409
    /**
410
     * Returns the visibility and implementation properties of a class.
411
     *
412
     * The format of the array is:
413
     * <code>
414
     *   array(
415
     *    'is_abstract' => false, // true if the abstract keyword was found.
416
     *    'is_final'    => false, // true if the final keyword was found.
417
     *   );
418
     * </code>
419
     *
420
     * @param int $stackPtr The position in the stack of the T_CLASS token to
421
     *                      acquire the properties for.
422
     *
423
     * @return array
424
     * @throws \PHP_CodeSniffer\Exceptions\TokenizerException If the specified position is not a
425
     *                                                        T_CLASS token.
426
     */
427
    public function getClassProperties($stackPtr)
428
    {
429
        return $this->__call(__FUNCTION__, func_get_args());
430
    }
431
432
    /**
433
     * Return the position of the condition for the passed token.
434
     *
435
     * Returns FALSE if the token does not have the condition.
436
     *
437
     * @param int $stackPtr The position of the token we are checking.
438
     * @param int $type The type of token to search for.
439
     *
440
     * @return int
441
     */
442
    public function getCondition($stackPtr, $type)
443
    {
444
        return $this->__call(__FUNCTION__, func_get_args());
445
    }
446
447
    /**
448
     * Returns the declaration names for classes, interfaces, traits, and functions.
449
     *
450
     * @param int $stackPtr The position of the declaration token which
451
     *                      declared the class, interface, trait, or function.
452
     *
453
     * @return string|null The name of the class, interface, trait, or function;
454
     *                     or NULL if the function or class is anonymous.
455
     * @throws \PHP_CodeSniffer\Exceptions\RuntimeException If the specified token is not of type
456
     *                                                      T_FUNCTION, T_CLASS, T_ANON_CLASS,
457
     *                                                      T_CLOSURE, T_TRAIT, or T_INTERFACE.
458
     */
459
    public function getDeclarationName($stackPtr)
460
    {
461
        return $this->__call(__FUNCTION__, func_get_args());
462
    }
463
464
    /**
465
     * Returns the number of errors raised.
466
     *
467
     * @return int
468
     */
469
    public function getErrorCount()
470
    {
471
        return $this->__call(__FUNCTION__, func_get_args());
472
    }
473
474
    /**
475
     * Returns the errors raised from processing this file.
476
     *
477
     * @return array
478
     */
479
    public function getErrors()
480
    {
481
        return $this->__call(__FUNCTION__, func_get_args());
482
    }
483
484
    /**
485
     * Returns the absolute filename of this file.
486
     *
487
     * @return string
488
     */
489
    public function getFilename()
490
    {
491
        return $this->__call(__FUNCTION__, func_get_args());
492
    }
493
494
    /**
495
     * Returns the number of fixable errors/warnings raised.
496
     *
497
     * @return int
498
     */
499
    public function getFixableCount()
500
    {
501
        return $this->__call(__FUNCTION__, func_get_args());
502
    }
503
504
    /**
505
     * Returns the number of fixed errors/warnings.
506
     *
507
     * @return int
508
     */
509
    public function getFixedCount()
510
    {
511
        return $this->__call(__FUNCTION__, func_get_args());
512
    }
513
514
    /**
515
     * Returns the list of ignored lines.
516
     *
517
     * @return array
518
     */
519
    public function getIgnoredLines()
520
    {
521
        return $this->__call(__FUNCTION__, func_get_args());
522
    }
523
524
    /**
525
     * Returns the visibility and implementation properties of the class member
526
     * variable found at the specified position in the stack.
527
     *
528
     * The format of the array is:
529
     *
530
     * <code>
531
     *   array(
532
     *    'scope'           => 'public', // public protected or protected.
533
     *    'scope_specified' => false,    // true if the scope was explicitely specified.
534
     *    'is_static'       => false,    // true if the static keyword was found.
535
     *   );
536
     * </code>
537
     *
538
     * @param int $stackPtr The position in the stack of the T_VARIABLE token to
539
     *                      acquire the properties for.
540
     *
541
     * @return array
542
     * @throws \PHP_CodeSniffer\Exceptions\TokenizerException If the specified position is not a
543
     *                                                        T_VARIABLE token, or if the position is not
544
     *                                                        a class member variable.
545
     */
546
    public function getMemberProperties($stackPtr)
547
    {
548
        return $this->__call(__FUNCTION__, func_get_args());
549
    }
550
551
    /**
552
     * Returns the method parameters for the specified function token.
553
     *
554
     * Each parameter is in the following format:
555
     *
556
     * <code>
557
     *   0 => array(
558
     *         'name'              => '$var',  // The variable name.
559
     *         'token'             => integer, // The stack pointer to the variable name.
560
     *         'content'           => string,  // The full content of the variable definition.
561
     *         'pass_by_reference' => boolean, // Is the variable passed by reference?
562
     *         'variable_length'   => boolean, // Is the param of variable length through use of `...` ?
563
     *         'type_hint'         => string,  // The type hint for the variable.
564
     *         'type_hint_token'   => integer, // The stack pointer to the type hint
565
     *                                         // or false if there is no type hint.
566
     *         'nullable_type'     => boolean, // Is the variable using a nullable type?
567
     *        )
568
     * </code>
569
     *
570
     * Parameters with default values have an additional array index of
571
     * 'default' with the value of the default as a string.
572
     *
573
     * @param int $stackPtr The position in the stack of the function token
574
     *                      to acquire the parameters for.
575
     *
576
     * @return array
577
     * @throws \PHP_CodeSniffer\Exceptions\TokenizerException If the specified $stackPtr is not of
578
     *                                                        type T_FUNCTION or T_CLOSURE.
579
     */
580
    public function getMethodParameters($stackPtr)
581
    {
582
        return $this->__call(__FUNCTION__, func_get_args());
583
    }
584
585
586
    /**
587
     * Returns the visibility and implementation properties of a method.
588
     *
589
     * The format of the array is:
590
     * <code>
591
     *   array(
592
     *    'scope'                => 'public', // public protected or protected
593
     *    'scope_specified'      => true,     // true is scope keyword was found.
594
     *    'return_type'          => '',       // the return type of the method.
595
     *    'return_type_token'    => integer,  // The stack pointer to the start of the return type
596
     *                                        // or false if there is no return type.
597
     *    'nullable_return_type' => false,    // true if the return type is nullable.
598
     *    'is_abstract'          => false,    // true if the abstract keyword was found.
599
     *    'is_final'             => false,    // true if the final keyword was found.
600
     *    'is_static'            => false,    // true if the static keyword was found.
601
     *   );
602
     * </code>
603
     *
604
     * @param int $stackPtr The position in the stack of the function token to
605
     *                      acquire the properties for.
606
     *
607
     * @return array
608
     * @throws \PHP_CodeSniffer\Exceptions\TokenizerException If the specified position is not a
609
     *                                                        T_FUNCTION token.
610
     */
611
    public function getMethodProperties($stackPtr)
612
    {
613
        return $this->__call(__FUNCTION__, func_get_args());
614
    }
615
616
    /**
617
     * Returns the metrics found while processing this file.
618
     *
619
     * @return array
620
     */
621
    public function getMetrics()
622
    {
623
        return $this->__call(__FUNCTION__, func_get_args());
624
    }
625
626
    /**
627
     * Returns the number of successes recorded.
628
     *
629
     * @return int
630
     */
631
    public function getSuccessCount()
632
    {
633
        return $this->__call(__FUNCTION__, func_get_args());
634
    }
635
636
    /**
637
     * Returns the token stack for this file.
638
     *
639
     * @return array
640
     */
641
    public function getTokens()
642
    {
643
        return $this->__call(__FUNCTION__, func_get_args());
644
    }
645
646
    /**
647
     * Returns the content of the tokens from the specified start position in
648
     * the token stack for the specified length.
649
     *
650
     * @param int $start The position to start from in the token stack.
651
     * @param int $length The length of tokens to traverse from the start pos.
652
     * @param int $origContent Whether the original content or the tab replaced
653
     *                         content should be used.
654
     *
655
     * @return string The token contents.
656
     */
657
    public function getTokensAsString($start, $length, $origContent = false)
658
    {
659
        return $this->__call(__FUNCTION__, func_get_args());
660
    }
661
662
    /**
663
     * Returns the number of warnings raised.
664
     *
665
     * @return int
666
     */
667
    public function getWarningCount()
668
    {
669
        return $this->__call(__FUNCTION__, func_get_args());
670
    }
671
672
    /**
673
     * Returns the warnings raised from processing this file.
674
     *
675
     * @return array
676
     */
677
    public function getWarnings()
678
    {
679
        return $this->__call(__FUNCTION__, func_get_args());
680
    }
681
682
    /**
683
     * Determine if the passed token has a condition of one of the passed types.
684
     *
685
     * @param int $stackPtr The position of the token we are checking.
686
     * @param int|array $types The type(s) of tokens to search for.
687
     *
688
     * @return boolean
689
     */
690
    public function hasCondition($stackPtr, $types)
691
    {
692
        return $this->__call(__FUNCTION__, func_get_args());
693
    }
694
695
    /**
696
     * Determine if the passed token is a reference operator.
697
     *
698
     * Returns true if the specified token position represents a reference.
699
     * Returns false if the token represents a bitwise operator.
700
     *
701
     * @param int $stackPtr The position of the T_BITWISE_AND token.
702
     *
703
     * @return boolean
704
     */
705
    public function isReference($stackPtr)
706
    {
707
        return $this->__call(__FUNCTION__, func_get_args());
708
    }
709
710
    /**
711
     * Tokenizes the file and prepares it for the test run.
712
     *
713
     * @return void
714
     */
715
    public function parse()
716
    {
717
        $this->__call(__FUNCTION__, func_get_args());
718
    }
719
720
    /**
721
     * Starts the stack traversal and tells listeners when tokens are found.
722
     *
723
     * @return void
724
     */
725
    public function process()
726
    {
727
        $this->__call(__FUNCTION__, func_get_args());
728
    }
729
730
    /**
731
     * Record a metric about the file being examined.
732
     *
733
     * @param int $stackPtr The stack position where the metric was recorded.
734
     * @param string $metric The name of the metric being recorded.
735
     * @param string $value The value of the metric being recorded.
736
     *
737
     * @return boolean
738
     */
739
    public function recordMetric($stackPtr, $metric, $value)
740
    {
741
        return $this->__call(__FUNCTION__, func_get_args());
742
    }
743
744
    /**
745
     * Reloads the content of the file.
746
     *
747
     * By default, we have no idea where our content comes from, so we can't do anything.
748
     *
749
     * @return void
750
     */
751
    public function reloadContent()
752
    {
753
        $this->__call(__FUNCTION__, func_get_args());
754
    }
755
756
    /**
757
     * Set the content of the file.
758
     *
759
     * Setting the content also calculates the EOL char being used.
760
     *
761
     * @param string $content The file content.
762
     *
763
     * @return void
764
     */
765
    public function setContent($content)
766
    {
767
        $this->__call(__FUNCTION__, func_get_args());
768
    }
769
}