1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2025-03-10 19:34:51 +01:00

Facts and Charts: Add more PHPDoc coverage

Summary: Make things a bit easier to understand.

Test Plan: Check parameters and return values for types and classes.

Reviewers: O1 Blessed Committers, Cigaryno, valerio.bozzolan

Reviewed By: O1 Blessed Committers, Cigaryno, valerio.bozzolan

Subscribers: tobiaswiese, valerio.bozzolan, Matthew, Cigaryno

Differential Revision: https://we.phorge.it/D25906
This commit is contained in:
Andre Klapper 2025-03-07 20:11:12 +01:00
parent 955ec77760
commit fa00599de5
10 changed files with 100 additions and 1 deletions

View file

@ -7,6 +7,9 @@ final class PhabricatorChartDataQuery
private $minimumValue; private $minimumValue;
private $maximumValue; private $maximumValue;
/**
* @param int $minimum_value Epoch timestamp of the first input data
*/
public function setMinimumValue($minimum_value) { public function setMinimumValue($minimum_value) {
$this->minimumValue = $minimum_value; $this->minimumValue = $minimum_value;
return $this; return $this;
@ -16,6 +19,9 @@ final class PhabricatorChartDataQuery
return $this->minimumValue; return $this->minimumValue;
} }
/**
* @param int $maximum_value Epoch timestamp of the last input data
*/
public function setMaximumValue($maximum_value) { public function setMaximumValue($maximum_value) {
$this->maximumValue = $maximum_value; $this->maximumValue = $maximum_value;
return $this; return $this;
@ -25,6 +31,10 @@ final class PhabricatorChartDataQuery
return $this->maximumValue; return $this->maximumValue;
} }
/**
* @param int $limit Maximum amount of data points to handle. If there are
* more data points, some in-between data will be ignored.
*/
public function setLimit($limit) { public function setLimit($limit) {
$this->limit = $limit; $this->limit = $limit;
return $this; return $this;
@ -34,6 +44,13 @@ final class PhabricatorChartDataQuery
return $this->limit; return $this->limit;
} }
/**
* Filter input data: Remove values lower resp. higher than the minimum
* resp. maximum values; remove some data if amount of data above the limit.
*
* @param array<int> $xv Epoch timestamps of unfitlered input data
* @return array<int> Epoch timestamps of fitlered input data
*/
public function selectInputValues(array $xv) { public function selectInputValues(array $xv) {
$result = array(); $result = array();

View file

@ -13,6 +13,9 @@ abstract class PhabricatorChartDataset
return $this->functions; return $this->functions;
} }
/**
* @param array<PhabricatorComposeChartFunction> $functions
*/
final public function setFunctions(array $functions) { final public function setFunctions(array $functions) {
assert_instances_of($functions, 'PhabricatorComposeChartFunction'); assert_instances_of($functions, 'PhabricatorComposeChartFunction');
@ -67,7 +70,10 @@ abstract class PhabricatorChartDataset
abstract protected function newChartDisplayData( abstract protected function newChartDisplayData(
PhabricatorChartDataQuery $data_query); PhabricatorChartDataQuery $data_query);
/**
* @param PhabricatorChartDataQuery $data_query
* @return PhabricatorChartDisplayData
*/
final public function getTabularDisplayData( final public function getTabularDisplayData(
PhabricatorChartDataQuery $data_query) { PhabricatorChartDataQuery $data_query) {
$results = array(); $results = array();

View file

@ -10,6 +10,12 @@ abstract class PhabricatorChartFunction
return $this->getPhobjectClassConstant('FUNCTIONKEY', 32); return $this->getPhobjectClassConstant('FUNCTIONKEY', 32);
} }
/**
* Get all available PhabricatorChartFunction subclasses
*
* @return array<PhabricatorChartFunction> All Phabricator*ChartFunction
* classes which implement getFunctionKey()
*/
final public static function getAllFunctions() { final public static function getAllFunctions() {
return id(new PhutilClassMapQuery()) return id(new PhutilClassMapQuery())
->setAncestorClass(__CLASS__) ->setAncestorClass(__CLASS__)
@ -127,6 +133,11 @@ abstract class PhabricatorChartFunction
return $results; return $results;
} }
/**
* Return arrays of x,y data points for a two-dimensional chart
* @param PhabricatorChartDataQuery $query
* @return array<array<int,int>> x => epoch value; y => incremental number
*/
public function newDatapoints(PhabricatorChartDataQuery $query) { public function newDatapoints(PhabricatorChartDataQuery $query) {
$xv = $this->newInputValues($query); $xv = $this->newInputValues($query);

View file

@ -7,6 +7,12 @@ final class PhabricatorChartStackedAreaDataset
private $stacks; private $stacks;
/**
* @param array<array> $stacks One or more arrays with
* PhabricatorChartFunctionLabel names of each PhabricatorChartFunction,
* grouped by stacking
* (e.g. [["created","reopened","moved-in"],["closed","moved-out"]])
*/
public function setStacks(array $stacks) { public function setStacks(array $stacks) {
$this->stacks = $stacks; $this->stacks = $stacks;
return $this; return $this;
@ -16,6 +22,10 @@ final class PhabricatorChartStackedAreaDataset
return $this->stacks; return $this->stacks;
} }
/**
* @param PhabricatorChartDataQuery $data_query
* @return PhabricatorChartDisplayData
*/
protected function newChartDisplayData( protected function newChartDisplayData(
PhabricatorChartDataQuery $data_query) { PhabricatorChartDataQuery $data_query) {
@ -211,6 +221,10 @@ final class PhabricatorChartStackedAreaDataset
return $must_define; return $must_define;
} }
/**
* @param PhabricatorChartDataQuery $data_query
* @param array<PhabricatorChartFunction> $functions
*/
private function getFunctionDatapoints( private function getFunctionDatapoints(
PhabricatorChartDataQuery $data_query, PhabricatorChartDataQuery $data_query,
array $functions) { array $functions) {
@ -231,6 +245,14 @@ final class PhabricatorChartStackedAreaDataset
return $points; return $points;
} }
/**
* @param PhabricatorChartDataQuery $data_query
* @param array<string<epoch<string:int,string:int>>> $point_lists The key is
* the stack (the PhabricatorChartFunctionLabel name of the
* PhabricatorChartFunction (e.g. "created" or "moved-in")) and its value
* is an array of keys which are date epochs and their values are another
* array of x:date epoch and y:incremental integer pairs.
*/
private function getGeometry( private function getGeometry(
PhabricatorChartDataQuery $data_query, PhabricatorChartDataQuery $data_query,
array $point_lists) { array $point_lists) {

View file

@ -45,6 +45,10 @@ abstract class PhabricatorChartEngine
return clone id($engine_map[$engine_key]); return clone id($engine_map[$engine_key]);
} }
/**
* Load all available chart engines.
* @return list<PhabricatorChartEngine> All available chart engines.
*/
final public static function getAllChartEngines() { final public static function getAllChartEngines() {
return id(new PhutilClassMapQuery()) return id(new PhutilClassMapQuery())
->setAncestorClass(__CLASS__) ->setAncestorClass(__CLASS__)

View file

@ -25,6 +25,11 @@ final class PhabricatorChartRenderingEngine
return $this->chart; return $this->chart;
} }
/**
* Load the chart by its key
* @param string $chart_key 12-character string identifier of chart to load
* @return PhabricatorFactChart
*/
public function loadChart($chart_key) { public function loadChart($chart_key) {
$chart = id(new PhabricatorFactChart())->loadOneWhere( $chart = id(new PhabricatorFactChart())->loadOneWhere(
'chartKey = %s', 'chartKey = %s',
@ -37,12 +42,20 @@ final class PhabricatorChartRenderingEngine
return $chart; return $chart;
} }
/**
* Get the relative URI of the chart
* @param string $chart_key 12-character string identifier of chart to load
* @return string Relative URI of the chart, e.g. "fact/chart/a1b2c3d4e5f6/"
*/
public static function getChartURI($chart_key) { public static function getChartURI($chart_key) {
return id(new PhabricatorFactChart()) return id(new PhabricatorFactChart())
->setChartKey($chart_key) ->setChartKey($chart_key)
->getURI(); ->getURI();
} }
/**
* @return PhabricatorFactChart
*/
public function getStoredChart() { public function getStoredChart() {
if (!$this->storedChart) { if (!$this->storedChart) {
$chart = $this->getChart(); $chart = $this->getChart();
@ -84,6 +97,9 @@ final class PhabricatorChartRenderingEngine
return $this->storedChart; return $this->storedChart;
} }
/**
* @return PhutilSafeHTML
*/
public function newChartView() { public function newChartView() {
$chart = $this->getStoredChart(); $chart = $this->getStoredChart();
$chart_key = $chart->getChartKey(); $chart_key = $chart->getChartKey();

View file

@ -11,11 +11,20 @@ abstract class PhabricatorFactEngine extends Phobject {
->execute(); ->execute();
} }
/**
* @return array All types of facts known by this FactEngine
*/
abstract public function newFacts(); abstract public function newFacts();
/**
* @return bool
*/
abstract public function supportsDatapointsForObject( abstract public function supportsDatapointsForObject(
PhabricatorLiskDAO $object); PhabricatorLiskDAO $object);
/**
* Add new datapoints (due to a transaction) about an object
*/
abstract public function newDatapointsForObject(PhabricatorLiskDAO $object); abstract public function newDatapointsForObject(PhabricatorLiskDAO $object);
final protected function getFact($key) { final protected function getFact($key) {

View file

@ -3,6 +3,9 @@
final class PhabricatorManiphestTaskFactEngine final class PhabricatorManiphestTaskFactEngine
extends PhabricatorTransactionFactEngine { extends PhabricatorTransactionFactEngine {
/**
* @return array<PhabricatorCountFact> All known task related facts
*/
public function newFacts() { public function newFacts() {
return array( return array(
id(new PhabricatorCountFact()) id(new PhabricatorCountFact())

View file

@ -49,6 +49,9 @@ final class PhabricatorFactIntDatapoint extends PhabricatorFactDAO {
return $this->objectPHID; return $this->objectPHID;
} }
/**
* @param string $dimension_phid
*/
public function setDimensionPHID($dimension_phid) { public function setDimensionPHID($dimension_phid) {
$this->dimensionPHID = $dimension_phid; $this->dimensionPHID = $dimension_phid;
return $this; return $this;

View file

@ -5,6 +5,9 @@ final class PhabricatorProjectBurndownChartEngine
const CHARTENGINEKEY = 'project.burndown'; const CHARTENGINEKEY = 'project.burndown';
/**
* @param array<PhabricatorProject> $projects
*/
public function setProjects(array $projects) { public function setProjects(array $projects) {
assert_instances_of($projects, 'PhabricatorProject'); assert_instances_of($projects, 'PhabricatorProject');
$project_phids = mpull($projects, 'getPHID'); $project_phids = mpull($projects, 'getPHID');
@ -97,6 +100,11 @@ final class PhabricatorProjectBurndownChartEngine
$chart->attachDatasets($datasets); $chart->attachDatasets($datasets);
} }
/**
* @param string $fact_key The key of the new fact sum
* (e.g. "tasks.open-count.assign.project")
* @param array<string> Project PHIDs
*/
private function newFactSum($fact_key, array $phids) { private function newFactSum($fact_key, array $phids) {
$result = array(); $result = array();
$result[] = 'sum'; $result[] = 'sum';