Comments (4)
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.
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.
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.
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
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 = PhpCsFixer\Finder::create() ... return PhpCsFixer\Config::create() ...
Siehe PhpCsFixer-Issue auf der Github-Seite.$finder = (new \PhpCsFixer\Finder()) ... return (new \PhpCsFixer\Config()) ...
- 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 diesettings.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)
- YForm Trick: Kontaktformular an richtige Ansprechpartner-E-Mail-Adresse, ohne E-Mail-Adresse offenzulegen HOT 1
- Neuer Trick: Artikel-Metadaten aus YForm-Tabelle per Ajax im Artikel hinzufügen HOT 14
- Mediapool - externe Datei in den Medienpool synchronisieren HOT 3
- Neue Tipps & Tricks: Backups – Warum, wann und wie durchführen? HOT 8
- rex_list Datensatz duplizieren HOT 3
- Eigene Addons in der Backend Navigation oben plazieren HOT 7
- Modul Tipp: Repeater HOT 7
- Info: Sortierung Medienpool aufsteigend HOT 2
- Problem: Rendern nummerierter Listen mit Unterbrechung HOT 2
- UPDATE Tricks > Development > VSCode 1/2
- REDAXO & XAMPP für Windows HOT 4
- Seitentitel und Metadaten anpassen mit Daten, die erst im Modul erzeugt werden HOT 1
- YForm: Datensatz klonen HOT 14
- Image URL bei Repeater ist defekt HOT 1
- VSCode und Redaxos PHP_CS_FIXER_CONFIG (auf dem Mac) HOT 1
- REDAXO Klassen ausserhalb REDAXO Kontext nutzen HOT 1
- Suchfunktion zeigt keine neuen Treffer HOT 5
- YForm Upload als Download bereitstellen
- `iwcc` entfernen
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from tricks.