1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-26 00:32:42 +01:00

Make very minor generality improvements to the scope selector

Summary:
See PHI985. I think we pretty much need to start applying language-specific rules, but we can apply at least one more relatively language-agnostic rule: don't match lines which are indented 3+ levels.

In C++, we may have symbols like this:

```
class X {
  public:
    int m() { ... }
}
```

..but I believe no mainstream language puts symbol definitions 3+ levels deep.

Also clean up some of the tab handling very slightly.

Test Plan: Tests pass, looked at some C++ code and got slightly better (but still not great) matches.

Reviewers: amckinley

Reviewed By: amckinley

Differential Revision: https://secure.phabricator.com/D20479
This commit is contained in:
epriestley 2019-04-25 15:26:48 -07:00
parent 6eae75d8f2
commit 6d13b9fb7a

View file

@ -83,6 +83,12 @@ final class PhabricatorDiffScopeEngine
continue; continue;
} }
// Don't match context lines which are too deeply indented, since they
// are very unlikely to be symbol definitions.
if ($depth > 2) {
continue;
}
// The depth is the same as (or greater than) the depth we started with, // The depth is the same as (or greater than) the depth we started with,
// so this isn't a possible match. // so this isn't a possible match.
if ($depth >= $line_depth) { if ($depth >= $line_depth) {
@ -109,11 +115,14 @@ final class PhabricatorDiffScopeEngine
return $this->lineDepthMap; return $this->lineDepthMap;
} }
private function getTabWidth() {
// TODO: This should be configurable once we handle tab widths better.
return 2;
}
private function newLineDepthMap() { private function newLineDepthMap() {
$text_map = $this->getLineTextMap(); $text_map = $this->getLineTextMap();
$tab_width = $this->getTabWidth();
// TODO: This should be configurable once we handle tab widths better.
$tab_width = 2;
$depth_map = array(); $depth_map = array();
foreach ($text_map as $line_number => $line_text) { foreach ($text_map as $line_number => $line_text) {
@ -143,9 +152,8 @@ final class PhabricatorDiffScopeEngine
} }
// Round down to cheat our way through the " *" parts of docblock // Round down to cheat our way through the " *" parts of docblock
// comments. This is generally a reasonble heuristic because odd tab // comments.
// widths are exceptionally rare. $depth = (int)floor($count / $tab_width);
$depth = ($count >> 1);
$depth_map[$line_number] = $depth; $depth_map[$line_number] = $depth;
} }