diff --git a/src/applications/search/engineextension/PhabricatorSearchEngineExtension.php b/src/applications/search/engineextension/PhabricatorSearchEngineExtension.php --- a/src/applications/search/engineextension/PhabricatorSearchEngineExtension.php +++ b/src/applications/search/engineextension/PhabricatorSearchEngineExtension.php @@ -5,6 +5,10 @@ private $viewer; private $searchEngine; + /** + * @return string The EXTENSIONKEY of the PhabricatorSearchEngineExtension + * subclass + */ final public function getExtensionKey() { return $this->getPhobjectClassConstant('EXTENSIONKEY'); } @@ -14,6 +18,9 @@ return $this; } + /** + * @return PhabricatorUser + */ final public function getViewer() { return $this->viewer; } @@ -24,22 +31,43 @@ return $this; } + /** + * @return PhabricatorApplicationSearchEngine A subclass of + * PhabricatorApplicationSearchEngine + */ final public function getSearchEngine() { return $this->searchEngine; } + /** + * @return bool + */ abstract public function isExtensionEnabled(); + /** + * @return string Description of the Search Engine Extension + */ abstract public function getExtensionName(); + /** + * @return bool + */ abstract public function supportsObject($object); public function getExtensionOrder() { return 7000; } + /** + * @return array Subclasses of + * PhabricatorSearchField, or an empty array + */ public function getSearchFields($object) { return array(); } + /** + * @return array Subclasses of + * PhabricatorSearchEngineAttachment, or an empty array + */ public function getSearchAttachments($object) { return array(); } @@ -64,6 +92,11 @@ return array(); } + /** + * @return map Array of + * PhabricatorSearchEngineExtension extension keys and the + * PhabricatorSearchEngineExtension subclasses + */ final public static function getAllExtensions() { return id(new PhutilClassMapQuery()) ->setAncestorClass(__CLASS__) diff --git a/src/applications/search/ferret/PhabricatorFerretEngine.php b/src/applications/search/ferret/PhabricatorFerretEngine.php --- a/src/applications/search/ferret/PhabricatorFerretEngine.php +++ b/src/applications/search/ferret/PhabricatorFerretEngine.php @@ -6,8 +6,18 @@ private $ferretFunctions; private $templateObject; + /** + * @return string Application name in lower-case, e.g. 'maniphest' + */ abstract public function getApplicationName(); + /** + * @return string Object name in lower-case, e.g. 'task' + */ abstract public function getScopeName(); + /** + * @return string New instance of the corresponding + * PhabricatorApplicationSearchEngine subclass + */ abstract public function newSearchEngine(); public function getDefaultFunctionKey() { @@ -47,10 +57,16 @@ return $this->fieldMap[$raw_name]; } + /** + * @return PhutilSearchStemmer New instance of PhutilSearchStemmer + */ public function newStemmer() { return new PhutilSearchStemmer(); } + /** + * @return string + */ public function newTermsCorpus($raw_corpus) { $term_corpus = strtr( $raw_corpus, @@ -108,6 +124,10 @@ /* -( Schema )------------------------------------------------------------- */ + /** + * @return string Name of database table, e.g. 'calendar_event_fdocument' or + * 'maniphest_task_fdocument' or 'phame_post_fdocument' + */ public function getDocumentTableName() { $application = $this->getApplicationName(); $scope = $this->getScopeName(); @@ -152,6 +172,10 @@ ); } + /** + * @return string Name of database table, e.g. 'calendar_event_ffield' or + * 'maniphest_task_ffield' or 'phame_post_ffield' + */ public function getFieldTableName() { $application = $this->getApplicationName(); $scope = $this->getScopeName(); @@ -183,6 +207,10 @@ ); } + /** + * @return string Name of database table, e.g. 'calendar_event_fngrams' or + * 'maniphest_task_fngrams' or 'phame_post_fngrams' + */ public function getNgramsTableName() { $application = $this->getApplicationName(); $scope = $this->getScopeName(); @@ -213,6 +241,11 @@ ); } + /** + * @return string Name of database table, e.g. + * 'calendar_event_fngrams_common' or 'maniphest_task_fngrams_common' or + * 'phame_post_fngrams_common' + */ public function getCommonNgramsTableName() { $application = $this->getApplicationName(); $scope = $this->getScopeName(); diff --git a/src/applications/search/ferret/PhabricatorFerretMetadata.php b/src/applications/search/ferret/PhabricatorFerretMetadata.php --- a/src/applications/search/ferret/PhabricatorFerretMetadata.php +++ b/src/applications/search/ferret/PhabricatorFerretMetadata.php @@ -11,6 +11,10 @@ return $this; } + /** + * @return PhabricatorFerretEngine A subclass of PhabricatorFerretEngine, + * e.g. DiffusionCommitFerretEngine or ManiphestTaskFerretEngine + */ public function getEngine() { return $this->engine; } @@ -20,6 +24,9 @@ return $this; } + /** + * @return string PHID of a search result + */ public function getPHID() { return $this->phid; } @@ -29,10 +36,16 @@ return $this; } + /** + * @return int + */ public function getRelevance() { return $this->relevance; } + /** + * @return PhutilSortVector + */ public function getRelevanceSortVector() { $engine = $this->getEngine(); diff --git a/src/applications/search/ferret/function/FerretSearchFunction.php b/src/applications/search/ferret/function/FerretSearchFunction.php --- a/src/applications/search/ferret/function/FerretSearchFunction.php +++ b/src/applications/search/ferret/function/FerretSearchFunction.php @@ -3,14 +3,34 @@ abstract class FerretSearchFunction extends Phobject { + /** + * @return string Ferret function name, e.g. 'title', 'body', 'comment', + * 'core', 'all' + */ abstract public function getFerretFunctionName(); + /** + * @return string Ferret field key, e.g. 'titl', 'body', 'cmnt', 'core', + * 'full' + */ abstract public function getFerretFieldKey(); + /** + * @return bool + */ abstract public function supportsObject(PhabricatorFerretInterface $object); + /** + * @param string $name + * @return string Lower-case $name + */ final public static function getNormalizedFunctionName($name) { return phutil_utf8_strtolower($name); } + /** + * @param string $function_name + * @return void + * @throws Exception if $function_name is invalid + */ final public static function validateFerretFunctionName($function_name) { if (!preg_match('/^[a-zA-Z-]+\z/', $function_name)) { throw new Exception( @@ -22,6 +42,12 @@ } } + /** + * @param string $field_key Ferret search engine field key, supposed to be + * four characters and only lowercase latin letters + * @return void + * @throws Exception if $field_key is invalid + */ final public static function validateFerretFunctionFieldKey($field_key) { if (!preg_match('/^[a-z]{4}\z/', $field_key)) { throw new Exception( @@ -33,6 +59,9 @@ } } + /** + * @return array + */ final public static function newFerretSearchFunctions() { $extensions = PhabricatorFulltextEngineExtension::getAllExtensions();