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

UPDATE Tricks > Development > VSCode 2/2 #298

Open
madiko opened this issue Jun 16, 2022 · 4 comments
Open

UPDATE Tricks > Development > VSCode 2/2 #298

madiko opened this issue Jun 16, 2022 · 4 comments

Comments

@madiko
Copy link
Contributor

madiko commented Jun 16, 2022

Moin. Ergänzend zu meinem ersten Issue, den ich selbst lösen konnte, hier noch die offenen Punkte für die Profis 😉

https://github.com/FriendsOfREDAXO/tricks/blob/master/_docs/development/editor-vscode.md

Zeile 60
https://raw.githubusercontent.com/redaxo/redaxo/master/.php_cs.dist
Fehler: 404 not found

Und noch eine Frage: Gibt es einen Grund, dass in Zeile 254 der Fork von Natan Fourie (aka Natizyskunk) verwendet wird statt des Originals von
sFTP von Natizyskunk: sFTP von Natizyskunk
sFTP von liximomo: sFTP von liximomo

Eine Erklärung könnte sein, dass Natan deutlich aktueller ist und weniger offene issues hat.

Vielen Dank!

@madiko
Copy link
Contributor Author

madiko commented Jun 22, 2022

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?

@christophboecker
Copy link
Member

christophboecker commented Jun 26, 2022

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.

@christophboecker
Copy link
Member

christophboecker commented Jul 13, 2022

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?

@aeberhard
Copy link
Member

@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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants