Changeset View
Changeset View
Standalone View
Standalone View
src/applications/differential/parser/DifferentialChangesetParser.php
Show All 35 Lines | final class DifferentialChangesetParser { | ||||
private $isSubparser; | private $isSubparser; | ||||
private $isTopLevel; | private $isTopLevel; | ||||
private $coverage; | private $coverage; | ||||
private $markupEngine; | private $markupEngine; | ||||
private $highlightErrors; | private $highlightErrors; | ||||
private $disableCache; | private $disableCache; | ||||
private $renderer; | private $renderer; | ||||
private $characterEncoding; | |||||
private $highlightAs; | |||||
public function setHighlightAs($highlight_as) { | |||||
$this->highlightAs = $highlight_as; | |||||
return $this; | |||||
} | |||||
public function getHighlightAs() { | |||||
return $this->highlightAs; | |||||
} | |||||
public function setCharacterEncoding($character_encoding) { | |||||
$this->characterEncoding = $character_encoding; | |||||
return $this; | |||||
} | |||||
public function getCharacterEncoding() { | |||||
return $this->characterEncoding; | |||||
} | |||||
public function setRenderer($renderer) { | public function setRenderer($renderer) { | ||||
$this->renderer = $renderer; | $this->renderer = $renderer; | ||||
return $this; | return $this; | ||||
} | } | ||||
public function getRenderer() { | public function getRenderer() { | ||||
if (!$this->renderer) { | if (!$this->renderer) { | ||||
▲ Show 20 Lines • Show All 365 Lines • ▼ Show 20 Lines | foreach ($render as $key => $text) { | ||||
$render[$key] = ArcanistDiffUtils::applyIntralineDiff( | $render[$key] = ArcanistDiffUtils::applyIntralineDiff( | ||||
$text, | $text, | ||||
$intra[$key]); | $intra[$key]); | ||||
} | } | ||||
} | } | ||||
} | } | ||||
private function getHighlightFuture($corpus) { | private function getHighlightFuture($corpus) { | ||||
$language = $this->highlightAs; | |||||
if (!$language) { | |||||
$language = $this->highlightEngine->getLanguageFromFilename( | |||||
$this->filename); | |||||
} | |||||
return $this->highlightEngine->getHighlightFuture( | return $this->highlightEngine->getHighlightFuture( | ||||
$this->highlightEngine->getLanguageFromFilename($this->filename), | $language, | ||||
$corpus); | $corpus); | ||||
} | } | ||||
protected function processHighlightedSource($data, $result) { | protected function processHighlightedSource($data, $result) { | ||||
$result_lines = phutil_split_lines($result); | $result_lines = phutil_split_lines($result); | ||||
foreach ($data as $key => $info) { | foreach ($data as $key => $info) { | ||||
if (!$info) { | if (!$info) { | ||||
Show All 15 Lines | switch ($whitespace_mode) { | ||||
break; | break; | ||||
} | } | ||||
$skip_cache = ($whitespace_mode != self::WHITESPACE_IGNORE_ALL); | $skip_cache = ($whitespace_mode != self::WHITESPACE_IGNORE_ALL); | ||||
if ($this->disableCache) { | if ($this->disableCache) { | ||||
$skip_cache = true; | $skip_cache = true; | ||||
} | } | ||||
if ($this->characterEncoding) { | |||||
$skip_cache = true; | |||||
} | |||||
if ($this->highlightAs) { | |||||
$skip_cache = true; | |||||
} | |||||
$this->whitespaceMode = $whitespace_mode; | $this->whitespaceMode = $whitespace_mode; | ||||
$changeset = $this->changeset; | $changeset = $this->changeset; | ||||
if ($changeset->getFileType() != DifferentialChangeType::FILE_TEXT && | if ($changeset->getFileType() != DifferentialChangeType::FILE_TEXT && | ||||
$changeset->getFileType() != DifferentialChangeType::FILE_SYMLINK) { | $changeset->getFileType() != DifferentialChangeType::FILE_SYMLINK) { | ||||
$this->markGenerated(); | $this->markGenerated(); | ||||
▲ Show 20 Lines • Show All 206 Lines • ▼ Show 20 Lines | public function render( | ||||
$mask_force = array()) { | $mask_force = array()) { | ||||
// "Top level" renders are initial requests for the whole file, versus | // "Top level" renders are initial requests for the whole file, versus | ||||
// requests for a specific range generated by clicking "show more". We | // requests for a specific range generated by clicking "show more". We | ||||
// generate property changes and "shield" UI elements only for toplevel | // generate property changes and "shield" UI elements only for toplevel | ||||
// requests. | // requests. | ||||
$this->isTopLevel = (($range_start === null) && ($range_len === null)); | $this->isTopLevel = (($range_start === null) && ($range_len === null)); | ||||
$this->highlightEngine = PhabricatorSyntaxHighlighter::newEngine(); | $this->highlightEngine = PhabricatorSyntaxHighlighter::newEngine(); | ||||
$encoding = null; | |||||
if ($this->characterEncoding) { | |||||
// We are forcing this changeset to be interpreted with a specific | |||||
// character encoding, so force all the hunks into that encoding and | |||||
// propagate it to the renderer. | |||||
$encoding = $this->characterEncoding; | |||||
foreach ($this->changeset->getHunks() as $hunk) { | |||||
$hunk->forceEncoding($this->characterEncoding); | |||||
} | |||||
} else { | |||||
// We're just using the default, so tell the renderer what that is | |||||
// (by reading the encoding from the first hunk). | |||||
foreach ($this->changeset->getHunks() as $hunk) { | |||||
$encoding = $hunk->getDataEncoding(); | |||||
break; | |||||
} | |||||
} | |||||
$this->tryCacheStuff(); | $this->tryCacheStuff(); | ||||
$render_pch = $this->shouldRenderPropertyChangeHeader($this->changeset); | $render_pch = $this->shouldRenderPropertyChangeHeader($this->changeset); | ||||
$rows = max( | $rows = max( | ||||
count($this->old), | count($this->old), | ||||
count($this->new)); | count($this->new)); | ||||
$renderer = $this->getRenderer() | $renderer = $this->getRenderer() | ||||
->setChangeset($this->changeset) | ->setChangeset($this->changeset) | ||||
->setRenderPropertyChangeHeader($render_pch) | ->setRenderPropertyChangeHeader($render_pch) | ||||
->setIsTopLevel($this->isTopLevel) | ->setIsTopLevel($this->isTopLevel) | ||||
->setOldRender($this->oldRender) | ->setOldRender($this->oldRender) | ||||
->setNewRender($this->newRender) | ->setNewRender($this->newRender) | ||||
->setHunkStartLines($this->hunkStartLines) | ->setHunkStartLines($this->hunkStartLines) | ||||
->setOldChangesetID($this->leftSideChangesetID) | ->setOldChangesetID($this->leftSideChangesetID) | ||||
->setNewChangesetID($this->rightSideChangesetID) | ->setNewChangesetID($this->rightSideChangesetID) | ||||
->setOldAttachesToNewFile($this->leftSideAttachesToNewFile) | ->setOldAttachesToNewFile($this->leftSideAttachesToNewFile) | ||||
->setNewAttachesToNewFile($this->rightSideAttachesToNewFile) | ->setNewAttachesToNewFile($this->rightSideAttachesToNewFile) | ||||
->setCodeCoverage($this->getCoverage()) | ->setCodeCoverage($this->getCoverage()) | ||||
->setRenderingReference($this->getRenderingReference()) | ->setRenderingReference($this->getRenderingReference()) | ||||
->setMarkupEngine($this->markupEngine) | ->setMarkupEngine($this->markupEngine) | ||||
->setHandles($this->handles) | ->setHandles($this->handles) | ||||
->setOldLines($this->old) | ->setOldLines($this->old) | ||||
->setNewLines($this->new); | ->setNewLines($this->new) | ||||
->setOriginalCharacterEncoding($encoding); | |||||
if ($this->user) { | if ($this->user) { | ||||
$renderer->setUser($this->user); | $renderer->setUser($this->user); | ||||
} | } | ||||
$shield = null; | $shield = null; | ||||
if ($this->isTopLevel && !$this->comments) { | if ($this->isTopLevel && !$this->comments) { | ||||
if ($this->isGenerated()) { | if ($this->isGenerated()) { | ||||
▲ Show 20 Lines • Show All 296 Lines • ▼ Show 20 Lines | |||||
* be shown. | * be shown. | ||||
* | * | ||||
* @param PhabricatorInlineCommentInterface Comment to test for visibility. | * @param PhabricatorInlineCommentInterface Comment to test for visibility. | ||||
* @return bool True if the comment is visible on the rendered diff. | * @return bool True if the comment is visible on the rendered diff. | ||||
*/ | */ | ||||
private function isCommentVisibleOnRenderedDiff( | private function isCommentVisibleOnRenderedDiff( | ||||
PhabricatorInlineCommentInterface $comment) { | PhabricatorInlineCommentInterface $comment) { | ||||
$changeset_id = $comment->getChangesetID(); | $changeset_id = $comment->getChangesetID(); | ||||
$is_new = $comment->getIsNewFile(); | $is_new = $comment->getIsNewFile(); | ||||
if ($changeset_id == $this->rightSideChangesetID && | if ($changeset_id == $this->rightSideChangesetID && | ||||
$is_new == $this->rightSideAttachesToNewFile) { | $is_new == $this->rightSideAttachesToNewFile) { | ||||
return true; | return true; | ||||
} | } | ||||
if ($changeset_id == $this->leftSideChangesetID && | if ($changeset_id == $this->leftSideChangesetID && | ||||
$is_new == $this->leftSideAttachesToNewFile) { | $is_new == $this->leftSideAttachesToNewFile) { | ||||
return true; | return true; | ||||
} | } | ||||
return false; | return false; | ||||
} | } | ||||
/** | /** | ||||
* Determine if a comment will appear on the right side of the display diff. | * Determine if a comment will appear on the right side of the display diff. | ||||
* Note that the comment must appear somewhere on the rendered changeset, as | * Note that the comment must appear somewhere on the rendered changeset, as | ||||
▲ Show 20 Lines • Show All 202 Lines • Show Last 20 Lines |