1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-12-23 14:00:56 +01:00

Display context in changeset gaps

Summary:
I quite often wonder what's inside these gaps displayed in changeset. In which method I am? Is it a while loop or a foreach? Maybe I'm in a class but the project doesn't have a sctrict policy of one class per file so what's the name of the class?

I've experimented with bunch of rules:

- Always display 0 indentation: useless for one class per file.
- Always display 1 indentation: weird inside global functions.
- Display closest lower indentation: works best.

I'm not sure about highlighting the context. I like highlighting but maybe in this case subtler monochrome text will work better.

Test Plan: Browsed bunch of diffs, loved it.

Reviewers: epriestley

Reviewed By: epriestley

CC: aran, Korvin

Differential Revision: https://secure.phabricator.com/D3371
This commit is contained in:
vrana 2012-08-22 23:26:03 -07:00
parent 40cccb0077
commit ca1775b468

View file

@ -1363,6 +1363,28 @@ final class DifferentialChangesetParser {
$highlight_new = array_flip($highlight_new);
}
// We need to go backwards to properly indent whitespace in this code:
//
// 0: class C {
// 1:
// 1: function f() {
// 2:
// 2: return;
//
$depths = array();
$last_depth = 0;
for ($ii = $range_start + $range_len - 1; $ii >= $range_start; $ii--) {
// We need to expand tabs to process mixed indenting and to round
// correctly later.
$line = str_replace("\t", " ", $this->new[$ii]['text']);
$trimmed = ltrim($line);
if ($trimmed != '') {
// We round down to flatten "/**" and " *".
$last_depth = floor((strlen($line) - strlen($trimmed)) / 2);
}
$depths[$ii] = $last_depth;
}
for ($ii = $range_start; $ii < $range_start + $range_len; $ii++) {
if (empty($mask[$ii])) {
// If we aren't going to show this line, we've just entered a gap.
@ -1414,12 +1436,12 @@ final class DifferentialChangesetParser {
),
'Show All '.$len.' Lines');
if ($len > 40) {
$is_last_block = false;
if ($ii + $len >= $rows) {
$is_last_block = true;
}
if ($len > 40) {
$contents[] = javelin_render_tag(
'a',
array(
@ -1436,6 +1458,17 @@ final class DifferentialChangesetParser {
: "\xE2\x96\xBC Show 20 Lines");
}
if (!$is_last_block && $depths[$ii + $len]) {
for ($l = $ii + $len - 1; $l >= $ii; $l--) {
$line = $this->new[$l]['text'];
if ($depths[$l] < $depths[$ii + $len] && trim($line) != '') {
$contents[] = '<code>'.$this->newRender[$l].'</code>';
break;
}
}
}
$container = javelin_render_tag(
'tr',
array(