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,31 @@ 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 (
66
+ $ previousToken !== false
67
+ && \in_array ($ tokens [$ previousToken ]['code ' ], [\T_OPEN_TAG , \T_SEMICOLON ], true )
68
+ && $ nextToken !== false
69
+ && $ tokens [$ nextToken ]['code ' ] === \T_STRING
70
+ && $ tokens [$ nextToken ]['content ' ] === 'function '
71
+ && $ semicolon !== false
72
+ ) {
73
+ // We have found a 'use function ...' statement; skip over this.
74
+ return $ semicolon ;
75
+ }
76
+
77
+ // This is not a 'use function ...' statement.
78
+ return ;
79
+ }
80
+
56
81
foreach ($ this ->functions as $ function ) {
57
82
if (strpos ($ tokens [$ stackPtr ]['content ' ], $ function ) !== 0 ) {
58
83
continue ;
59
84
}
85
+
60
86
$ tryPosition = $ phpcsFile ->findPrevious (T_TRY , $ stackPtr - 1 );
61
87
62
88
if ($ tryPosition !== false ) {
0 commit comments