-
-
Notifications
You must be signed in to change notification settings - Fork 73
/
Copy pathCSSLintSniff.php
135 lines (105 loc) · 3.27 KB
/
CSSLintSniff.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
<?php
/**
* Runs csslint on the file.
*
* @author Roman Levishchenko <[email protected]>
* @copyright 2013-2014 Roman Levishchenko
* @license https://github.com/PHPCSStandards/PHP_CodeSniffer/blob/master/licence.txt BSD Licence
*
* @deprecated 3.9.0
*/
namespace PHP_CodeSniffer\Standards\Generic\Sniffs\Debug;
use PHP_CodeSniffer\Config;
use PHP_CodeSniffer\Files\File;
use PHP_CodeSniffer\Sniffs\DeprecatedSniff;
use PHP_CodeSniffer\Sniffs\Sniff;
use PHP_CodeSniffer\Util\Common;
class CSSLintSniff implements Sniff, DeprecatedSniff
{
/**
* A list of tokenizers this sniff supports.
*
* @var array
*/
public $supportedTokenizers = ['CSS'];
/**
* Returns the token types that this sniff is interested in.
*
* @return array<int|string>
*/
public function register()
{
return [T_OPEN_TAG];
}//end register()
/**
* Processes the tokens that this sniff is interested in.
*
* @param \PHP_CodeSniffer\Files\File $phpcsFile The file where the token was found.
* @param int $stackPtr The position in the stack where
* the token was found.
*
* @return int
*/
public function process(File $phpcsFile, $stackPtr)
{
$csslintPath = Config::getExecutablePath('csslint');
if ($csslintPath === null) {
return $phpcsFile->numTokens;
}
$fileName = $phpcsFile->getFilename();
$cmd = Common::escapeshellcmd($csslintPath).' '.escapeshellarg($fileName).' 2>&1';
exec($cmd, $output, $retval);
if (is_array($output) === false) {
return $phpcsFile->numTokens;
}
$count = count($output);
for ($i = 0; $i < $count; $i++) {
$matches = [];
$numMatches = preg_match(
'/(error|warning) at line (\d+)/',
$output[$i],
$matches
);
if ($numMatches === 0) {
continue;
}
$line = (int) $matches[2];
$message = 'csslint says: '.$output[($i + 1)];
// First line is message with error line and error code.
// Second is error message.
// Third is wrong line in file.
// Fourth is empty line.
$i += 4;
$phpcsFile->addWarningOnLine($message, $line, 'ExternalTool');
}//end for
// Ignore the rest of the file.
return $phpcsFile->numTokens;
}//end process()
/**
* Provide the version number in which the sniff was deprecated.
*
* @return string
*/
public function getDeprecationVersion()
{
return 'v3.9.0';
}//end getDeprecationVersion()
/**
* Provide the version number in which the sniff will be removed.
*
* @return string
*/
public function getRemovalVersion()
{
return 'v4.0.0';
}//end getRemovalVersion()
/**
* Provide a custom message to display with the deprecation.
*
* @return string
*/
public function getDeprecationMessage()
{
return 'Support for scanning CSS files will be removed completely in v4.0.0.';
}//end getDeprecationMessage()
}//end class