Git Product home page Git Product logo

Comments (4)

christophboecker avatar christophboecker commented on August 17, 2024 1

Noch ne Variante in Sachen php-cs-fixer. Damit kann man das Redaxo-Repository in der jeweils aktuellen Fassung einbinden, ohne jedes mal eine neue Konfig zusammenbauen zu müssen.

Auf macOS-Systemen hat es ein Verzeichnis ~/.vscode. Dort sind z.B. die installierten Extensions abgelegt. Hier könnte man die Konfiguration aus dem Repo für den Redaxo-php-cs-fixer ablegen.

Die Konfigurationsdatei im Repo (.php-cs-fixer.dist.php) benötigt eine per Autoloader bereitgestellte Klasse, die so leider nicht gefunden wird. Also muss man das System überlisten. Die Lösung: nicht die Konfigurationsdatei im Repo (.php-cs-fixer.dist.php) direkt verlinken, sondern eine Interface-Datei (.php-cs-fixer.php) zwischenschalten. Die Interface-Datei wird in der VSCode-Extension verlinkt und verbindet die nötigen Komponenten aus dem Repo:

include __DIR__.'/php-cs-fixer-config/src/Config.php';
return include (__DIR__.'/php-cs-fixer-config/.php-cs-fixer.dist.php');

Will man zusätzlich einzelne Einstellungen ändern, geht das so:

include __DIR__.'/php-cs-fixer-config/src/Config.php';
$config = include (__DIR__.'/php-cs-fixer-config/.php-cs-fixer.dist.php');
$rules = $config->getRules();
# rules al gusto verändern
$config->setRules($rules);
return $config

Bei Updates des Repos sollte es meist reichen, einfach das Repo auszutauschen.

Verzeichnisstruktur:

~/.vscode/
    .php-cs-fixer.php                    Die Interface-Datei
     php-cs-fixer-config/                Kopie des Redaxo-Repo bzw. des Releases
         .php-cs-fixer.dist.php          Die Original-Startdatei
         src/
             Config.php                  Notwendige eingebundene Klasse

Gefällt mir besser als der erste Vorschlag. Wie sähe denn auf einem Windosws-System das Equivalent zu ~/.vscode aus?

from tricks.

aeberhard avatar aeberhard commented on August 17, 2024 1

@Koala @christophboecker

Anhand von Christoph's letztem Vorschlag habe ich das jetzt mal auf Windows versucht.

Ich bin da aber auf Probleme gestossen.

https://github.com/kubawerlos/php-cs-fixer-custom-fixers musste ich noch zusätzlich herunterladen.
Auch den REDAXO-Fixer musste ich per require bekannt machen.

Die .php-cs-fixer.php sieht dann so aus

<?php

// Custom Fixer
require __DIR__ . '/php-cs-fixer-config/php-cs-fixer-custom-fixers/bootstrap.php';

// REDAXO Fixer
require __DIR__ . '/php-cs-fixer-config/src/Fixer/StatementIndentationFixer.php';

include __DIR__.'/php-cs-fixer-config/src/Config.php';
return include __DIR__.'/php-cs-fixer-config/.php-cs-fixer.dist.php';

Ich werde das dann evtl. morgen in einen PR packen.

from tricks.

madiko avatar madiko commented on August 17, 2024

Ich notiere hier auch mal noch das Anliegen von @christophboecker von heute:

VSCode und PHP-CS-FIXER:
Wie kann ich rausfinden, welche Einstellungen der lädt bzw. ob er die REDAXO-Config geladen hat. Wenn ich die Doku richtig verstehe, suche er im .vscode-Verzeichnis z.B. nach .php-cs-fixer.php. Dort hab ich die Einstellungen liegen, aber die scheinen nicht zu greifen. Jemand nen Tip?

from tricks.

christophboecker avatar christophboecker commented on August 17, 2024

Nur um es schon mal geschrieben zu haben:

(iMac mit macOS, Apache/MySQL/PHP 7.4 installiert mittels Homebrew, PHP im Suchpfad der Console enthalten, VSCode 1.68 und php-cs-fixer-Extension von junstyle 0.2.12)

  • Der Beispielcode aus dem Trick
    `$finder = PhpCsFixer\Finder::create()
    ...
    return PhpCsFixer\Config::create()
    ...
    ist veraltet und führt mit dem aktuellen php-cs-fixer zu einem Abbruch. Man erhält die Instanzen nun über einen normalen Constructor
    $finder = (new \PhpCsFixer\Finder())
    ...
    return (new \PhpCsFixer\Config())
    ...
    Siehe PhpCsFixer-Issue auf der Github-Seite.
  • Die vermissten Einstellungen für Redaxo sind nun in einem eigenen Repository. Keine Ahnung, wie man das lokal elegant einbindet, aber man kann sich daraus die passende Datei einfach ableiten und ab und an aktualisieren. Etwas Feintuning ist aber nötig.
    // OrderedImportsFixer in den Rules benötigt den Pfad zum Namespace
    use PhpCsFixer\Fixer\Import\OrderedImportsFixer;
    
    $finder = (new PhpCsFixer\Finder())
      ->in(__DIR__)
    ;
    
    // aus https://github.com/redaxo/php-cs-fixer-config/blob/main/src/Config.php abgeleitet
    return (new PhpCsFixer\Config())
      // aus public function __construct
      ->setUsingCache(true)
      ->setRiskyAllowed(true)
      // aus private const REDAXO_RULES
      ->setRules([
          '@Symfony' => true,
          '@Symfony:risky' => true,
          '@PHP73Migration' => true,
          '@PHP71Migration:risky' => true,
          '@PHPUnit84Migration:risky' => true,
          'array_indentation' => true,
          'blank_line_before_statement' => false,
          'braces' => ['allow_single_line_closure' => false],
          'comment_to_phpdoc' => true,
          'concat_space' => false,
          'declare_strict_types' => false,
          'echo_tag_syntax' => false,
          'empty_loop_condition' => false,
          'global_namespace_import' => [
              'import_constants' => true,
              'import_functions' => true,
              'import_classes' => true,
          ],
          'heredoc_to_nowdoc' => true,
          'list_syntax' => ['syntax' => 'short'],
          'method_argument_space' => ['on_multiline' => 'ignore'],
          'native_constant_invocation' => false,
          'no_alternative_syntax' => false,
          'no_blank_lines_after_phpdoc' => false,
          'no_null_property_initialization' => true,
          'no_superfluous_elseif' => true,
          'no_unreachable_default_argument_value' => true,
          'no_useless_else' => true,
          'no_useless_return' => true,
          'ordered_class_elements' => ['order' => [
              'use_trait',
              'constant_public',
              'constant_protected',
              'constant_private',
              'property',
              'construct',
              'phpunit',
              'method',
          ]],
          'ordered_imports' => ['imports_order' => [
              OrderedImportsFixer::IMPORT_TYPE_CLASS,
              OrderedImportsFixer::IMPORT_TYPE_CONST,
              OrderedImportsFixer::IMPORT_TYPE_FUNCTION,
          ]],
          'php_unit_internal_class' => true,
          'php_unit_test_case_static_method_calls' => true,
          'phpdoc_align' => false,
          'phpdoc_no_package' => false,
          'phpdoc_order' => true,
          'phpdoc_separation' => false,
          'phpdoc_to_comment' => false,
          'phpdoc_types_order' => false,
          'phpdoc_var_annotation_correct_order' => true,
          'psr_autoloading' => false,
          'semicolon_after_instruction' => false,
          'static_lambda' => true,
          'void_return' => false,
      ])
      ->setFinder($finder)
    ;
  • Den Pfad zur PHP-Executable musste ich nicht einstellen, PHP wird automatisch gefunden. Das liegt wohl daran, dass PHP auf meinem System im Suchpfad der Shell enthalten ist. Achtung: CLI-Version von PHP in der Shell ist nicht automatisch auch die SAPI-Version im Webserver. (muss hier aber auch nicht)
  • Pfad zur Konfigurationsdatei in den Setting: da ist die Beschreibung etwas krude. Bei mit funktionierts es, wenn ich nur den Pfad der Konfigurationsdatei hinterlege und nicht durch ; getrennte Dateinamenvarianten und Pfade. Bei mir ist das der Pfad zum HTTP-Root, also "php-cs-fixer.config": "/Users/<<ich>/Sites/.php-cs-fixer.php". Klappt auch mit anderen Pfaden. Dazu muss man auch nicht die settings.json öffnen; die Einstellungsseite der Erweiterung ermöglicht die Eingabe im Abschnitt PHP-cs-fixer: Config.
  • Der offizielle Name der Config ist nun .php-cs-fixer.php, andere Namen sind veraltet, stand in einer Fehlermeldung in der VSCode-Konsole.
  • Hilfreich für die Fehlersuche: in VSCode die Konsole einschalten (Hife > Entwicklertools) und dort "Console". Das Ding sieht aus wie die Entwicklertools im Browser.
  • In der Konsole sieht man auch, ob die Extension überhaupt angezogen wurde und mit welchen Parametern (also auch den Namen der Config-Datei). Meldungen wie "Paths from configuration file have been overridden by paths provided as command arguments." hab ich ignoriert.

from tricks.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.