Page Menu
Home
Sealhub
Search
Configure Global Search
Log In
Files
F21590450
ArcanistPhpcsLinter.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Authored By
Unknown
Size
3 KB
Referenced Files
None
Subscribers
None
ArcanistPhpcsLinter.php
View Options
<?php
/**
* Uses "PHP_CodeSniffer" to detect checkstyle errors in php code.
* To use this linter, you must install PHP_CodeSniffer.
* http://pear.php.net/package/PHP_CodeSniffer.
*
* Optional configurations in .arcconfig:
*
* lint.phpcs.standard
* lint.phpcs.options
* lint.phpcs.bin
*
* @group linter
*/
final
class
ArcanistPhpcsLinter
extends
ArcanistExternalLinter
{
private
$reports
;
public
function
getLinterName
()
{
return
'PHPCS'
;
}
public
function
getLinterConfigurationName
()
{
return
'phpcs'
;
}
public
function
getMandatoryFlags
()
{
return
array
(
'--report=xml'
);
}
public
function
getInstallInstructions
()
{
return
pht
(
'Install PHPCS with `pear install PHP_CodeSniffer`.'
);
}
public
function
getDefaultFlags
()
{
// TODO: Deprecation warnings.
$config
=
$this
->
getEngine
()->
getConfigurationManager
();
$options
=
$config
->
getConfigFromAnySource
(
'lint.phpcs.options'
,
array
());
$standard
=
$config
->
getConfigFromAnySource
(
'lint.phpcs.standard'
);
if
(!
empty
(
$standard
))
{
if
(
is_array
(
$options
))
{
$options
[]
=
'--standard='
.
$standard
;
}
else
{
$options
.=
' --standard='
.
$standard
;
}
}
return
$options
;
}
public
function
getDefaultBinary
()
{
// TODO: Deprecation warnings.
$config
=
$this
->
getEngine
()->
getConfigurationManager
();
return
$config
->
getConfigFromAnySource
(
'lint.phpcs.bin'
,
'phpcs'
);
}
public
function
shouldExpectCommandErrors
()
{
return
true
;
}
protected
function
parseLinterOutput
(
$path
,
$err
,
$stdout
,
$stderr
)
{
// NOTE: Some version of PHPCS after 1.4.6 stopped printing a valid, empty
// XML document to stdout in the case of no errors. If PHPCS exits with
// error 0, just ignore output.
if
(!
$err
)
{
return
array
();
}
$report_dom
=
new
DOMDocument
();
$ok
=
@
$report_dom
->
loadXML
(
$stdout
);
if
(!
$ok
)
{
return
false
;
}
$files
=
$report_dom
->
getElementsByTagName
(
'file'
);
$messages
=
array
();
foreach
(
$files
as
$file
)
{
foreach
(
$file
->
childNodes
as
$child
)
{
if
(!(
$child
instanceof
DOMElement
))
{
continue
;
}
if
(
$child
->
tagName
==
'error'
)
{
$prefix
=
'E'
;
}
else
{
$prefix
=
'W'
;
}
$code
=
'PHPCS.'
.
$prefix
.
'.'
.
$child
->
getAttribute
(
'source'
);
$message
=
new
ArcanistLintMessage
();
$message
->
setPath
(
$path
);
$message
->
setLine
(
$child
->
getAttribute
(
'line'
));
$message
->
setChar
(
$child
->
getAttribute
(
'column'
));
$message
->
setCode
(
$code
);
$message
->
setDescription
(
$child
->
nodeValue
);
$message
->
setSeverity
(
$this
->
getLintMessageSeverity
(
$code
));
$messages
[]
=
$message
;
}
}
return
$messages
;
}
protected
function
getDefaultMessageSeverity
(
$code
)
{
if
(
preg_match
(
'/^PHPCS
\\
.W
\\
./'
,
$code
))
{
return
ArcanistLintSeverity
::
SEVERITY_WARNING
;
}
else
{
return
ArcanistLintSeverity
::
SEVERITY_ERROR
;
}
}
protected
function
getLintCodeFromLinterConfigurationKey
(
$code
)
{
if
(!
preg_match
(
'/^PHPCS
\\
.(E|W)
\\
./'
,
$code
))
{
throw
new
Exception
(
"Invalid severity code '{$code}', should begin with 'PHPCS.'."
);
}
return
$code
;
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Mon, Nov 9, 14:22 (1 h, 20 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1182347
Default Alt Text
ArcanistPhpcsLinter.php (3 KB)
Attached To
Mode
R118 Arcanist - fork
Attached
Detach File
Event Timeline