- Saved searches
- Use saved searches to filter your results more quickly
- ajthinking/archetype
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- readme.md
- Saved searches
- Use saved searches to filter your results more quickly
- weblabormx/File-Modifier
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
- About
- Saved searches
- Use saved searches to filter your results more quickly
- weblabormx/File-Modifier
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
- About
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
Edit PHP files programmatically
ajthinking/archetype
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
readme.md
Enabling Rapid-Application-Development-tools, PR-bots, code analyzers and other things
- Programatically modify php files with an intuitive top level read/write API
- Read/write on classes, framework- and language constructs using FileQueryBuilders and AbstractSyntaxTreeQueryBuilders
composer require ajthinking/archetype
That’s it! Check out introduction of concepts below or review the API examples
use Archetype\Facades\PHPFile; // Create new files PHPFile::make()->class(\Acme\Product::class) ->use('Shippable') ->public()->property('stock', -1) ->save();
// Modify existing files PHPFile::load(\App\Models\User::class) ->className('NewClassName') ->save();
LaravelFile read/write API
use Archetype\Facades\LaravelFile; // extends PHPFile // Expanding on our User model LaravelFile::user() ->add()->use(['App\Traits\Dumpable', 'App\Contracts\PlayerInterface']) ->add()->implements('PlayerInterface') ->table('gdpr_users') ->add()->fillable('nickname') ->remove()->hidden() ->empty()->casts() ->hasMany('App\Game') ->belongsTo('App\Guild') ->save() ->render();
namespace App\Models; use App\Contracts\PlayerInterface; use App\Traits\Dumpable; use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Laravel\Sanctum\HasApiTokens; class User extends Authenticatable implements PlayerInterface < use HasApiTokens, HasFactory, Notifiable; protected $table = 'gdpr_users'; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'name', 'email', 'password', 'nickname', ]; /** * The attributes that should be cast. * * @var array */ protected $casts = []; /** * Get the associated Guild */ public function guild() < return $this->belongsTo(Guild::class); > /** * Get the associated Games */ public function games() < return $this->hasMany(Game::class); > >
Filter and retrieve a set of files to interact with.
// find files with the query builder PHPFile::in('database/migrations') ->where('extends', 'Migration') ->andWhere('className', 'like', 'Create') ->get() // returns Collection of PHPFiles // Quickly find the Laravel User file $file = LaravelFile::user(); // Quickly find Laravel specific files LaravelFile::models()->get(); LaravelFile::controllers()->get(); LaravelFile::serviceProviders()->get(); // .
Abstract Syntax Tree QueryBuilder
As seen in the previous examples we can query and manipulate nodes with simple or primitive values, such as strings and arrays. However, if we want to perform custom or more in dept queries we must use the ASTQueryBuilder .
Example: how can we fetch explicit column names in a migration file?
LaravelFile::load('database/migrations/2014_10_12_000000_create_users_table.php') ->astQuery() // get a ASTQueryBuilder ->classMethod() ->where('name->name', 'up') ->staticCall() ->where('class', 'Schema') ->where('name->name', 'create') ->args ->closure() ->stmts ->methodCall() ->where('var->name', 'table') ->args ->value ->value ->get();
The ASTQueryBuilder examines all possible paths and automatically terminates those that cant complete the query:
The ASTQueryBuilder relies entirely on nikic/php-parser. Available query methods mirror the PhpParser types and properties. To understand this syntax better you may want to tinker with dd($file->ast()) while building your queries. Basic conventions are listed below.
- Traverse into nodes by using methods ( method() , staticCall() . )
- Traverse into node properties by accessing properties ( args , stmts . )
- Filter results with where(. )
- Resolving matching paths with get()
ASTQueryBuilder also supports removing, replacing and injecting nodes 🔧
// Replace a node property $file->astQuery() ->class() ->name ->replaceProperty('name', $newClassName) ->commit() // updates the file's AST ->end() // exit query ->save()
If a file can’t be parsed, a FileParseError will be thrown. This can happen if you try to explicitly load a broken file but also when performing queries matching one or more problematic files.
To see all offending files run php artisan archetype:errors . To ignore files with problems, put them in config/archetype.php -> ignored_paths .
php artisan vendor:publish --provider="Archetype\ServiceProvider"
PRs and issues are welcome 🙏 Feel free to take a stab at an incomplete test.
git clone git@github.com:ajthinking/archetype.git cd archetype composer install ./vendor/bin/pest
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
PHP Package for modifing files.
weblabormx/File-Modifier
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
PHP Package for modifing single files. With this package you would have the posibility to modify a lot of files, talking about text files (.txt, .php, .json, .js, etc)
First to use the package you will need to add the namespace:
use WeblaborMX\FileModifier\FileModifier; use WeblaborMX\FileModifier\Helper; use WeblaborMX\FileModifier\MasiveModifier;
Weblabor is a web design agency based in México. You’ll find an overview of all our open source projects on our website.
Does your business depend on our contributions? Reach out and support us All pledges will be dedicated to allocating workforce on maintenance and new awesome stuff.
About
PHP Package for modifing files.
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
PHP Package for modifing files.
weblabormx/File-Modifier
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
PHP Package for modifing single files. With this package you would have the posibility to modify a lot of files, talking about text files (.txt, .php, .json, .js, etc)
First to use the package you will need to add the namespace:
use WeblaborMX\FileModifier\FileModifier; use WeblaborMX\FileModifier\Helper; use WeblaborMX\FileModifier\MasiveModifier;
Weblabor is a web design agency based in México. You’ll find an overview of all our open source projects on our website.
Does your business depend on our contributions? Reach out and support us All pledges will be dedicated to allocating workforce on maintenance and new awesome stuff.
About
PHP Package for modifing files.