Differential D17067 Diff 41083 src/applications/typeahead/datasource/PhabricatorTypeaheadDatasource.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/typeahead/datasource/PhabricatorTypeaheadDatasource.php
| Show First 20 Lines • Show All 390 Lines • ▼ Show 20 Lines | /* -( Token Functions )---------------------------------------------------- */ | ||||
| */ | */ | ||||
| public function evaluateTokens(array $tokens) { | public function evaluateTokens(array $tokens) { | ||||
| $results = array(); | $results = array(); | ||||
| $evaluate = array(); | $evaluate = array(); | ||||
| foreach ($tokens as $token) { | foreach ($tokens as $token) { | ||||
| if (!self::isFunctionToken($token)) { | if (!self::isFunctionToken($token)) { | ||||
| $results[] = $token; | $results[] = $token; | ||||
| } else { | } else { | ||||
| $evaluate[] = $token; | // Put a placeholder in the result list so that we retain token order | ||||
| // when possible. We'll overwrite this below. | |||||
| $results[] = null; | |||||
| $evaluate[last_key($results)] = $token; | |||||
| } | } | ||||
| } | } | ||||
| $results = $this->evaluateValues($results); | $results = $this->evaluateValues($results); | ||||
| foreach ($evaluate as $function) { | foreach ($evaluate as $result_key => $function) { | ||||
| $function = self::parseFunction($function); | $function = self::parseFunction($function); | ||||
| if (!$function) { | if (!$function) { | ||||
| throw new PhabricatorTypeaheadInvalidTokenException(); | throw new PhabricatorTypeaheadInvalidTokenException(); | ||||
| } | } | ||||
| $name = $function['name']; | $name = $function['name']; | ||||
| $argv = $function['argv']; | $argv = $function['argv']; | ||||
| foreach ($this->evaluateFunction($name, array($argv)) as $phid) { | $evaluated_tokens = $this->evaluateFunction($name, array($argv)); | ||||
| if (!$evaluated_tokens) { | |||||
| unset($results[$result_key]); | |||||
| } else { | |||||
| $is_first = true; | |||||
| foreach ($evaluated_tokens as $phid) { | |||||
| if ($is_first) { | |||||
| $results[$result_key] = $phid; | |||||
| $is_first = false; | |||||
| } else { | |||||
| $results[] = $phid; | $results[] = $phid; | ||||
| } | } | ||||
| } | } | ||||
| } | |||||
| } | |||||
| $results = array_values($results); | |||||
| $results = $this->didEvaluateTokens($results); | $results = $this->didEvaluateTokens($results); | ||||
| return $results; | return $results; | ||||
| } | } | ||||
| /** | /** | ||||
| * @task functions | * @task functions | ||||
| ▲ Show 20 Lines • Show All 113 Lines • Show Last 20 Lines | |||||