AI prompts
base on Swiss knife in pocket of every upgrade architect! # Swiss Knife for Upgrades
[![Downloads total](https://img.shields.io/packagist/dt/rector/swiss-knife.svg?style=flat-square)](https://packagist.org/packages/rector/swiss-knife/stats)
Swiss knife in pocket of every upgrade architect!
<br>
## Install
```bash
composer require rector/swiss-knife --dev
```
## Usage
### 1. Check your Code for Git Merge Conflicts
Do you use Git? Then merge conflicts is not what you want in your code ever to see in pushed code:
```bash
<<<<<<< HEAD
````
Add this command to CI to spot these:
```bash
vendor/bin/swiss-knife check-conflicts .
```
*Note: The `/vendor` directory is excluded by default.*
<br>
### 2. Detect Commented Code
Have you ever forgot commented code in your code?
```php
// foreach ($matches as $match) {
// $content = str_replace($match[0], $match[2], $content);
// }
```
No more! Add this command to CI to spot these:
```bash
vendor/bin/swiss-knife check-commented-code <directory>
vendor/bin/swiss-knife check-commented-code packages --line-limit 5
```
<br>
### 3. Reach full PSR-4
#### Find multiple classes in single file
To make PSR-4 work properly, each class must be in its own file. This command makes it easy to spot multiple classes in single file:
```bash
vendor/bin/swiss-knife find-multi-classes src
```
<br>
#### Update Namespace to match PSR-4 Root
Is your class in wrong namespace? Make it match your PSR-4 root:
```bash
vendor/bin/swiss-knife namespace-to-psr-4 src --namespace-root "App\\"
```
This will update all files in your `/src` directory, to starts with `App\\` and follow full PSR-4 path:
```diff
# file path: src/Repository/TalkRepository.php
-namespace Model;
+namespace App\Repository;
...
```
<br>
### 4. Finalize classes without children
Do you want to finalize all classes that don't have children?
```bash
vendor/bin/swiss-knife finalize-classes src tests
```
Do you use mocks but not [bypass final](https://tomasvotruba.com/blog/2019/03/28/how-to-mock-final-classes-in-phpunit) yet?
```bash
vendor/bin/swiss-knife finalize-classes src tests --skip-mocked
```
This will keep mocked classes non-final, so PHPUnit can extend them internally.
<br>
Do you want to skip file or two?
```bash
vendor/bin/swiss-knife finalize-classes src tests --skip-file src/SpecialProxy.php
```
<br>
### 5. Privatize local class constants
PHPStan can report unused private class constants, but it skips all the public ones.
Do you have lots of class constants, all of them public but want to narrow scope to privates?
```bash
vendor/bin/swiss-knife privatize-constants src test
```
This command will:
* find all class constant usages
* scans classes and constants
* makes those constant used locally `private`
That way all the constants not used outside will be made `private` safely.
<br>
Happy coding!
", Assign "at most 3 tags" to the expected json: {"id":"7933","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"