| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 | 
							- <?php
 
- /**
 
-  * Copyright © Magento, Inc. All rights reserved.
 
-  * See COPYING.txt for license details.
 
-  */
 
- namespace Magento\Sniffs\LiteralNamespaces;
 
- use PHP_CodeSniffer\Sniffs\Sniff;
 
- use PHP_CodeSniffer\Files\File;
 
- /**
 
-  * Custom phpcs sniff to detect usages of literal class and interface names.
 
-  */
 
- class LiteralNamespacesSniff implements Sniff
 
- {
 
-     /**
 
-      * @var string
 
-      */
 
-     private $literalNamespacePattern = '/^[\\\]{0,2}[A-Z][A-Za-z]+([\\\]{1,2}[A-Z][A-Za-z]+){2,}(?!\\\+)$/';
 
-     /**
 
-      * @var array
 
-      */
 
-     private $classNames = [];
 
-     /**
 
-      * @inheritdoc
 
-      */
 
-     public function register()
 
-     {
 
-         return [
 
-             T_CONSTANT_ENCAPSED_STRING,
 
-             T_DOUBLE_QUOTED_STRING,
 
-         ];
 
-     }
 
-     /**
 
-      * @inheritdoc
 
-      */
 
-     public function process(File $sourceFile, $stackPtr)
 
-     {
 
-         $tokens = $sourceFile->getTokens();
 
-         if ($sourceFile->findPrevious(T_STRING_CONCAT, $stackPtr, $stackPtr - 3) ||
 
-             $sourceFile->findNext(T_STRING_CONCAT, $stackPtr, $stackPtr + 3)
 
-         ) {
 
-             return;
 
-         }
 
-         $content = trim($tokens[$stackPtr]['content'], "\"'");
 
-         // replace double slashes from class name for avoiding problems with class autoload
 
-         if (strpos($content, '\\') !== false) {
 
-             $content = preg_replace('|\\\{2,}|', '\\', $content);
 
-         }
 
-         if (preg_match($this->literalNamespacePattern, $content) === 1 && $this->classExists($content)) {
 
-             $sourceFile->addError(
 
-                 "Use ::class notation instead.",
 
-                 $stackPtr,
 
-                 'LiteralClassUsage'
 
-             );
 
-         }
 
-     }
 
-     /**
 
-      * @param string $className
 
-      * @return bool
 
-      */
 
-     private function classExists($className)
 
-     {
 
-         if (!isset($this->classNames[$className])) {
 
-             $this->classNames[$className] = class_exists($className) || interface_exists($className);
 
-         }
 
-         return $this->classNames[$className];
 
-     }
 
- }
 
 
  |