mirror of
https://github.com/danog/psalm.git
synced 2025-01-22 13:51:54 +01:00
ConsoleReport: Add links to open file in editor
This commit is contained in:
parent
143964767d
commit
ab0049d0ff
@ -27,6 +27,11 @@ class DataFlowNodeData
|
|||||||
*/
|
*/
|
||||||
public $file_name;
|
public $file_name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
public $file_path;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
@ -62,6 +67,7 @@ class DataFlowNodeData
|
|||||||
int $line_from,
|
int $line_from,
|
||||||
int $line_to,
|
int $line_to,
|
||||||
string $file_name,
|
string $file_name,
|
||||||
|
string $file_path,
|
||||||
string $snippet,
|
string $snippet,
|
||||||
int $from,
|
int $from,
|
||||||
int $to,
|
int $to,
|
||||||
@ -73,6 +79,7 @@ class DataFlowNodeData
|
|||||||
$this->line_from = $line_from;
|
$this->line_from = $line_from;
|
||||||
$this->line_to = $line_to;
|
$this->line_to = $line_to;
|
||||||
$this->file_name = $file_name;
|
$this->file_name = $file_name;
|
||||||
|
$this->file_path = $file_path;
|
||||||
$this->snippet = $snippet;
|
$this->snippet = $snippet;
|
||||||
$this->from = $from;
|
$this->from = $from;
|
||||||
$this->to = $to;
|
$this->to = $to;
|
||||||
|
@ -66,6 +66,7 @@ abstract class TaintedInput extends CodeIssue
|
|||||||
$location->getLineNumber(),
|
$location->getLineNumber(),
|
||||||
$location->getEndLineNumber(),
|
$location->getEndLineNumber(),
|
||||||
$location->file_name,
|
$location->file_name,
|
||||||
|
$location->file_path,
|
||||||
$location->getSnippet(),
|
$location->getSnippet(),
|
||||||
$selection_bounds[0],
|
$selection_bounds[0],
|
||||||
$selection_bounds[1],
|
$selection_bounds[1],
|
||||||
|
@ -3,12 +3,19 @@ namespace Psalm\Report;
|
|||||||
|
|
||||||
use Psalm\Config;
|
use Psalm\Config;
|
||||||
use Psalm\Internal\Analyzer\DataFlowNodeData;
|
use Psalm\Internal\Analyzer\DataFlowNodeData;
|
||||||
|
use Psalm\Internal\Analyzer\IssueData;
|
||||||
use Psalm\Report;
|
use Psalm\Report;
|
||||||
|
|
||||||
|
use function get_cfg_var;
|
||||||
|
use function ini_get;
|
||||||
|
use function strtr;
|
||||||
use function substr;
|
use function substr;
|
||||||
|
|
||||||
class ConsoleReport extends Report
|
class ConsoleReport extends Report
|
||||||
{
|
{
|
||||||
|
/** @var string|null */
|
||||||
|
private $linkFormat;
|
||||||
|
|
||||||
public function create(): string
|
public function create(): string
|
||||||
{
|
{
|
||||||
$output = '';
|
$output = '';
|
||||||
@ -34,7 +41,7 @@ class ConsoleReport extends Report
|
|||||||
$issue_reference = $issue_data->link ? ' (see ' . $issue_data->link . ')' : '';
|
$issue_reference = $issue_data->link ? ' (see ' . $issue_data->link . ')' : '';
|
||||||
|
|
||||||
$issue_string .= ': ' . $issue_data->type
|
$issue_string .= ': ' . $issue_data->type
|
||||||
. ' - ' . $issue_data->file_name . ':' . $issue_data->line_from . ':' . $issue_data->column_from
|
. ' - ' . $this->getFileReference($issue_data)
|
||||||
. ' - ' . $issue_data->message . $issue_reference . "\n";
|
. ' - ' . $issue_data->message . $issue_reference . "\n";
|
||||||
|
|
||||||
|
|
||||||
@ -75,10 +82,7 @@ class ConsoleReport extends Report
|
|||||||
|
|
||||||
foreach ($taint_trace as $node_data) {
|
foreach ($taint_trace as $node_data) {
|
||||||
if ($node_data instanceof DataFlowNodeData) {
|
if ($node_data instanceof DataFlowNodeData) {
|
||||||
$snippets .= ' ' . $node_data->label
|
$snippets .= ' ' . $node_data->label . ' - ' . $this->getFileReference($node_data) . "\n";
|
||||||
. ' - ' . $node_data->file_name
|
|
||||||
. ':' . $node_data->line_from
|
|
||||||
. ':' . $node_data->column_from . "\n";
|
|
||||||
|
|
||||||
if ($this->show_snippet) {
|
if ($this->show_snippet) {
|
||||||
$snippet = $node_data->snippet;
|
$snippet = $node_data->snippet;
|
||||||
@ -102,4 +106,21 @@ class ConsoleReport extends Report
|
|||||||
|
|
||||||
return $snippets;
|
return $snippets;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param IssueData|DataFlowNodeData $data
|
||||||
|
*/
|
||||||
|
private function getFileReference($data): string
|
||||||
|
{
|
||||||
|
if (null === $this->linkFormat) {
|
||||||
|
// if xdebug is not enabled, use `get_cfg_var` to get the value directly from php.ini
|
||||||
|
$this->linkFormat = ini_get('xdebug.file_link_format') ?: get_cfg_var('xdebug.file_link_format')
|
||||||
|
?: 'file://%f#L%l';
|
||||||
|
}
|
||||||
|
|
||||||
|
$link = strtr($this->linkFormat, ['%f' => $data->file_path, '%l' => $data->line_from]);
|
||||||
|
$reference = $data->file_name . ':' . $data->line_from . ':' . $data->column_from;
|
||||||
|
|
||||||
|
return "\033]8;;" . $link . "\033\\" . $reference . "\033]8;;\033\\";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user