8000 Introduce context providers · symfony/symfony@f418c8e · GitHub
[go: up one dir, main page]

Skip to content

Commit f418c8e

Browse files
committed
Introduce context providers
1 parent eed4060 commit f418c8e

File tree

10 files changed

+409
-103
lines changed

10 files changed

+409
-103
lines changed

src/Symfony/Bundle/DebugBundle/Resources/config/services.xml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,19 @@
3535
<argument /> <!-- server host -->
3636
<argument type="service" id="var_dumper.cli_dumper" />
3737
<argument /> <!-- whether to swallow or not wrapped dumper -->
38+
<argument type="collection">
39+
<argument type="service" key="source">
40+
<service class="Symfony\Component\VarDumper\Dumper\ContextProvider\SourceContextProvider" />
41+
</argument>
42+
<argument type="service" key="request">
43+
<service class="Symfony\Component\VarDumper\Dumper\ContextProvider\RequestContextProvider">
44+
<argument type="service" id="request_stack" />
45+
</service>
46+
</argument>
47+
<argument type="service" key="cli">
48+
<service class="Symfony\Component\VarDumper\Dumper\ContextProvider\CliContextProvider" />
49+
</argument>
50+
</argument>
3851
</service>
3952
<service id="var_dumper.cli_dumper" class="Symfony\Component\VarDumper\Dumper\CliDumper" public="true">
4053
<argument>null</argument><!-- debug.dump_destination -->
@@ -55,6 +68,8 @@
5568
<argument type="service" id="var_dumper.cli_dumper" />
5669
<argument type="service" id="var_dumper.html_dumper" />
5770
<argument/> <!-- default host -->
71+
<argument type="service" id="debug.file_link_formatter" on-invalid="null" />
72+
<argument type="string">%kernel.project_dir%</argument>
5873
<argument type="service" id="logger" on-invalid= 8000 "null" />
5974
<tag name="console.command" command="server:dump" />
6075
<tag name="monolog.logger" channel="debug" />

src/Symfony/Component/HttpKernel/DataCollector/DumpDataCollector.php

Lines changed: 10 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@
1818
use Symfony\Component\VarDumper\Cloner\Data;
1919
use Symfony\Component\VarDumper\Cloner\VarCloner;
2020
use Symfony\Component\VarDumper\Dumper\CliDumper;
21+
use Symfony\Component\VarDumper\Dumper\ContextProvider\SourceContextProvider;
2122
use Symfony\Component\VarDumper\Dumper\HtmlDumper;
2223
use Symfony\Component\VarDumper\Dumper\DataDumperInterface;
2324
use Symfony\Component\VarDumper\Dumper\ServerDumper;
24-
use Twig\Template;
2525

2626
/**
2727
* @author Nicolas Grekas <p@tchwork.com>
@@ -40,6 +40,7 @@ class DumpDataCollector extends DataCollector implements DataDumperInterface
4040
private $dumper;
4141
private $dumperIsInjected;
4242
private $serverDumper;
43+
private $sourceContextProvider;
4344

4445
public function __construct(Stopwatch $stopwatch = null, $fileLinkFormat = null, $charset = null, RequestStack $requestStack = null, DataDumperInterface $dumper = null, ServerDumper $serverDumper = null)
4546
{
@@ -58,6 +59,8 @@ public function __construct(Stopwatch $stopwatch = null, $fileLinkFormat = null,
5859
&$this->isCollected,
5960
&$this->clonesCount,
6061
);
62+
63+
$this->sourceContextProvider = new SourceContextProvider();
6164
}
6265

6366
public function __clone()
@@ -74,64 +77,16 @@ public function dump(Data $data)
7477
$this->isCollected = false;
7578
}
7679

77-
$trace = debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT | DEBUG_BACKTRACE_IGNORE_ARGS, 7);
78-
79-
$file = $trace[0]['file'];
80-
$line = $trace[0]['line'];
81-
$name = false;
82-
$fileExcerpt = false;
83-
84-
for ($i = 1; $i < 7; ++$i) {
85-
if (isset($trace[$i]['class'], $trace[$i]['function'])
86-
&& 'dump' === $trace[$i]['function']
87-
&& 'Symfony\Component\VarDumper\VarDumper' === $trace[$i]['class']
88-
) {
89-
$file = $trace[$i]['file'];
90-
$line = $trace[$i]['line'];
91-
92-
while (++$i < 7) {
93-
if (isset($trace[$i]['function'], $trace[$i]['file']) && empty($trace[$i]['class']) && 0 !== strpos($trace[$i]['function'], 'call_user_func')) {
94-
$file = $trace[$i]['file'];
95-
$line = $trace[$i]['line'];
96-
97-
break;
98-
} elseif (isset($trace[$i]['object']) && $trace[$i]['object'] instanceof Template) {
99-
$template = $trace[$i]['object'];
100-
$name = $template->getTemplateName();
101-
$src = method_exists($template, 'getSourceContext') ? $template->getSourceContext()->getCode() : (method_exists($template, 'getSource') ? $template->getSource() : false);
102-
$info = $template->getDebugInfo();
103-
if (isset($info[$trace[$i - 1]['line']])) {
104-
$line = $info[$trace[$i - 1]['line']];
105-
$file = method_exists($template, 'getSourceContext') ? $template->getSourceContext()->getPath() : null;
106-
107-
if ($src) {
108-
$src = explode("\n", $src);
109-
$fileExcerpt = array();
110-
111-
for ($i = max($line - 3, 1), $max = min($line + 3, count($src)); $i <= $max; ++$i) {
112-
$fileExcerpt[] = '<li'.($i === $line ? ' class="selected"' : '').'><code>'.$this->htmlEncode($src[$i - 1]).'</code></li>';
113-
}
114-
115-
$fileExcerpt = '<ol start="'.max($line - 3, 1).'">'.implode("\n", $fileExcerpt).'</ol>';
116-
}
117-
}
118-
break;
119-
}
120-
}
121-
break;
122-
}
123-
}
124-
125-
if (false === $name) {
126-
$name = str_replace('\\', '/', $file);
127-
$name = substr($name, strrpos($name, '/') + 1);
128-
}
80+
$provider = $this->sourceContextProvider;
81+
$context = $provider();
12982

13083
if ($this->dumper) {
131-
$this->doDump($data, $name, $file, $line);
84+
$this->doDump($data, $context['name'], $context['file'], $context['line']);
13285
}
13386

134-
$this->data[] = compact('data', 'name', 'file', 'line', 'fileExcerpt');
87+
$context['data'] = $data;
88+
89+
$this->data[] = $context;
13590
++$this->dataCount;
13691

13792
if ($this->stopwatch) {
@@ -298,18 +253,4 @@ private function doDump($data, $name, $file, $line)
298253
}
299254
$dumper->dump($data);
300255
}
301-
302-
private function htmlEncode($s)
303-
{
304-
$html = '';
305-
306-
$dumper = new HtmlDumper(function ($line) use (&$html) { $html .= $line; }, $this->charset);
307-
$dumper->setDumpHeader('');
308-
$dumper->setDumpBoundaries('', '');
309-
310-
$cloner = new VarCloner();
311-
$dumper->dump($cloner->cloneVar($s));
312-
313-
return substr(strip_tags($html), 1, -1);
314-
}
315256
}

src/Symfony/Component/HttpKernel/Tests/DataCollector/DumpDataCollectorTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public function testDump()
5050
);
5151
$this->assertEquals($xDump, $dump);
5252

53-
$this->assertStringMatchesFormat('a:3:{i:0;a:5:{s:4:"data";%c:39:"Symfony\Component\VarDumper\Cloner\Data":%a', $collector->serialize());
53+
$this->assertStringMatchesFormat('a:3:{i:0;a:5:{s:4:%a"data";%c:39:"Symfony\Component\VarDumper\Cloner\Data":%a', $collector->serialize());
5454
$this->assertSame(0, $collector->getDumpsCount());
5555
$this->assertSame('a:2:{i:0;b:0;i:1;s:5:"UTF-8";}', $collector->serialize());
5656
}

src/Symfony/Component/HttpKernel/composer.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,13 @@
3737
"symfony/stopwatch": "~2.8|~3.0|~4.0",
3838
"symfony/templating": "~2.8|~3.0|~4.0",
3939
"symfony/translation": "~2.8|~3.0|~4.0",
40-
"symfony/var-dumper": "~3.3|~4.0",
40+
"symfony/var-dumper": "~3.4|~4.0",
4141
"psr/cache": "~1.0"
4242
},
4343
"conflict": {
4444
"symfony/config": "<2.8",
4545
"symfony/dependency-injection": "<3.4",
46-
"symfony/var-dumper": "<3.3",
46+
"symfony/var-dumper": "<3.4",
4747
"twig/twig": "<1.34|<2.4,>=2"
4848
},
4949
"suggest": {

0 commit comments

Comments
 (0)
0