mgkprod/presets

`Preset.edit().addAfter()` ne fonctionne pas comme attendu

mgkprod opened this issue · 4 comments

Le contenu n'est pas trouvé avec une recherche par regex

presets/config/preset.js

Lines 33 to 47 in 0930ac7

//* FIXME: Not working
// .addAfter(/public function register\(\)(\s*){/gm, [
Preset.edit('app/Providers/AppServiceProvider.php')
.addAfter('public function register', [
"if (config('app.env') === 'production') {",
" \URL::forceScheme('https');",
'}',
'',
"Carbon::setLocale(config('app.locale'));",
"setlocale(LC_TIME, config('app.locale'));",
'',
])
.skipLines(1)
.withIndent('double')

Mais également, lors d'une recherche par string

presets/config/preset.js

Lines 23 to 31 in 0930ac7

//* FIXME: Not working
// .addAfter('use Illuminate\\Support\\ServiceProvider;',
// AppServiceProvider
Preset.edit('app/Providers/AppServiceProvider.php')
.addAfter('use', [
'use Illuminate\\Support\\Carbon;',
'use Illuminate\\Support\\Facades\\URL;',
])

Impacts :

https://github.com/mgkprod/presets/blob/main/config/preset.js#L24
https://github.com/mgkprod/presets/blob/main/config/preset.js#L24
https://github.com/mgkprod/presets/blob/main/version/preset.js#L6
https://github.com/mgkprod/presets/blob/main/version/preset.js#L16

C'est parce que cette action utilise match, donc l'argument passé doit être un string ou une regexp, et si c'est un string ça doit contenir la regexp. C'est confus donc je vais sûrement améliorer ça, mais en attendant tu peux juste utiliser une regexp normale :

.addAfter(/use Illuminate\\Support\\ServiceProvider;/, [])

J'ai ici cette utilisation avec cette regex :

Preset.edit('app/Providers/AppServiceProvider.php')
    .addAfter(/public function register\(\)(\s*){/m, [
		''
    ])

pour détecter à la fois :

public function register()
    {

et :

public function register(){

Le fichier n'est pas modifié. Est-ce que le match fonctionne sur du multi-line ?

En revanche, celle-ci fonctionne :

.addAfter(/use Illuminate\\Support\\ServiceProvider;/, [])

Non, match fonctionne que sur une seule ligne, parce que le fichier est split par retour à la ligne pour supporter addBefore

C'est pour ce cas de figure qu'il y a skipLines, pour pouvoir ajouter du contenu dans le corps d'une méthode après l'avoir match

Non, match fonctionne que sur une seule ligne, parce que le fichier est split par retour à la ligne pour supporter addBefore

C'est pour ce cas de figure qu'il y a skipLines, pour pouvoir ajouter du contenu dans le corps d'une méthode après l'avoir match

Dommage mais ok!