mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-26 16:52:41 +01:00
Miscellaneous updates for scoped symbols
Summary: Update Conduit, jump nav, and docs to handle symbol contexts. Test Plan: Call conduit, use jump nav. Reviewers: epriestley Reviewed By: epriestley CC: nh, aran, Korvin Maniphest Tasks: T1602 Differential Revision: https://secure.phabricator.com/D3172
This commit is contained in:
parent
a8d6af0f42
commit
7f98e3a8bd
3 changed files with 25 additions and 7 deletions
|
@ -30,6 +30,7 @@ final class ConduitAPI_diffusion_findsymbols_Method
|
||||||
return array(
|
return array(
|
||||||
'name' => 'optional string',
|
'name' => 'optional string',
|
||||||
'namePrefix' => 'optional string',
|
'namePrefix' => 'optional string',
|
||||||
|
'context' => 'optional string',
|
||||||
'language' => 'optional string',
|
'language' => 'optional string',
|
||||||
'type' => 'optional string',
|
'type' => 'optional string',
|
||||||
);
|
);
|
||||||
|
@ -47,6 +48,7 @@ final class ConduitAPI_diffusion_findsymbols_Method
|
||||||
protected function execute(ConduitAPIRequest $request) {
|
protected function execute(ConduitAPIRequest $request) {
|
||||||
$name = $request->getValue('name');
|
$name = $request->getValue('name');
|
||||||
$name_prefix = $request->getValue('namePrefix');
|
$name_prefix = $request->getValue('namePrefix');
|
||||||
|
$context = $request->getValue('context');
|
||||||
$language = $request->getValue('language');
|
$language = $request->getValue('language');
|
||||||
$type = $request->getValue('type');
|
$type = $request->getValue('type');
|
||||||
|
|
||||||
|
@ -57,6 +59,9 @@ final class ConduitAPI_diffusion_findsymbols_Method
|
||||||
if ($name_prefix !== null) {
|
if ($name_prefix !== null) {
|
||||||
$query->setNamePrefix($name_prefix);
|
$query->setNamePrefix($name_prefix);
|
||||||
}
|
}
|
||||||
|
if ($context !== null) {
|
||||||
|
$query->setContext($context);
|
||||||
|
}
|
||||||
if ($language !== null) {
|
if ($language !== null) {
|
||||||
$query->setLanguage($language);
|
$query->setLanguage($language);
|
||||||
}
|
}
|
||||||
|
@ -80,6 +85,7 @@ final class ConduitAPI_diffusion_findsymbols_Method
|
||||||
|
|
||||||
$response[] = array(
|
$response[] = array(
|
||||||
'name' => $result->getSymbolName(),
|
'name' => $result->getSymbolName(),
|
||||||
|
'context' => $result->getSymbolContext(),
|
||||||
'type' => $result->getSymbolType(),
|
'type' => $result->getSymbolType(),
|
||||||
'language' => $result->getSymbolLanguage(),
|
'language' => $result->getSymbolLanguage(),
|
||||||
'path' => $result->getPath(),
|
'path' => $result->getPath(),
|
||||||
|
|
|
@ -75,8 +75,15 @@ final class PhabricatorJumpNavHandler {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'find-symbol':
|
case 'find-symbol':
|
||||||
|
$context = '';
|
||||||
|
$symbol = $matches[1];
|
||||||
|
$parts = array();
|
||||||
|
if (preg_match('/(.*)(?:\\.|::|->)(.*)/', $symbol, $parts)) {
|
||||||
|
$context = '&context='.phutil_escape_uri($parts[1]);
|
||||||
|
$symbol = $parts[2];
|
||||||
|
}
|
||||||
return id(new AphrontRedirectResponse())
|
return id(new AphrontRedirectResponse())
|
||||||
->setURI('/diffusion/symbol/'.$matches[1].'/?jump=true');
|
->setURI("/diffusion/symbol/$symbol/?jump=true$context");
|
||||||
case 'create-task':
|
case 'create-task':
|
||||||
return id(new AphrontRedirectResponse())
|
return id(new AphrontRedirectResponse())
|
||||||
->setURI('/maniphest/task/create/?title='
|
->setURI('/maniphest/task/create/?title='
|
||||||
|
|
|
@ -38,16 +38,21 @@ script which can export them (for example, maybe by parsing a ##ctags## file).
|
||||||
|
|
||||||
The output format of the script should be one symbol per line:
|
The output format of the script should be one symbol per line:
|
||||||
|
|
||||||
<name> <type> <lang> <line> <path>
|
<context> <name> <type> <lang> <line> <path>
|
||||||
|
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
ExampleClass class php 13 /src/classes/ExampleClass.php
|
ExampleClass exampleMethod function php 13 /src/classes/ExampleClass.php
|
||||||
|
|
||||||
|
Context is, broadly speaking, the scope or namespace where the symbol is
|
||||||
|
defined. For object-oriented languages, this is probably a class name. The
|
||||||
|
symbols with that context are class constants, methods, properties, nested
|
||||||
|
classes, etc. When printing symbols without a context (those that are defined
|
||||||
|
globally, for instance), the ##<context>## field should be empty (that is, the
|
||||||
|
line should start with a space).
|
||||||
|
|
||||||
Your script should enumerate all the symbols in your project, and provide paths
|
Your script should enumerate all the symbols in your project, and provide paths
|
||||||
from the project root (where ".arcconfig" is) beginning with a "/". If there are
|
from the project root (where ".arcconfig" is) beginning with a "/".
|
||||||
any duplicate symbols, it should include logic to pick the "best" one -- symbol
|
|
||||||
names must be unique within a project, type and language.
|
|
||||||
|
|
||||||
You can look at ##generate_php_symbols.php## for an example of how you might
|
You can look at ##generate_php_symbols.php## for an example of how you might
|
||||||
write such a script, and run this command to see its output:
|
write such a script, and run this command to see its output:
|
||||||
|
@ -87,4 +92,4 @@ automatically link symbols in Differential.
|
||||||
|
|
||||||
NOTE: Because this feature depends on the syntax highlighter, it will work
|
NOTE: Because this feature depends on the syntax highlighter, it will work
|
||||||
better for some languages than others. It currently works fairly well for PHP,
|
better for some languages than others. It currently works fairly well for PHP,
|
||||||
but your milage may vary for other languages.
|
but your mileage may vary for other languages.
|
||||||
|
|
Loading…
Reference in a new issue