1
1
<?php
2
+
2
3
/**
3
4
* Copyright © Magento, Inc. All rights reserved.
4
5
* See COPYING.txt for license details.
5
6
*/
7
+
6
8
namespace Magento2 \Sniffs \Exceptions ;
7
9
8
- use function array_slice ;
9
- use PHP_CodeSniffer \Sniffs \Sniff ;
10
10
use PHP_CodeSniffer \Files \File ;
11
+ use PHP_CodeSniffer \Sniffs \Sniff ;
12
+ use PHP_CodeSniffer \Util \Tokens ;
11
13
12
14
/**
13
15
* Detects missing try-catch block when processing system resources.
@@ -43,7 +45,10 @@ class TryProcessSystemResourcesSniff implements Sniff
43
45
*/
44
46
public function register ()
45
47
{
46
- return [T_STRING ];
48
+ return [
49
+ \T_USE ,
50
+ \T_STRING ,
51
+ ];
47
52
}
48
53
49
54
/**
@@ -53,10 +58,30 @@ public function process(File $phpcsFile, $stackPtr)
53
58
{
54
59
$ tokens = $ phpcsFile ->getTokens ();
55
60
61
+ if ($ tokens [$ stackPtr ]['code ' ] === \T_USE ) {
62
+ $ previousToken = $ phpcsFile ->findPrevious (Tokens::$ emptyTokens , $ stackPtr - 1 , null , true );
63
+ $ nextToken = $ phpcsFile ->findNext (Tokens::$ emptyTokens , $ stackPtr + 1 , null , true );
64
+ $ semicolon = $ phpcsFile ->findNext (T_SEMICOLON , $ stackPtr + 1 );
65
+ if ($ previousToken !== false
66
+ && \in_array ($ tokens [$ previousToken ]['code ' ], [\T_OPEN_TAG , \T_SEMICOLON ], true )
67
+ && $ nextToken !== false
68
+ && $ tokens [$ nextToken ]['code ' ] === \T_STRING
69
+ && $ tokens [$ nextToken ]['content ' ] === 'function '
70
+ && $ semicolon !== false
71
+ ) {
72
+ // We have found a 'use function ...' statement; skip over this.
73
+ return $ semicolon ;
74
+ }
75
+
76
+ // This is not a 'use function ...' statement.
77
+ return ;
78
+ }
79
+
56
80
foreach ($ this ->functions as $ function ) {
57
81
if (strpos ($ tokens [$ stackPtr ]['content ' ], $ function ) !== 0 ) {
58
82
continue ;
59
83
}
84
+
60
85
$ tryPosition = $ phpcsFile ->findPrevious (T_TRY , $ stackPtr - 1 );
61
86
62
87
if ($ tryPosition !== false ) {
0 commit comments