Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Include Syntax Highlighting Language Option in Var-Dumper Dumps #164

Closed
butschster opened this issue Apr 30, 2024 · 1 comment · Fixed by #165 or #191
Closed

Include Syntax Highlighting Language Option in Var-Dumper Dumps #164

butschster opened this issue Apr 30, 2024 · 1 comment · Fixed by #165 or #191
Assignees
Labels
enhancement New feature or request help wanted Extra attention is needed module [var-dump]
Milestone

Comments

@butschster
Copy link
Member

butschster commented Apr 30, 2024

We aim to enhance Var-Dumper by allowing developers to specify the language for syntax highlighting within their dumps. This enhancement will streamline the debugging process and improve the readability of dumped content, particularly in cases involving multiple programming languages.

Introduce a new parameter or method within Var-Dumper that enables developers to specify the language for syntax highlighting. This parameter could accept standard language identifiers or aliases, such as those commonly used in code editors or highlighting libraries (e.g., "php", "javascript", "python", etc.).

image

The current method for adding additional context to a VarDumper involves complex and verbose code, which can be cumbersome and error-prone. This proposal aims to enhance the Symfony VarDumper API to provide a more intuitive and concise way of adding context information.

<?php

use Symfony\Component\VarDumper\Caster\ReflectionCaster;
use Symfony\Component\VarDumper\Cloner\VarCloner;
use Symfony\Component\VarDumper\Dumper\ContextProvider\CliContextProvider;
use Symfony\Component\VarDumper\Dumper\ContextProvider\SourceContextProvider;
use Symfony\Component\VarDumper\Dumper\ContextualizedDumper;
use Symfony\Component\VarDumper\Dumper\HtmlDumper;
use Symfony\Component\VarDumper\Dumper\ServerDumper;

\Symfony\Component\VarDumper\VarDumper::setHandler(function ($var, ?string $label = null) {
    $dumper = new ServerDumper('127.0.0.1', new HtmlDumper(), [
        'language' => 'php', // <===== this is the line that you need to add to your code
        'cli' => new CliContextProvider(),
        'source' => new SourceContextProvider(),
    ]);
    $dumper = new ContextualizedDumper($dumper, [new SourceContextProvider()]);


    $cloner = new VarCloner();
    $cloner->addCasters(ReflectionCaster::UNSET_CLOSURE_FILE_INFO);
    $var = $cloner->cloneVar($var);

    if (null !== $label) {
        $var = $var->withContext(['label' => $label]);
    }

    $dumper->dump($var);
});

Proposed Solutions:

  1. Static Method in VarDumper Class: Introduce a static method in the VarDumper class, such as addContext(), which accepts an array of default context settings. Developers can then call this method to set default context options, including the language for syntax highlighting. See https://github.com/symfony/var-dumper/blob/7.0/VarDumper.php#L101
\Symfony\Component\VarDumper\VarDumper::addContext(['language' => 'php']);
  1. Named Argument in dump() function: Extend the dump() function to accept a named argument context, allowing developers to specify default context settings directly when calling dump().
dump($foo, $bar, ..., context: ['language' => 'php']);

UPD: as I can see there is a PR in symfony repository symfony/symfony#48667 that can solve our problem.

@roxblnfk
Copy link
Member

roxblnfk commented May 18, 2024

Using trap the user may provide any custom context for dump's Data object.
Let's use it

trap($phpCode)->context(language: 'php');

Note: the feature wasn't released yet. It's in master branch now.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request help wanted Extra attention is needed module [var-dump]
Projects
Status: Done
2 participants