11<?php
2+
23/**
34 * Copyright © Magento, Inc. All rights reserved.
45 * See COPYING.txt for license details.
56 */
7+
68namespace Magento2 \Sniffs \Exceptions ;
79
8- use function array_slice ;
9- use PHP_CodeSniffer \Sniffs \Sniff ;
1010use PHP_CodeSniffer \Files \File ;
11+ use PHP_CodeSniffer \Sniffs \Sniff ;
12+ use PHP_CodeSniffer \Util \Tokens ;
1113
1214/**
1315 * Detects missing try-catch block when processing system resources.
@@ -43,7 +45,10 @@ class TryProcessSystemResourcesSniff implements Sniff
4345 */
4446 public function register ()
4547 {
46- return [T_STRING ];
48+ return [
49+ \T_USE ,
50+ \T_STRING ,
51+ ];
4752 }
4853
4954 /**
@@ -53,10 +58,31 @@ public function process(File $phpcsFile, $stackPtr)
5358 {
5459 $ tokens = $ phpcsFile ->getTokens ();
5560
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+
5681 foreach ($ this ->functions as $ function ) {
5782 if (strpos ($ tokens [$ stackPtr ]['content ' ], $ function ) !== 0 ) {
5883 continue ;
5984 }
85+
6086 $ tryPosition = $ phpcsFile ->findPrevious (T_TRY , $ stackPtr - 1 );
6187
6288 if ($ tryPosition !== false ) {
0 commit comments