mirror of
https://we.phorge.it/source/arcanist.git
synced 2024-11-22 06:42:41 +01:00
Also coerce "char" for lint messages
Summary: Ref T8921. See similar change in D13695. This expands the scope to also coerce `setChar()`. Test Plan: `arc unit --everything` Reviewers: btrahan Subscribers: epriestley Maniphest Tasks: T8921 Differential Revision: https://secure.phabricator.com/D13737
This commit is contained in:
parent
5fcf7b5a3b
commit
e5946ed1a5
1 changed files with 33 additions and 19 deletions
|
@ -72,24 +72,7 @@ final class ArcanistLintMessage extends Phobject {
|
|||
}
|
||||
|
||||
public function setLine($line) {
|
||||
if ($line === null) {
|
||||
// This just means that we don't have any line information.
|
||||
} else {
|
||||
// For compatibility, accept digit strings since a lot of linters pass
|
||||
// line numbers that they have parsed from command output or XML, which
|
||||
// won't be properly typed.
|
||||
if (is_string($line) && preg_match('/^\d+\z/', $line)) {
|
||||
$line = (int)$line;
|
||||
}
|
||||
|
||||
if (!is_int($line)) {
|
||||
throw new Exception(
|
||||
pht(
|
||||
'Parameter passed to setLine() must be an integer.'));
|
||||
}
|
||||
}
|
||||
|
||||
$this->line = $line;
|
||||
$this->line = $this->validateInteger($line, 'setLine');
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
@ -98,7 +81,7 @@ final class ArcanistLintMessage extends Phobject {
|
|||
}
|
||||
|
||||
public function setChar($char) {
|
||||
$this->char = $char;
|
||||
$this->char = $this->validateInteger($char, 'setChar');
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
@ -242,4 +225,35 @@ final class ArcanistLintMessage extends Phobject {
|
|||
return $this->bypassChangedLineFiltering;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate an integer-like value, returning a strict integer.
|
||||
*
|
||||
* Further on, the pipeline is strict about types. We want to be a little
|
||||
* less strict in linters themselves, since they often parse command line
|
||||
* output or XML and will end up with string representations of numbers.
|
||||
*
|
||||
* @param mixed Integer or digit string.
|
||||
* @return int Integer.
|
||||
*/
|
||||
private function validateInteger($value, $caller) {
|
||||
if ($value === null) {
|
||||
// This just means that we don't have any information.
|
||||
return null;
|
||||
}
|
||||
|
||||
// Strings like "234" are fine, coerce them to integers.
|
||||
if (is_string($value) && preg_match('/^\d+\z/', $value)) {
|
||||
$value = (int)$value;
|
||||
}
|
||||
|
||||
if (!is_int($value)) {
|
||||
throw new Exception(
|
||||
pht(
|
||||
'Parameter passed to "%s" must be an integer.',
|
||||
$caller.'()'));
|
||||
}
|
||||
|
||||
return $value;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue